Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116

Чтение текстового файла и его данных в разные переменные

04.09.2014, 08:59. Показов 2930. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
не работал еще с файлами в плюсах, только в чистом си... никак не соображу как считать данные из файла, вот например такой файл

Кликните здесь для просмотра всего текста
town=Москва
population=11500000
latitude=55,45,07
longitude=37,36,56
transport=метро,автобусы,трамваи

town=Санкт-Петербург
population=4880000
latitude=59,53,39
longitude=30,15,51
transport=метро,трамваи,тролейбусы

town=Пенза
population=517311
latitude=53,11,39
longitude=45,00,00
transport=автобусы,тролейбусы

соответственно надо считывать только параметры и те что через запятую в разные переменные

ну вот как бы начало, а что дальше хз...
C++
1
2
3
4
5
bool Input()
{
    ifstream stream(filename);
    if (stream.bad()) return false;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2014, 08:59
Ответы с готовыми решениями:

Чтение текстового файла. Парсинг его данных. Создание исключений для данных. Запись свойств объектов в файл
Проблема такая. Есть файл data.txt. В нем например какие-то данные. Landon Donovan, 150, A Hulk Hogan , 100, M Duke Nukem, 50,...

Чтение текста из файла и запись его частей в переменные
Здравствуйте, задача такая - у меня есть текстовой документ, в который записаны фраза и ответ на эту фразу через разделитель - | ...

Чтение текста из файла и запись его частей в переменные
Всем привет. Столкнулся с проблемой переноса ключей расшифровки. Одна программа генерирует ключи, записывает их в таком виде: 3|2|3 (могу...

35
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.09.2014, 11:10
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GetHelp Посмотреть сообщение
нет у меня никакого UB тут
Имеется в виду, что функция
C++
1
2
3
4
5
bool Input()
{
    ifstream stream(filename);
    if (stream.bad()) return false;
}
должна, просто обязана вернуть значение. И это значение должно быть или true, или false. Если выполнится условие if (stream.bad()), то функция вернет false. А если не выполнится? Функция вернет что? Функция вернет UB. И UB это будет убивать людей, если эта функция попадет в соответствующий код. Начнутся войны, голод и второй приход христа. А вы говорите "ой, да нет тут никакого UB".

Цитата Сообщение от GetHelp Посмотреть сообщение
подскажите как мне этот чертов файл считать
К примеру вот так:
Считывание из файла строк с getline()

Как считать файл до конца вместе '\n' ?
Как считать файл и обработать содержимое
Как считать файл с табличкой?

Не по теме:

P.S. Как вы пришли именно к этому прилагательному?

1
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
04.09.2014, 11:14  [ТС]
0x10, спасибо, это то что нужно, осталось придумать для остальных случаев считывание и проверку если строка пустая (это как разделитель у меня просто)

Добавлено через 1 минуту
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Имеется в виду, что функция
Код C++
C++
1
2
3
4
5
bool Input()
{
     ifstream stream(filename);
     if (stream.bad()) return false;
}
должна, просто обязана вернуть значение. И это значение должно быть или true, или false. Если выполнится условие if (stream.bad()), то функция вернет false. А если не выполнится? Функция вернет что? Функция вернет UB. И UB это будет убивать людей, если эта функция попадет в соответствующий код. Начнутся войны, голод и второй приход христа. А вы говорите "ой, да нет тут никакого UB".
да я просто еще не дописал функцию, че вы гоните, я бы в конце дописал return true и все...
0
654 / 575 / 164
Регистрация: 13.12.2012
Сообщений: 2,124
04.09.2014, 11:17
DrOffset, из моего опыта при указании что ф-ция что то возвращает, и не сделать return падало 100%(gcc)
0
Почетный модератор
Эксперт С++
 Аватар для SatanaXIII
5851 / 2862 / 392
Регистрация: 01.11.2011
Сообщений: 6,906
04.09.2014, 11:17
Цитата Сообщение от GetHelp Посмотреть сообщение
я бы в конце дописал return true и все
"А ты налей и отойди."
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.09.2014, 11:20
Сорри, что-то я туплю:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstring>
 
int main() {
    // Допустим, строку уже получили
    const char* population = "population=11500000";
    
    int value = 0;
    sscanf(population, "population=%d", &value);
    std::cout << value << std::endl;
}
Но все равно надо сначала найти разделитель (=), затем по левой части определить какой формат значения в правой части.
0
63 / 64 / 11
Регистрация: 27.02.2013
Сообщений: 1,116
04.09.2014, 11:27  [ТС]
так возник еще организационный вопрос... для тех кто не в теме я писал класс тема тут, по совету стал писать загрузку из файла, тут возникли вот эти собственно трудности, так вот вопрос в том, что по идее метод Input должен был только заполнять один экземпляр класса из потока, а если я буду читать таким образом из файла, то это будет несколько скажем так вариантов данных... т.е. как тут быть то? если только делать несколько файлов, в каждом данные только по одному городу...
0
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
04.09.2014, 11:33
Цитата Сообщение от GetHelp Посмотреть сообщение
т.е. как тут быть то?
Как быть с чем? Если нужно заплонять несколько объект, хранишь их в контйнере - заполняешь. Можешь из одного файла, можешь из нескольких. Вопрос-то в чем?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.09.2014, 11:34
GetHelp, именно поэтому я говорил, что плохая идея - писать один мега-класс, который умеет все на свете. Т.е. если хочется в одном файле хранить несколько проектов, то нужен отдельный класс - парсер, который будет обрабатывать входной поток и понимать, сколько и каких объектов класса нужно создать.
Тут я бы предложил забить и считать, что в одном файле может быть только один регион. В качестве входных данных может быть директория с кучей таких файлов. И в любом случае будет функция вне класса, которая обходит этот каталог и на каждый файл создает объект региона.
1
04.09.2014, 12:41

Не по теме:

Цитата Сообщение от aLarman Посмотреть сообщение
DrOffset, из моего опыта при указании что ф-ция что то возвращает, и не сделать return падало 100%(gcc)
Зависит от того, что возвращаем. Если объект, то да, может упасть. А если целое число, то он просто возьмет из eax какой-то мусор и все будет "нормально".

0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.09.2014, 14:04
Вот тут я пытался решить похожую задачу. Вам ещё наверняка пригодятся методы из заголовочного файла <cctype>, чтобы выполнять проверки символов в файле.

Добавлено через 2 минуты
В Вашем варианте задачи я бы сделал что-нибудь навроде
C++
1
2
3
4
5
6
7
8
9
10
struct City
{
    std::string town;
    int population;
    std::vector <int> latitude;
    std::vector <int> longitude;
    std::vector <std::string> transport;
};
 
std::vector <City> cities();  // создаём массив cities структур типа City
Добавлено через 7 минут
И потом уже читал бы из файла символ за символом, проверяя каждый, до тех пор, пока не достигнуто соответствующее условие (ch == ',' или ch == '\n', или ch == '='). Ну а дальше, когда условие достигнуто, пихал бы всё по соответствующим полям структуры (ну, или класса, если надумаете в виде класса оформить).
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.09.2014, 14:32
Цитата Сообщение от gru74ik Посмотреть сообщение
std::vector <City> cities(); *// создаём массив cities структур типа City
А может объявляем функцию, которая не принимает аргументов и возвращает вектор городов?
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.09.2014, 14:36
Цитата Сообщение от 0x10 Посмотреть сообщение
А может объявляем функцию, которая не принимает аргументов и возвращает вектор городов?
А зачем? В смысле, я так подозреваю, что это наверное действительно лучше (Вы плохое предлагать скорее всего не станете), но почему Ваш вариант лучше?
P.S. Посидел, подумал. Наверное Вы хотите заполнение полей структуры в эту функцию вынести?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
04.09.2014, 14:40
Цитата Сообщение от gru74ik Посмотреть сообщение
А зачем?
Я о том, что синтаксически эта запись - не определение объекта, а то, что я написал выше. Нужно убрать круглые скобки.
0
Модератор
Эксперт CЭксперт С++
 Аватар для sourcerer
5288 / 2376 / 342
Регистрация: 20.02.2013
Сообщений: 5,773
Записей в блоге: 20
04.09.2014, 14:45
Цитата Сообщение от 0x10 Посмотреть сообщение
Нужно убрать круглые скобки.
Ааа, понял. Да, точно:
C++
1
std::vector <City> cities;  // создаём массив cities структур типа City
0
04.09.2014, 15:02

Не по теме:

Цитата Сообщение от DrOffset Посмотреть сообщение
и все будет "нормально"
разделено на ноль.

0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
05.09.2014, 11:55
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/////////////////////////////////////////////////////////////////////////////////////////
//считать данные из файла, вот например такой файл
//
//town=Москва
//population=11500000
//latitude=55,45,07
//longitude=37,36,56
//transport=метро,автобусы,трамваи
//
//town=Санкт-Петербург
//population=4880000
//latitude=59,53,39
//longitude=30,15,51
//transport=метро,трамваи,троллейбусы
//
//town=Пенза
//population=517311
//latitude=53,11,39
//longitude=45,00,00
//transport=автобусы,троллейбусы
//
//соответственно надо считывать только параметры и те что через запятую в разные переменные
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string             T_str;
typedef std::vector < T_str >   T_strings;
typedef std::vector < int   >   T_geo_coord;
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_city
{
    //-----------------------------------------------------------------------------------
    static  const   char    SPACE_SYMB  =   ' ';
    static  const   char    EQ_SYMB     =   '=';
 
    T_str                   name_;
    int                     population_;
    T_geo_coord             latitude_;
    T_geo_coord             longitude_;
    T_strings               transport_modes_;
    //-----------------------------------------------------------------------------------
    friend  std::istream    &   operator>>
        (
            std::istream    &   istr,
            T_city          &   city
        )
    {
        read_official_word_and_eq_symb_from_stream                  ( istr );
        read_line_of_stream_in_val                                  ( istr,     city.name_              );
 
        read_official_word_and_eq_symb_from_stream                  ( istr );
        read_line_of_stream_in_val                                  ( istr,     city.population_        );
 
        read_official_word_and_eq_symb_from_stream                  ( istr );
        read_line_of_stream_with_punctuation_delimiters_in_vector   ( istr,     city.latitude_          );
 
        read_official_word_and_eq_symb_from_stream                  ( istr );
        read_line_of_stream_with_punctuation_delimiters_in_vector   ( istr,     city.longitude_         );
 
        read_official_word_and_eq_symb_from_stream                  ( istr );
        read_line_of_stream_with_punctuation_delimiters_in_vector   ( istr,     city.transport_modes_   );
 
        return  istr;
    }
    //-----------------------------------------------------------------------------------
    static  void    read_official_word_and_eq_symb_from_stream( std::istream    &   istr )
    {
        getline
            (
                istr,
                T_str(),
                EQ_SYMB
            );
    }
    //-----------------------------------------------------------------------------------
    template< typename  T >
    static  void    read_line_of_stream_in_val
        (
            std::istream    &   istr,
            T               &   val
        )
    {
        T_str               s;
        getline                     ( istr, s );
        std::istringstream  ssin    (s);
        ssin    >>  val;
    }
    //-----------------------------------------------------------------------------------
    template< typename  TT_vector >
    static  void    read_line_of_stream_with_punctuation_delimiters_in_vector
        (
            std::istream    &   istr,
            TT_vector       &   vector
        )
    {
        vector.clear();
        T_str   s;
        getline                             ( istr, s );
        replace_punctuation_with_spaces     (s);
        std::istringstream  ssin            (s);
 
        std::copy
            (
                std::istream_iterator< TT_vector::value_type >  ( ssin      ),
                std::istream_iterator< TT_vector::value_type >  (),
                std::back_inserter                              ( vector    )
            );
    }
    //-----------------------------------------------------------------------------------
    static  void    replace_punctuation_with_spaces( T_str  &   s )
    {
        std::replace_if
            (
                s.begin     (),
                s.end       (),
 
                []  ( char  c )
                {
                    return  std::ispunct
                                (
                                    c,
                                    std::locale("")
                                );
                },
                SPACE_SYMB
            );
    }
    //-----------------------------------------------------------------------------------
    friend  std::ostream    &   operator<<
        (
            std::ostream            &   ostr,
            T_city          const   &   city
        )
    {
        ostr    <<  city.name_          <<  std::endl
                <<  city.population_    <<  std::endl;
 
        write_in_ostream_vector( ostr,  city.latitude_          );
        write_in_ostream_vector( ostr,  city.longitude_         );
        write_in_ostream_vector( ostr,  city.transport_modes_   );
        ostr    <<  std::endl;
        return  ostr;
    }
    //-----------------------------------------------------------------------------------
    template< typename  TT_vector >
    static  void    write_in_ostream_vector
        (
            std::ostream            &   ostr,
            TT_vector       const   &   vector
        )
    {
        std::copy
            (
                vector.begin                                    (),
                vector.end                                      (),
                std::ostream_iterator< TT_vector::value_type >  ( ostr, " " )
            );
 
        ostr    <<  std::endl;
    }
    //-----------------------------------------------------------------------------------
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector < T_city    >   T_cities;
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    const   T_str   TOWNS_FILE_NAME   =   "cities.txt";
    std::ifstream   ifile( TOWNS_FILE_NAME );
 
    if( !ifile )
    {
        std::cout   <<  "Файл \""
                    <<  TOWNS_FILE_NAME
                    <<  "\" не найден."
                    <<  std::endl;
    }//if
 
    T_cities    cities;
 
    std::copy
        (
            std::istream_iterator< T_city >     ( ifile     ),
            std::istream_iterator< T_city >     (),
            std::back_inserter                  ( cities    )
        );
 
    std::cout   <<  "Из файла \""
                    <<  TOWNS_FILE_NAME
                    <<  "\" считана информация о "
                    <<  cities.size()
                    <<  " городах:"
                    <<  std::endl
                    <<  std::endl;
 
    std::copy
        (
            cities.begin                        (),
            cities.end                          (),
            std::ostream_iterator< T_city >     ( std::cout )
        );
 
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2014, 11:55
Помогаю со студенческими работами здесь

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

Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла.
#include&lt;iostream&gt; #include&lt;fstream&gt; #include&lt;locale.h&gt; #include&lt;iomanip&gt; #include &lt;cstdlib&gt; using namespace std; struct...

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

Чтение данных с текстового файла
Всем привет. Простите, если спрашиваю очевидное, но я не могу понять, как мне считать переменную с N-ой строки в паскале, например со...

Чтение данных из текстового файла
Всем большой привет! Люди помогите с таким вопросом! У меня есть текстовый файл, Мне нужно что бы с файла каждое определеной слово...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через 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-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru