Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 42

Чтение из файла в массив структур

26.04.2018, 10:12. Показов 3051. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста как правильно написать код.
Есть некий текстовый файл на самом деле это Ексел таблица которая сохранена как csv (разделители запятые).Вот так выглядит одна строка в данном файле.
Code
1
09.04.2018 18:00;9,5;754,4;754,9;-0,6;70;Ветер, дующий с юго-юго-запада;2;;;60%.; ;;;;;Слоисто-кучевых, слоистых, кучевых или кучево-дождевых облаков нет.;60%.;2500 или более, или облаков нет.;Высококучевые просвечивающие, расположенные на одном уровне.;Перистых, перисто-кучевых или перисто-слоистых нет.;10,0;4,3;Осадков нет;12;;;;
И таких строк в файле очень много. Нужно из такого файла вытащить данные в массив структуру вот такого типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct Weather      //Создаем структуру!
{
    Period *period;       // Период
    double t;              // градусы Цельсия
    double p0;             // миллиметры ртутного столба
    double p;              // миллиметры ртутного столба
    int u;                // относительная влажность (%) на высоте 2 метра над по-верхностью земли
    int ff;               //cкорость ветра на высоте 10-12 метров
    double tn;            // минимальная температура воздуха (градусы Цельсия)
    double tx;            //максимальная температура воздуха (градусы Цельсия) за прошедший период (не более 12 часов) (отображать следующие данные в виде таблицы)
    char rrr;             //количество выпавших осадков (миллиметры) (отоб-ражать следующие данные в виде таблицы)
    char sss;             // высота снежного покрова (см) (отображать следующие данные в виде таблицы)
    double *srznach;   //Среднее значение
    double min;        //Минимальное значение(дата)
    double max;        //Максимальное значение(дата)
    int kolvo;         //Количество наблюдений
}
где period это данные до первого разделителя то есть
Code
1
;
t это градусы то есть данные до второго разделителя и так далее..
Хочу вытащить все данные которые мне нужны из файла в массив структур и производить вычисления с ними как с массивом то есть вычислить среднее значение температуры и вывести пользователю на экран или так же сохранить в файл.
Делал так
C++
1
2
3
4
5
6
7
8
9
10
void getInfo(Weather& weather)
    {
        ifstream fil("\\1.csv", ios::in);
        while (!fil.eof())
        {
            //fil.getline(System::Convert::ToDouble(weather.t), 4, ';');
            fin.read((char*)&weather, sizeof(Weather));
        }
        fin.close();
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.04.2018, 10:12
Ответы с готовыми решениями:

Форматированное чтение из файла в массив структур
Здравствуйте, посоветуйте как лучше сделать чтение из файла в массив структур с разными типами данных. Входной файл (все денные введены...

Чтение из текстового файла массив структур
Доброго времени суток. Нужно из текстового файла заполненного по типу ( Фио Диагноз числопоступления пол ) занести информацию в бинарный...

Чтение из файла в массив структур (ошибка со string)
Есть задача: считать из файла информацию в массив структур. Файл: Иван Иванов Иванович 18 1 2 8.6 Петр Петров Петрович 17 1 3...

4
 Аватар для ПерС
587 / 490 / 371
Регистрация: 05.11.2013
Сообщений: 1,271
Записей в блоге: 6
26.04.2018, 11:15
Лучший ответ Сообщение было отмечено AlexsSStep как решение

Решение

Файл - текстовый, там строки будут разной длины и у тебя структура начинается с
Period *period;
а строка файла - с даты.
Я бы читал в string и потом разбивал на части по разделителю ";"
C++
1
2
3
4
5
6
7
8
9
10
 ifstream f("data.txt");
 if (!f) {
  cout << "Can't open data.txt";
  cin.get(); return 1;
 }
 string line;
 while (getline(f, line)) {
  //здесь работаем с очередной строкой line
 }
 f.close();
А уж с этими частями делай, что тебе нужно - пиши их в поля структуры и т.п.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
26.04.2018, 11:22
Цитата Сообщение от ПерС Посмотреть сообщение
Я бы читал в string и потом разбивал на части по разделителю ";"
Или сразу читать, с помощью getline(), до разделителя.
0
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 42
26.04.2018, 16:02  [ТС]
это конечно хорошо но как до символа дойти ";" в строке. И самое главное как потом из строки сконвертировать в int и float или double.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
26.04.2018, 17:56
Цитата Сообщение от AlexsSStep Посмотреть сообщение
но как до символа дойти ";" в строке.
В getline() выставляешь.
Цитата Сообщение от AlexsSStep Посмотреть сообщение
как потом из строки сконвертировать в int и float или double.
atof(), atoi().

Добавлено через 8 минут
Только локаль русскую установи, чтобы запятые, в десятичных числах, нормально обрабатывались.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.04.2018, 17:56
Помогаю со студенческими работами здесь

Чтение txt файла, содержащего массив структур
Добрый вечер! Прошу помощи у опытных людей. При решении задачи столкнулся с проблемой чтения массива структур из файла. Не могу...

Чтение данных из файла в динамический массив структур
Здравствуйте, подскажите пожалуйста, как можно осуществить чтение данных из файла в динамический массив структур? Или может можно как то...

Чтение двоичного файла и занесение данных в массив структур
/*чтение двоичного файла и занесение данных в массив S (кото- рый объявлен как указатель на тип Stud)*/ bool read_file(FILE * f,...

Форматированное чтение файла в массив структур
Часто нужно чтение из форматированного текстового файла в некий массив структур. Пусть например дан файл dan.txt 1 “Иванов” 3...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru