Member 13811342 Ответов: 3

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


У меня есть текстовый файл, содержащий:
2
BA1 01 01 01 01 LAS 01 01 01 01
УТ1 02 02 02 02 02 02 02 02 ИНДЕКС

2 - это количество сохраненных рейсов, а ниже приведены сведения об этих двух рейсах. Он прекрасно пишет. Однако я хочу чтобы он читал первый символ как целое число поэтому он устанавливает границу для цикла for при печати количества рейсов например

for(counter = 0; counter <= amount of flights; counter++;
    fprintf(all the flight detail stuff)


Как я могу превратить первый символ в целое число? Использую ли я fscanf и каким-то образом выбрал первую позицию?
Как мне запустить fscanf во второй строке, чтобы он печатал только рейсы, а не количество рейсов.

Что я уже пробовал:

Я где-то читал, что вы можете использовать fseek и установить позицию, но я не понимаю, что такое позиция второй строки ? Кроме того, я не знаю, Могу ли я Изменить 2 на int.

3 Ответов

Рейтинг:
2

KarstenK

Гораздо более плавным является использование библиотеки std и getline. Видеть Чтение следующей строки файла.


Рейтинг:
1

User 7429338

Вы можете использовать fgets [^] в цикле для чтения файла строка за строкой. Когда больше не будет прочитано ни одной строки, он вернет NULL.

На первой линии вы можете использовать sscanf[^] чтобы извлечь целое число.


Member 13811342

Я не понимаю, как им пользоваться, но не могли бы вы исправить его для моего конкретного случая? fgets( что??)

Рейтинг:
1

Jochen Arndt

Распространенным решением является чтение текстовых файлов строка за строкой в буфер и обработка (синтаксический анализ) каждой строки в соответствии с требованиями.

Другое решение-считывание всего содержимого в выделенный буфер (размер файла плюс один), добавление нулевого символа и выполнение обработки в этом буфере (поиск 0x0A / LF в качестве Терминатора строки).

Третье решение заключается в использовании fscanf() Но это менее гибко и должно использоваться только тогда, когда формат файла известен и не изменится.

В вашем случае я бы пошел на первое решение (проверка ошибок опущена):

int i, num_of_flights;
char buffer[MAX_LINE_LENGTH];
/* Read the first line */
fgets(buffer, sizeof(buffer), fd);
/* That should contain a single integer. */
num_of_flights = atoi(buffer);
for (i = 0; i < num_of_flights; i++)
{
    /* Read next line */
    fgets(buffer, sizeof(buffer), fd);
    /* Process line here.
       Note that fgets stores also the line terminator (CR-LF or LF). */
}
Вышеуказанные виды использования atoi - ссылка на C++ [^] для преобразования строки в целое число. Он останавливается на первом нецифровом символе. Если вам нужно знать, в какой позиции останавливается синтаксический анализ, используйте strtol - ссылка на C++ [^] вместо.