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

Считать определенные данные из файла txt в массив

12.10.2020, 15:39. Показов 1497. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня возникла проблема. Нужно считать из txt файла численные значения определенных параметров спутников. В файле содержится много данных, мне нужно найти определенные и вывести только их, без заголовков. В исполнении в MATLAB помогла функция sscanf, но как применить что-то подобное в C я не понимаю.

Во вложении пример файла. Отсюда нужно считать только номер ID для каждого спутника без самого слова ID и положить их всех в один массив.
Вложения
Тип файла: txt almanac.yuma.week0038.503808.txt (17.9 Кб, 6 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.10.2020, 15:39
Ответы с готовыми решениями:

Как из файла txt считать данные в массив?
Добрый день. С с++ у меня очень плохо, но срочно нужно сделать одну вещь. Есть файл file.txt, в...

Функция: считать данные из файла txt и передать в массив
Доброго времени знатаки, Как правильно написать функиця которая считывает данные из файла txt, и...

Считать из файла ini или txt определенные параметры
Здравствуйте, нашел много информации по считыванию файлов но вот к своему примеру незнаю как...

Считать данные из txt файла, записать их в массив и вычесть значения одного массива из другого
Срочно нужна помощь. Никак не могу разобраться был файл с данными в формате нескольких столбцов с...

1
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
12.10.2020, 23:30 2
Лучший ответ Сообщение было отмечено Seac как решение

Решение

Цитата Сообщение от Seac Посмотреть сообщение
помогла функция sscanf, но как применить что-то подобное в C я не понимаю.
Цитата Сообщение от Seac Посмотреть сообщение
нужно считать только номер ID для каждого спутника без самого слова ID
в целом парсинг на голом СИ не пишут, и используют внешние библиотеки, например - PCRE. Но конкретно в данном случае структура фаила очень простая, так что:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define MAX_STR_LEN 1000
int main()
{
    FILE* ifd = fopen("input.txt", "r");
    char strbuf[MAX_STR_LEN];
    while (!feof(ifd))
    {
        fgets(strbuf, sizeof(strbuf), ifd);
        int id = 0;
        if (sscanf(strbuf, "ID:%d", &id))
        {
            printf("id = %d\n", id);
        }
    }
    fclose(ifd);
 
}
Добавлено через 33 минуты
вроде самоочевидно, но на всякий случай.
Если количество id может быть очень большим, то нужно будет выделить память динамически. Для этого есть два решения: самопальный вектор или пройти по фаилу дважды (сначала посчитав id, потом считав их в дин.массив.
например

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
47
48
49
#define MAX_STR_LEN 1000
int main()
{
    FILE* ifd = fopen("input.txt", "r");
    char strbuf[MAX_STR_LEN];
 
    //считаем количество ID.
    int count_id = 0;
    while (!feof(ifd))
    {
        fgets(strbuf, sizeof(strbuf), ifd);
        int id = 0;
        if (sscanf(strbuf, "ID:%d", &id)) count_id++;
    }
 
    int* arr_id = (int*)malloc(count_id * sizeof(int));
 
    //передвигаем курсор в начало фаила.
    int position = fseek(ifd, 0L, SEEK_SET);
    if (position == -1)
    {
        perror("fseek to beginning failed");
        fclose(ifd);
        return -1;
    }
 
    //Считываем id в массив.
    int iter = 0;
    while (!feof(ifd))
    {
        fgets(strbuf, sizeof(strbuf), ifd);
        int id = 0;
        if (sscanf(strbuf, "ID:%d", &id))
        {
            arr_id[iter] = id;
            iter++;
        }
    }
 
    fclose(ifd);
 
    /* делаем что-то серьезное с id. Например выводим в терминал.*/
    for (int i = 0; i < count_id; i++)
        printf(" %d", arr_id[i]);
    printf("\n");
 
    //освобождаем память.
    free(arr_id);
}
1
12.10.2020, 23:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2020, 23:30
Помогаю со студенческими работами здесь

Как считать определенные данные с файла
Добрый день. Задали в универе курсовую &quot;игра Змейка&quot; (в Qt 5.4 C++). В ней уже реализовано, что...

Считать данные из .txt файла
Всем привет! Мне нужно считать данные из .txt файла и вывести их в RichEdit, но не удаётся создать...

Как Считать данные из txt файла с условием?
Добрый день! Помогите разобраться в каком направлении двигаться. Необходимо прочитать и вывести...

Рандомный выбор из файла: считать данные из txt
Есть такое задание: Задан файл в котором записаны Ф.И.О. Требуется рандомно выбрать из этого...

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

Как считать данные из txt файла, из определенной строки,столбца?
i=0 Do Until EOF(2) Line Input #2, mytext Dannie(i)=mytext i=i+1 loop Наверняка...


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

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