Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
usovand
0 / 0 / 0
Регистрация: 22.08.2013
Сообщений: 4
#1

Считывание текста из файла - C++

22.08.2013, 14:50. Просмотров 1648. Ответов 7
Метки нет (Все метки)

Собственно, задача такая:
есть файл info.txt
в ней строки такого формата
$параметр_1$параметр_2$параметр_3$...$параметр_n

есть объект класса, который имеет эти свойства.
Необходимо считывая строки, создавать объекты и присваивать свойствам объекта вот эти параметры.

$ - сам придумал для разделения, может не очень хорошо.

Где можно об этом что-то узнать? Ну или примеры может у кого есть
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2013, 15:24     Считывание текста из файла #2
Можно как-то так сделать (как направление, без деталей):
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
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
 
    using namespace std;
...
 
    ifstream fin("info.txt"); // поток для чтения
    string str;     // для строки
    string word;    // для слов
    stringstream s; // поток для строк
   
    fin.get(); // извлечение первого '$' в строке (кстати, без него никак? Может лучше так записать строку: параметр_1$параметр_2$параметр_3$...параметр_n$)
    while (getline(fin, str)) // чтение строк до конца файла
    {
        
        s << str; // считанную строку помещаем в строковый поток, чтобы потом извлекать слова
        
        // здесь создание объекта
        
        while (getline(s, word, '$')) // извлекаем слова
        {
            // здесь инициализация полей объекта словами из строки
        }
        
        // здесь сохранение объекта
        
        s.clear(); // сброс флагов строкового потока
        s.str(""); // очистка строкового потока
 
        fin.get(); // извлечение первого '$' в строке
     }
     fin.close();
usovand
0 / 0 / 0
Регистрация: 22.08.2013
Сообщений: 4
22.08.2013, 16:25  [ТС]     Считывание текста из файла #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Можно как-то так сделать (как направление, без деталей):
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
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
 
    using namespace std;
...
 
    ifstream fin("info.txt"); // поток для чтения
    string str;     // для строки
    string word;    // для слов
    stringstream s; // поток для строк
   
    fin.get(); // извлечение первого '$' в строке (кстати, без него никак? Может лучше так записать строку: параметр_1$параметр_2$параметр_3$...параметр_n$)
    while (getline(fin, str)) // чтение строк до конца файла
    {
        
        s << str; // считанную строку помещаем в строковый поток, чтобы потом извлекать слова
        
        // здесь создание объекта
        
        while (getline(s, word, '$')) // извлекаем слова
        {
            // здесь инициализация полей объекта словами из строки
        }
        
        // здесь сохранение объекта
        
        s.clear(); // сброс флагов строкового потока
        s.str(""); // очистка строкового потока
 
        fin.get(); // извлечение первого '$' в строке
     }
     fin.close();
Спасибо за ответ. Буду реализовывать.

Добавлено через 12 минут
Символ $ убрал в самом начале. Не совсем понятно как провести инициализацию.

Например:
C++
1
2
3
4
5
6
7
8
9
class example
{
 public:
 char param1[100];
 char param2[100];
...
 char param3[100];
 
};
одна строка файла - описание одного объекта.

Добавлено через 12 минут
Хотя нет, понял
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2013, 16:28     Считывание текста из файла #4
Массивы char обязательно? Может лучше string использовать?
usovand
0 / 0 / 0
Регистрация: 22.08.2013
Сообщений: 4
22.08.2013, 16:29  [ТС]     Считывание текста из файла #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Массивы char обязательно? Может лучше string использовать?
Да, можно и string

Тогда как быть?
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2013, 16:31     Считывание текста из файла #6
Цитата Сообщение от usovand Посмотреть сообщение
Символ $ убрал в самом начале
Тогда это незабудьте из кода убрать (в двух местах):
C++
1
fin.get();
Добавлено через 46 секунд
Цитата Сообщение от usovand Посмотреть сообщение
Да, можно и string
Тогда как быть?
Когда? При инициализации? Просто присвоение.
usovand
0 / 0 / 0
Регистрация: 22.08.2013
Сообщений: 4
22.08.2013, 16:38  [ТС]     Считывание текста из файла #7
Цитата Сообщение от alsav22 Посмотреть сообщение
Тогда это незабудьте из кода убрать (в двух местах):
C++
1
fin.get();


Когда? При инициализации? Просто присвоение.
Убрал

exapmle.param1 = word; ???
example.param2 = тут уже не ясно...

как тогда он поймет что нужно создавать новый объект?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.08.2013, 19:37     Считывание текста из файла
Еще ссылки по теме:

Считывание текста из файла С++, подскажите C++
C++ Считывание текста из файла
Считывание определенного текста из файла C++
Считывание текста с файла методом getchar C++
C++ Считывание текста из файла

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

Или воспользуйтесь поиском по форуму:
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.08.2013, 19:37     Считывание текста из файла #8
Цитата Сообщение от usovand Посмотреть сообщение
как тогда он поймет что нужно создавать новый объект?
Он - это программист?

Добавлено через 6 минут
Сколько полей в классе?

Кликните здесь для просмотра всего текста
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
    #include <vector>
...
 
    ifstream fin("info.txt"); // поток для чтения
    string str;     // для строки
    string word;    // для слов
    stringstream s; // поток для строк
    vector <string> v; // вектор для слов
   
    while (getline(fin, str)) // чтение строк до конца файла
    {
        
        s << str; // считанную строку помещаем в строковый поток, чтобы потом извлекать слова
        
        // здесь создание объекта
        example obj; // в классе три поля string
        
        while (getline(s, word, '$')) // извлекаем слова в вектор
        {
            v.push_back(word);
 
        }
        
            // инициализация полей объекта словами из строки
            obj.param1 = v[0];
            obj.param2 = v[1];
            obj.param3 = v[2];
 
        // здесь сохранение объекта
        
        v.clear(); // очищаем вектор
        s.clear(); // сброс флагов строкового потока
        s.str(""); // очистка строкового потока
     }
     fin.close();


Добавлено через 22 минуты
Если строки в файле такие:

// параметр_1$параметр_2$параметр_3$
// параметр_1$параметр_2$параметр_3$
//............................

то можно проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    ifstream fin("info.txt"); // поток для чтения
    string word;    // для слов
    
    while (true) // чтение слов до конца файла
    {
        // создание объекта (в классе три поля string)
        example obj; 
 
        getline(fin, obj.param1, '$');
        if (!fin) break;
        getline(fin, obj.param2, '$');
        getline(fin, obj.param3, '$');
        fin.get();
        // здесь сохранение объекта
     }
     fin.close();
Yandex
Объявления
22.08.2013, 19:37     Считывание текста из файла
Ответ Создать тему
Опции темы

Текущее время: 03:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru