Работа с чтением из файла - 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, что означает успешное завершение программы