Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> STL: text file to vector<string>, read a text file into vector<string> 
:(
    Опции темы
John_Doe
Дата 16.7.2004, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Hi all,

Подскажите, плз, как считать текстовый файл в vector<string>, чтобы строки не разбивались по пробелам, а только по \n или \r?

Делаю так:

ifstream ifs("test.txt");
istream_iterator<string> ii(ifs);
istream_iterator<string> ieos;
vector<string> vs(ii, ieos);

засунуть куда-нибудь noskipws не получается... может не туда? ;)

Заранее признателен за вашу помощь!
PM MAIL   Вверх
Олег М
Дата 19.7.2004, 08:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



А так не получается?

Код
cin>>noskipws>>str;


PM MAIL ICQ   Вверх
Олег М
Дата 19.7.2004, 08:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



В смысле cin>>skipws>>str;
PM MAIL ICQ   Вверх
John_Doe
Дата 19.7.2004, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Олег,
спасибо, конечно, но, простите, где вы видите cin?
Если бы я хотел считывать из консоли, то конечно бы именно так и сделал (таких примеров в каждой книжке по С++ достаточно). Но мне нужно именно из файла и с наименьшими усилиями (можно было бы использовать getline() - но это не столь красиво и кратко).
PM MAIL   Вверх
Олег М
Дата 19.7.2004, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
спасибо, конечно, но, простите, где вы видите cin?

ifs>>skipws>>str; biggrin.gif
Читаешь в цикле по одной строке и запихиваешь в массив
PM MAIL ICQ   Вверх
John_Doe
Дата 19.7.2004, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Так я ж поэтому и упомянул, что решения "в лоб" мне не хочется. Хочется кратко и красиво, как в приведённом мной примере с инициализацией вектора через итераторы входного потока.
Поэтому и спросил здесь, надеясь на помощь гуру, а не потому, что просто решения в лоб через ifs.getline(str) - ну или с использованием ifs>>skipws>>str - и push_back(str) мне не известно...

Спасибо, Олег, за внимание, но, право слово, хочется красоты. rolleyes.gif
PM MAIL   Вверх
Олег М
Дата 19.7.2004, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
право слово, хочется красоты

Молодец!

Перепиши оператор >> для своего класса - будет красиво и круто

PM MAIL ICQ   Вверх
John_Doe
Дата 19.7.2004, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Типа, красиво никак? Будем искать...

Это сообщение отредактировал(а) John_Doe - 19.7.2004, 13:16
PM MAIL   Вверх
Олег М
Дата 19.7.2004, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 10.6.2004
Где: Москва

Репутация: 7
Всего: 7



Цитата
Типа, красиво никак

А что ты тогда понимаешь под красотой? Чтобы вручную вообще нифига не писать?
PM MAIL ICQ   Вверх
John_Doe
Дата 19.7.2004, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Под красотой я понимаю максимальное использование доступных средств при минимуме рутины.
Например, "красивее" использовать for_each вместо прохода с итератором.
А если "вообще нифига не писать", то и красоты не будет. smile.gif Из ничего ничего не родится. А ты как думал? ;)
Ещё раз повторю - решение в лоб меня не интересовало, тк. я его и сам знал. Хотелось узнать, можно ли сделать красивее с использованием итераторов потока ввода. Если ты уверен, что так сделать нельзя, то нужно было сразу это и сказать...
PM MAIL   Вверх
Morel
Дата 20.7.2004, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 14.10.2003

Репутация: 1
Всего: 1



Код

vector<string> ProgramText1;
ifstream in;
in.open(FileName);

copy(istream_iterator<string,vector<string>::difference_type>(in),
     istream_iterator<string,vector<string>::difference_type>(),
     inserter(ProgramText1,ProgramText1.begin()));
in.close();


Правда конец строки любой разделитель, но можешь что нибудь дальше сам придумать.


PM MAIL   Вверх
John_Doe
Дата 21.7.2004, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 16.7.2004

Репутация: нет
Всего: нет



Спасибо, Morel. Но скажи, пожалуйста, чем твой вариант отличается от приведённого мной?
Для простоты восприятия, можно слегка модифицировать мой пример (поближе к твоему):
Код

ifstream ifs("test.txt");
istream_iterator<string, vector<string>::difference_type> ii(ifs);
istream_iterator<string, vector<string>::difference_type> ieos;
vector<string> vs(ii, ieos);


Мой вариант делает ровно тоже самое, только короче и понятнее = красивее. Беда только в том, что конец строки не тот, что нужно.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.