![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
С помощью fstream очень удобно считывать слова разделенные пробелами в строке: file >> var1 >> var2 >> var3;
А что делать, если у меня в текстовом файле "слова" разделены другими знаками? ";" допустим. Разве нельзя поменять какой-то флаг, чтобы fstream кушал нормально и не надо было считывать посимвольно до того, как встречу ";"? |
|||
|
||||
zabivator |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 171 Регистрация: 7.6.2006 Где: нск Репутация: 1 Всего: 2 |
Xenon, присоединяюсь к вопросу. Так и не нашел
![]() --------------------
#include <zabivator>int main( int, char * [] ){ while( Zabivator::жив() ) Zabivator::моск()++; return 0;} |
|||
|
||||
GIK |
|
|||
![]() Добрый человек ![]() ![]() Профиль Группа: Участник Сообщений: 985 Регистрация: 3.6.2005 Где: я только не небыв ал Репутация: 1 Всего: 14 |
Что то, непонятно как то???
Что мешает проверять символы? Напишы олгоритм который пропускает соответствующий знак? Есть еще функция char fill(char ch) которая меняет символ заполнитель в стандартных потоках cin, cout, но она тебе наверно не подойдет. -------------------- Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!! Программирование - это не деятельнось! Программирование - это состояние души! Бог - самый крутой программист. |
|||
|
||||
Daevaorn |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
нельзя. числа ещё можно так читать, а вот строки нет.
читать построчно, а потом парсить на наличие нужного разделителя. |
||||
|
|||||
oper54 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 217 Регистрация: 13.5.2005 Репутация: 1 Всего: 1 |
считай весь файл в массив и там уже разбирай...
|
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Считать весь массив дурак не сможет и посимвольно тоже, но так удобно использовать конструкции file >> bla >> bla1 ... А тут придется парсить и т.д. и т.п. Ну гораздо более громоздкий листинг. Где-то же хранится а fstream этот разделитель " ", значит как-то можно его заменить?
|
|||
|
||||
Romikgy |
|
|||
![]() Любитель-программер ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7326 Регистрация: 11.5.2005 Где: Porto Franco Odes sa Репутация: 8 Всего: 146 |
Xenon, а среда разработки какая?
Ps имхо можно создать класс который будет этим заниматся -------------------- Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. ![]() |
|||
|
||||
W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 20 Всего: 121 |
Xenon, дай пример того как ты парсиш файл, где разделителем является пробел, заносишь значения в переменные и выводишь на экран это дело. Есть идеи, надо проверить
![]() -------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
Xenon |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Да создать можно все
![]() У меня 5 переменных и файл, в котором 5 колонок. Так как в словах могут быть пробелы, столбцы разделены знаками ";" (так при экспорте эксель сделал). Я делал так (когда еще не делал возможности вводить словами с пробелами):
А теперь на каждую переменную, получается, я должен вешать хрень, аля:
Но это не очень удобно по сравнению с file >> artist >> title >> genre >> year; Думал можно какой-нибудь флаг сменить, а судя по всему нет ... Еще раньше делал file.getline() , сувал в буфер и парсил, но это тоже не сильно удобнее штатного с потоками ... Добавлено @ 15:42 Romikgy, Visual Studio 2005 Это сообщение отредактировал(а) Xenon - 25.12.2006, 15:43 |
||||
|
|||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
можно считать строку, а потом пользоваться std::stringstream
синтаксис такой же, только можно строку, как угодно изменить перед использованием (например, позаменять символы) -------------------- qqq |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
maxim1000, а что ты предлагаешь сделать? Заменить " " на что-нибудь, ";" на " ", потом считать файл так, как я это делал раньше, а затем то что-нибудь заменить на пробелы? Тоже как-то ...
![]() |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
впринцыпе чтобы не парсить есть replace().. Xenon, а в файле как расположен текст? так: text ; text или так? text; text если первый случай, то
То есть тоже читаешь ";", но ничего с этим символом не делаешь. Если второй случай - то imho только парсить. -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
Xenon |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Rockie, Текст расположен так:
Не получится как ты пределагаешь, потому что в некоторых местах название из двух слов, в некоторых из одного. |
|||
|
||||
Rockie |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
Xenon, тогда каким образом -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
не, сначала считать из файла в строку, потом заменить в строке нужные разделители на " ", сконструировать из неё stringstream и загружать из него всй тем же >> но это так... просто вариант... -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |