Как читать числа, разделенные запятыми, из файла в многомерный массив в C

Я хочу написать функцию, которая создает массивы целых чисел в файле с числами, разделенными запятыми, например:

         1,    54520.00000,    86397.00000,   0
         2,    54440.00000,    87200.00000,   0
         3,    51280.00000,    97600.00000,   0
         4,    50000.00000,   100000.00000,   0
         5,    48880.00000,   100000.00000,   0

Первый столбец — это номер каждой строки, поэтому данные, которые мне нужны, — это следующие три столбца.
Мои проблемы:

  1. Поскольку я не знаю размерность массива, мне нужно сначала прочитать первое число последней строки. Как это сделать? Я попытался использовать fseek, чтобы указать указатель файла на конец файла, а затем найти предыдущий «\ n», но я не знаю, как обращаться с запятой.
  2. После того, как я получу количество строк, как я могу прочитать эти данные, которые мне нужны, в массив N_row*3? Как быть с запятой и '\n'?

Заранее спасибо за помощь!


person Jin Yan    schedule 30.01.2013    source источник
comment
Количество столбцов фиксировано?   -  person Alex Oliveira    schedule 30.01.2013
comment
Да, количество столбцов фиксировано.   -  person Jin Yan    schedule 30.01.2013
comment
Это должен быть дубликат, верно?   -  person Carl Norum    schedule 30.01.2013
comment
Что вы подразумеваете под дубликатом?   -  person Jin Yan    schedule 30.01.2013
comment
Означает, что кто-то уже задавал этот вопрос раньше и, вероятно, где-то на этом сайте уже есть ответ.   -  person Tim    schedule 30.01.2013
comment
Вы имеете в виду, например, этот (вторая или третья часть всей страницы, которую я получил, когда искал чтение с разделителями-запятыми на C). stackoverflow .com/questions/10709804/   -  person Mats Petersson    schedule 30.01.2013
comment
Я понимаю. Я впервые задаю вопрос на этом сайте. Я тоже читал этот вопрос, но не могу понять идею. Извините, что задаю дублирующиеся вопросы. В следующий раз я сначала буду искать похожие вопросы. Спасибо за напоминание.   -  person Jin Yan    schedule 30.01.2013


Ответы (1)


вы можете использовать fscanf()

используйте следующий fscanf() в цикле, пока не дойдете до конца файла:

int i,j
double x,y;
while (fscanf(fp, " %d , %f , %f , %d", &i, &x, &y, &j) != EOF) {....}
person MOHAMED    schedule 30.01.2013
comment
Спасибо! Должен ли я назначить x, y, j для myarray[i][0], myarray[i[1], myarray[i][2] соответственно в цикле while? Я только что попробовал, но это не сработало :( - person Jin Yan; 30.01.2013
comment
Жаль, что я сделал ошибку. Это работает очень хорошо! Большое спасибо! Кстати, не могли бы вы подсказать мне мой первый вопрос о том, как читать первую цифру последнего столбца? - person Jin Yan; 30.01.2013
comment
Вам не нужна эта часть %*[^\n]. Просто прочитайте следующий %d, и '\n' будет проигнорирован. - person Alex Oliveira; 30.01.2013
comment
Спасибо Мохамеду КАЛЛЕЛЮ и Алексу Оливейре. Это самый простой способ решить мою проблему, которую я когда-либо видел. - person Jin Yan; 30.01.2013