Работа с чтением из файла - C (СИ)
Формулировка задачи:
Привет ребята, пишу прошу для копирования ЕЕРROM по I2C одного устройства в другое, и возникла следующая проблема,
я считываю в текстовый файл что есть в памяти и сохраняю в файл test.txt.
Данные храняться в файле test.txt в виде по 16 чисел в строчку потом ; и потом аски значения, если число 0х00 то ставиться точка. Данные начинаются со второй строчки в первой пишется N20R10, это значения которые мне нужно будет потом спарсить.
Вот так выглядит файл, только строчек в нем очень много.
N20R10
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
...
...
Собственно говоря теперь вопросы. Как работать с этим файлом? Как с двумерным массивом? Мне эти данные потом нужны будут для того чтобы отправить по I2C. Вот что на данный момент есть. Оно работает с файлом без ; и расшифровки, вычитывает эти значения и выводит в консоль. Буду благодарен за любые советы
а остальные строки как? ограничить чтоли в fgets второй аргумент позицией точки з запятой? и потом уже каждое число парсить из чаров типа 01 в 0х01?
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> int main ( void ) { static const char filename[] = "1.txt"; FILE *file = fopen ( filename, "r" ); int i, j; char res; char arra[128][128] = {'\0'}; char line[128] = {'\0'}; if ( file != NULL ) { while ( fgets ( line, sizeof line, file ) != NULL ) { strcpy(arra, line); printf("array ----> %s ", &arra); } fclose ( file ); } else{ perror ( filename ); } return 0; }
поразмыслив немного и понял что первую строку можна считать достаточно просто
char sys_info[16]; ... fgets(sys_info, sizeof(sys_info), file);
Решение задачи: «Работа с чтением из файла»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> int main () { FILE *file = NULL; file = fopen("1.txt","r"); if(file == NULL){ puts("Error opening file!"); exit(1); } int i = 0, j = 0, k = 0; char arra[128][128]; char line[128]; fgets (line, 127, file); puts(line); while ( fgets (line, 128, file) ){ j = 0; k = 0; while(1){ arra[i][j] = line[k]; if(line[k] == ';') break; j++; k++; } i++; } fclose ( file ); for(j = 0; j < i; j++) printf("array ----> %s\n", arra[j]); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с файлами и строками
- Объявление переменной
file
типаFILE*
для работы с файлом - Открытие файла
1.txt
в режиме чтения с помощью функцииfopen()
- Проверка на успешное открытие файла. Если файл не открылся, выводится сообщение об ошибке и программа завершается
- Объявление трех переменных типа
int
для подсчета строк, столбцов и индекса массива - Объявление двумерного массива
arra
типаchar
размером 128x128 для хранения данных из файла - Объявление переменной
line
типаchar
для чтения строки из файла - Чтение первой строки из файла с помощью функции
fgets()
- Вывод первой строки на экран с помощью функции
puts()
- Цикл
while
, который будет выполняться до тех пор, пока не достигнут конец файла - Внутри цикла, инициализация трех переменных типа
int
для обработки текущей строки - Чтение строки из файла с помощью функции
fgets()
- В цикле
while
происходит обработка каждого символа строки - Каждый символ строки записывается в соответствующую ячейку массива
arra
- Если символ строки равен ';', то цикл
while
прерывается - Увеличение индекса массива
i
после каждой прочитанной строки - Закрытие файла с помощью функции
fclose()
- Цикл
for
, который будет выполняться для вывода всех строк массива на экран - Вывод строки на экран с помощью функции
printf()
- Возврат значения 0, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д