Работа с чтением из файла - 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. Вот что на данный момент есть. Оно работает с файлом без ; и расшифровки, вычитывает эти значения и выводит в консоль. Буду благодарен за любые советы
#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);
а остальные строки как? ограничить чтоли в fgets второй аргумент позицией точки з запятой? и потом уже каждое число парсить из чаров типа 01 в 0х01?

Решение задачи: «Работа с чтением из файла»

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;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и строками
  2. Объявление переменной file типа FILE* для работы с файлом
  3. Открытие файла 1.txt в режиме чтения с помощью функции fopen()
  4. Проверка на успешное открытие файла. Если файл не открылся, выводится сообщение об ошибке и программа завершается
  5. Объявление трех переменных типа int для подсчета строк, столбцов и индекса массива
  6. Объявление двумерного массива arra типа char размером 128x128 для хранения данных из файла
  7. Объявление переменной line типа char для чтения строки из файла
  8. Чтение первой строки из файла с помощью функции fgets()
  9. Вывод первой строки на экран с помощью функции puts()
  10. Цикл while, который будет выполняться до тех пор, пока не достигнут конец файла
  11. Внутри цикла, инициализация трех переменных типа int для обработки текущей строки
  12. Чтение строки из файла с помощью функции fgets()
  13. В цикле while происходит обработка каждого символа строки
  14. Каждый символ строки записывается в соответствующую ячейку массива arra
  15. Если символ строки равен ';', то цикл while прерывается
  16. Увеличение индекса массива i после каждой прочитанной строки
  17. Закрытие файла с помощью функции fclose()
  18. Цикл for, который будет выполняться для вывода всех строк массива на экран
  19. Вывод строки на экран с помощью функции printf()
  20. Возврат значения 0, что означает успешное завершение программы

Оцени полезность:

13   голосов , оценка 4.077 из 5
Похожие ответы