Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
AlexsSStep
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 6
1

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

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

Помогите пожалуйста как правильно написать код.
Есть некий текстовый файл на самом деле это Ексел таблица которая сохранена как csv (разделители запятые).Вот так выглядит одна строка в данном файле.
Код
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 это данные до первого разделителя то есть
Код
;
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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.04.2018, 10:12
Ответы с готовыми решениями:

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

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

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

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

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

4
ПерС
435 / 362 / 324
Регистрация: 05.11.2013
Сообщений: 1,023
Записей в блоге: 6
Завершенные тесты: 1
26.04.2018, 11:15 2
Файл - текстовый, там строки будут разной длины и у тебя структура начинается с
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
3102 / 2596 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
26.04.2018, 11:22 3
Цитата Сообщение от ПерС Посмотреть сообщение
Я бы читал в string и потом разбивал на части по разделителю ";"
Или сразу читать, с помощью getline(), до разделителя.
0
AlexsSStep
0 / 0 / 0
Регистрация: 13.09.2015
Сообщений: 6
26.04.2018, 16:02  [ТС] 4
это конечно хорошо но как до символа дойти ";" в строке. И самое главное как потом из строки сконвертировать в int и float или double.
0
nd2
3102 / 2596 / 1134
Регистрация: 29.01.2016
Сообщений: 8,690
26.04.2018, 17:56 5
Цитата Сообщение от AlexsSStep Посмотреть сообщение
но как до символа дойти ";" в строке.
В getline() выставляешь.
Цитата Сообщение от AlexsSStep Посмотреть сообщение
как потом из строки сконвертировать в int и float или double.
atof(), atoi().

Добавлено через 8 минут
Только локаль русскую установи, чтобы запятые, в десятичных числах, нормально обрабатывались.
0
26.04.2018, 17:56
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2018, 17:56

Чтение нескольких структур и одной переменной из бинарного файла. Формат файла имеется
Формат файла состоит из 3 структур и одной переменной. Подробное описание формата во вложении,...

Чтение структур из файла
Добрый день. Такой вопрос: есть структура, эту структуру заполнили с клавиатуры и записали в файл....

Чтение структур с файла
Я записал структуру в файл! В файле лежит структура троих студентов. Как мне вывести из файла...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.