Отобрать данные из текстового файла - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Есть задача, решение которой я хочу написать на С, но данные к условию (для удобства) хочу взять из текстового файла, где, кроме того, собираюсь комментировать эти данные. То есть из самого файла мне нужно выбрать нужную строку и взять из нее только числовое значение, которое начинается после определенного символа или номера символа, все остальное, после пробела, мусор.
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. main()
  4. {
  5. char datas[200];
  6. float P0, P1, V, R, T1, mu;
  7. FILE *data;
  8. data=fopenC:\\Users\\Vlad\\Desktop\\nozzle\\data.txt», «r»);
  9. if ( data == NULL ) {
  10. printfno data»);
  11. return 1;
  12. }
  13. char p0[]=»P0″, p1[]=»P1″, v[]=»V», r[]=»R», t1[]=»T1″, MU[]=»mu»;
  14. while (fgets(datas, 200, data))
  15. {
  16. if (0==strncmp (datas, p0, strlen(p0))) {
  17. sscanf (datas+strlen(p0)+1, «%f», &P0);
  18. }
  19. if (0==strncmp (datas, p1, strlen(p1))) {
  20. sscanf (datas+strlen(p1)+1, «%f», &P1);
  21. }
  22. if (0==strncmp (datas, v, strlen(v))) {
  23. sscanf (datas+strlen(v)+1, «%f», &V);
  24. }
  25. if (0==strncmp (datas, r, strlen(r))) {
  26. sscanf (datas+strlen(r)+1, «%f», &R);
  27. }
  28. if (0==strncmp (datas, t1, strlen(t1))) {
  29. sscanf (datas+strlen(t1)+1, «%f», &T1);
  30. }
  31. if (0==strncmp (datas, MU, strlen(MU))) {
  32. sscanf (datas+strlen(MU)+1, «%f», &mu);
  33. }
  34. break;
  35. }
  36. printf P0=%f, P1=%f, V=%f, R=%f, T1=%f, mu=%f», P0, P1, V, R, T1, mu);
  37. }
Программу закончил тем, что решил проверить, что оно мне взяло из файла. Правильно введено только первое значение Р0. Это связано с используемой мною функцией fgets, т.к. она останавливается после прочтения первой строки. Какую функцию использовать, чтобы искать по всему файлу, а не только по первой строке? Или как для этого исправить fgets? Она просто удобна тем, что останавливает чтение после пробела и после него можна комментировать данные. Я еще очень зеленый новичок в Си, поэтому если нужны обьяснения, комментарии по моему способу написания программы или если еще что-то не понятно — спрашивайте.
Попробовал вместо строчки
Листинг программы
  1. while (fgets(datas, 200, data))
использовать
Листинг программы
  1. while (fscanf (data, «%s», datas))
результат тот же, но искать должно же по всему файлу теперь. Что не так? Может с if намудрил дальше?

Решение задачи: «Отобрать данные из текстового файла»

textual
Листинг программы
  1. #include "stdafx.h"
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <errno.h>
  5. #include <locale.h>
  6. int main()
  7. {
  8.     FILE *f;
  9.     char s[255] = { 0 };
  10.     int i=0;
  11.     setlocale(LC_ALL, "Rus");
  12.     if (fopen_s(&f, "d:\\1\\data.txt", "r")) {
  13.        
  14.         strerror_s(s,255, *_errno());
  15.         printf("Ой что-то мне нехорошо (%d), %s...",*_errno(),s);
  16.         getchar(); return 1;
  17.     };
  18.     while (!feof(f)) {
  19.         if (fscanf_s(f, "%[^=]=%d", s, 255, &i, sizeof(i)) == 2) {
  20.             printf("%20s = %10d\n", s, i);
  21.             fscanf_s(f, "%[^\n]s", s, 255);
  22.         }
  23.        
  24.     }
  25.     fclose(f);
  26.     getchar();
  27.     return 0;
  28. }

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

  1. Включаем необходимые заголовочные файлы:
    • stdafx.h может использоваться для обеспечения совместимости между различными компиляторами или платформами.
    • stdio.h содержит функции для ввода и вывода данных.
    • string.h содержит функции для работы со строками.
    • errno.h содержит описания ошибок для функций ввода-вывода.
    • locale.h содержит функции для работы с локалью.
  2. Функция main() является точкой входа в программу.
  3. Открываем файл для чтения с помощью функции fopen_s().
    • Если файл не может быть открыт, то выводится сообщение об ошибке с помощью функции strerror_s().
    • Сохраняем адрес ошибки в переменной _errno() для последующего использования.
  4. Проверяем успешность открытия файла с помощью функции feof().
  5. Читаем данные из файла с помощью функции fscanf_s().
    • Формат чтения: %[^=]=%d означает, что мы читаем строку до знака равенства и конвертируем следующую строку в целое число.
    • При успешном чтении данных выводим их на экран с помощью функции printf().
    • С помощью функции fscanf_s() также считываем новую строку.
  6. Закрываем файл после чтения с помощью функции fclose().
  7. Возвращаем 0, чтобы указать, что программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

15   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы