C файл читается по строке до пользовательского разделителя - PullRequest
0 голосов
/ 16 ноября 2010

Есть ли в C функция для чтения файла с пользовательским разделителем, таким как '\ n'?

Например: у меня есть:

Я написал \ n, чтобы проиллюстрировать в файле LF (перевод строки, '\ n', 0x0A)

this is the firstline\n this is the second line\n

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

this is the firstline\n
this is the second line\n

Я знаю fgets, я могу читать до количества символов, но не по любой схеме. В C ++ я знаю, что есть метод, но в C, как это сделать?

Я покажу другой пример:

Я читаю файл ABC.txt

abc\n
def\n
ghi\n

Со следующим кодом:

FILE* fp = fopen("ABC.txt", "rt");
const int lineSz = 300;
char line[lineSz];
char* res = fgets(line, lineSz, fp); // the res is filled with abc\ndef\nghi\n
fclose(fp);

Я ожидал, что fgets должен был остановиться на abc \ n

Но res заполняется: abc \ ndef \ nghi \ n

решено: Проблема в том, что я использовал Notepad ++ в WindowsXP (тот, который я использовал Я не знаю, что происходит в других окнах) сохранил файл с другим кодирование.

Новая строка в fgets требует CRLF, а не только CR при вводе введите в блокноте ++

Я открыл блокнот Windows, и он работал, Fgets читает строку до abc \ n во втором примере.

1 Ответ

1 голос
/ 16 ноября 2010

fgets() будет читать по одной строке за раз и включает символ перевода строки в буфере вывода строки.Вот пример общего использования.

#include <stdio.h>
#include <string.h>
int main()
{
    char buf[1024];
    while ( fgets(buf,1024,stdin) )
        printf("read a line %lu characters long:\n  %s", strlen(buf), buf);
    return 0;
}

Но так как вы спрашивали об использовании "пользовательского" разделителя ... getdelim() позволяет вам указать другой разделитель конца строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...