Как читать из файла, кроме последней строки в C? - PullRequest
0 голосов
/ 05 августа 2010

У меня есть файл, в котором мне нужно прочитать данные и сохранить их в структуре.

10001 john
10002 david
10003 randy
10/10/2010 15:50:55 Updated by : Name

Теперь для вышеуказанного файла мне нужно прочитать данные от '10001' & 'john' до '10003' & 'randy', кроме последней строки (Конец файла).

Как это сделать в C?

Обновление: последняя строка будет динамической.

Ответы [ 4 ]

0 голосов
/ 19 марта 2016
int id;
char name[80];

FILE *fp = fopen("data.txt", "r");

while (fscanf(fp, "%d%s[^n]", &id, name) == 2)
{
   /* do something with id and name */ 
}

Вам не нужно сначала читать строку, а затем получать из нее данные.Вместо этого просто прочитайте нужные данные из файла напрямую.

0 голосов
/ 05 августа 2010

Что бы вы сделали, если бы в файле не было последней строки? Предположительно в каком-то цикле читайте каждую строку и сохраняйте ее.

Вы можете просто добавить «если» перед сохранением, проверяя, соответствует ли строка вашему «Концу файла».

Как правило, с такими проблемами разбивайте проблему на части, которые вы можете понять. Затем соединяет биты вместе.

Вы также можете подумать, что делать, если файл выглядит как

10001 john
10002 david
Silly line in middle of file
10003 randy
End of the file
10003 mr unexepected

Ваше приложение должно быть устойчивым к странным вводам.

0 голосов
/ 05 августа 2010
char line[81];
FILE *f=fopen("file","rt");

while( fgets(line,sizeof line,f) )
{
int tag1;
char tag2[81];
if( 2==sscanf(line,"%d%80s",&tag1,tag2) )
{
/* do anything */
}
}
0 голосов
/ 05 августа 2010

читать построчно. Когда вы получаете EOF сбросить последнюю строку.

Edit:

while (fgets(line, length, file) && !feof(file))
{
   /* process the line */ 
}
...