Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
1

Работа с чтением из файла

31.08.2016, 14:59. Показов 1428. Ответов 7

Author24 — интернет-сервис помощи студентам
Привет ребята, пишу прошу для копирования ЕЕР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. Вот что на данный момент есть. Оно работает с файлом без ; и расшифровки, вычитывает эти значения и выводит в консоль. Буду благодарен за любые советы

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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;
    }
Добавлено через 9 минут
поразмыслив немного и понял что первую строку можна считать достаточно просто
C
1
2
3
 char sys_info[16];
...
 fgets(sys_info, sizeof(sys_info), file);
а остальные строки как? ограничить чтоли в fgets второй аргумент позицией точки з запятой? и потом уже каждое число парсить из чаров типа 01 в 0х01?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.08.2016, 14:59
Ответы с готовыми решениями:

Работа со структурами и чтением из файла
На основе сводной экзаменационной ведомости, включающей фамилии студентов и оценки по дисциплинам...

Работа с чтением/записью бинарного файла
Здравствуйте. Хочу создать бинарный файл, туда записать число. Затем его закрыть, заново открыть и...

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

Проблемы с чтением из файла
Здравствуйте все! У меня сразу два вопроса. Начну с того, который попроще. Я осваиваю библиотеку...

7
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
31.08.2016, 16:26 2
andreyka93, немного непонятно в чем вопрос? нужно считывать построчно?или до ; отдельно,остальное до новой строки отдельно? или как?
0
131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
31.08.2016, 16:28  [ТС] 3
считываем до ; остальное пропускаем, и считываем следующую строку опять до ;
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
31.08.2016, 16:37 4
т.е нужны только эти 16 цифр в каждой строке?они расположены в каждой строке с начала строки?считывать одной строкой или каждое значение в отдельную строку? что там насчет точки?вместо 00 выводить точку на экран?
0
131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
31.08.2016, 17:03  [ТС] 5
да замудрил я конечно задание) знаю что хочу но на русском написать это сложно
вот так выглядит файл, тут я копипастил но в реальности другие значения, справа ноль выводится как точка для того чтобы было легче рассмотреть что ты только прочитал через II2, так как я сказал будуть EEPROM"ы программироваться, то что справа после ; игнорируется, просто hex числа до точки с запятой, и надо чтобы 30 считывалось не как 0х03 и 0х00, а 0х30, но для перевода чисел у меня функция уже написана

N20R10
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 31 ; 0..............1
......

Добавлено через 17 минут
короче понятно что нужен двухмерный массив, data[i][j], где i колличество строк, j колличество символов, в пред сообщении i = 5, так как самая первая строка будет отдельно считываться, и j = 48, так как 16 чисел по 2 числа и плюс по пробелу после них, 16*2+16 = 48. Теперь смотрю на функцию
C
1
fgets(data, 48, file);
как ее зациклить, то есть передать что-то типа
C
1
fgets(data[i][j], 48, file);
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
31.08.2016, 17:49 6
Лучший ответ Сообщение было отмечено andreyka93 как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
31.08.2016, 17:52 7
первую строку я только не сохранил ибо не знаю куда,я так понял вы отдельно еще с ней работать будете. и цифры в строчках добавил в файле чтоб убедиться что разные строки считываю а не одну и ту же))
0
131 / 131 / 157
Регистрация: 11.04.2015
Сообщений: 343
01.09.2016, 14:38  [ТС] 8
вот какую ракету еще изобрел тут прямо с переводом в HEX
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#define TRUE    1
#define FALSE   0
 
 
int main()
{
    FILE *file = NULL;
    file = fopen("1.txt", "r");
    if (file == NULL) {
        puts("Error opening file!");
        exit(1);
    }
    int i = 0, j = 0;
    char *ptr;
    char line[128] = { '\0' };
    unsigned char final_array[48] = { '\0' };
    fgets(line, 127, file);
    puts(line);
    j = 0;
    while (fgets(line, 128, file)) {
        ptr = line;
        while (1) {
            if (*ptr == ';') break;
            sscanf(ptr, "%2X",&final_array[j++]);
            ptr = strchr(ptr, ' ');
            ptr += 1;
        }
    }
    for (j = 0; j<32; j++) {
        if (j == 16) printf("\n");
        printf("%02X ", final_array[j]);
    }
    printf("\n");
 
    fclose(file);
 
 
    system("pause");
    return 0;
}
0
01.09.2016, 14:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2016, 14:38
Помогаю со студенческими работами здесь

Ошибка с чтением файла
Добрый вечер, ниже реализована программа по обработке файла данных &quot; Репертуар кинотеатров&quot; в...

Чтением файла с сервера
Всем привет, столкнулся с ошибкой, но сам не знаю где... Суть программы такова: При запуске...

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

Проблема с чтением файла
При открытии файла функцией fopen и выводе на консоль отображается только первая строчка. Я так...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru