Храните строки двухмерного массива одновременно - PullRequest
0 голосов
/ 06 марта 2020

У меня проблема с сохранением всех значений строки, которые я одновременно читаю из файла csv, для помещения в 2-мерный массив.

Вот мой код:

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

#define BUFSIZE 1024

int main()
{    
    char *filename = "pb0.csv";
    char str[BUFSIZE];
    FILE *fpr;
    fpr = fopen(filename, "r");
    int i,j;
    const int row = 449;
    const int column = 6;
    int family[row][column];
    int c,d,e,f,g,h;


    if (fgets(str, BUFSIZE, fpr) != NULL) {
        while(fscanf(fpr, "%d; %d; %d; %d; %d; %d", &c,&d,&e,&f,&g,&h) != EOF){
            for(i=0;i<row;i++){
                for(j=0;j<column;j++){
                    //add code here
                }
            }
        }
    }

    //printf("%d",n);
    fclose(fpr);

    return 0;
}

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 06 марта 2020

Я бы сказал, что у вас есть как минимум две проблемы с кодом, который вы показываете. Во-первых, вы читаете и игнорируете самой первой строки. Во-вторых, вы не очень хорошо обрабатываете ошибки. В-третьих, вы читаете одну «строку» из файла, а затем перебираете все 2-мерного массива (когда вам нужно только установить значения одной строки).

С несколькими изменениями вы можете решить все три из этих проблем (третья - то, о чем вы, кажется, спрашиваете):

int current_row = 0;

// Read all lines in a loop
while (fgets(str, BUFSIZE, fpr) != NULL)
{
    // Parse the line we just read, read directly into the row
    if (sscanf(str, "%d; %d; %d; %d; %d; %d",
               &family[current_row][0],
               &family[current_row][1],
               &family[current_row][2],
               &family[current_row][3],
               &family[current_row][4],
               &family[current_row][5]) == 6)
    {
        // Parsing successful, advance to the next row
        ++current_row;
    }
}

// All data read from the file
// The number of lines that was actually read and successfully parsed is in
// the variable current_row

// Example iterating over all records that were read from the file
for (int i = 0; i < current_row; ++i)
{
    printf("family[%d][0] = %d\n", i, family[i][0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...