![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
А operator>> считывает целые числа в текстовом виде или как?
вот такой у меня код:
вот такой у меня файл (текстовый): 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,2,1,3,36546396 и так далее. Смотрю в отладчике -- в v попадает какой-то бред (большое отрицательное число). Причём, поток переходит в состояние ошибки. Почему? Наверное, он в двоичном формате считывает? А как сделать в текстовом? Почему cout << v; выводит в текстовом? |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Ха!
Решил переопределить operator>> для long... Не тут-то было! Не даёт, дура. Говорит ambigous... Чё делать-то??? |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
ifstream сам не может догадаться, что у тебя делимитер ","
можно пробел использовать или энтер |
|||
|
||||
| Dims |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
М-дя, кажется, это заговор. Зря я с этими istream-ами связался. Надо было писать по-старинке.
Написал функцию long readlong( istream &is ), которая читает посимвольно и составляет число. Так оказалось, что при чтении пропускаются символы перевода строки! Сейчас для меня это выглядит так, словно всё специально сделано так, чтобы пользоваться потоками было невозможно. Спрашивается, где логика? Почему оператор
выводит переменную в текстовом виде, а оператор
считывает её в двоичном? Ну ладно, любим очень двоичные данные. Но нафига тогда съедать символы перевода строки? Ведь в двоичном виде эти символы могут быть нужны! То есть, получается, istream -- это особый способ читать двоичные файлы с проглатыванием некоторых байтов!? Или я чего-то по-крупному не понимаю? Добавлено через 2 минуты и 1 секунду Сам не может, а с моей помощью -- может? Как ему подсказать? Как ему сказать, чтобы он делал то, что надо, а не то, что ему в голову взбредёт? Формат файла у меня задан. Добавлено через 4 минуты и 33 секунды А, то есть, он, всё-таки, читает в текстовом виде, но спотыкается на запятой? А что мне делать, чтоб (1) не спотыкался и (2) видел концы строк? |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Если изменить направление стрелок, то считывать будет в текстовом виде. По всей видимости, что да, только я из 3-х твоих постов так и не понял ни того, что ты хочешь от потоков получить, ни в чём суть твоей проблемы. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
getline, кажись, делимитеры принимает
|
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Ну как мне с помощью потоков прочитать файл, который представляет собой записанные в текстовом виде целые числа через запятую? А как это стрелочки в другую сторону? Я так понимаю, что если влево, то это вывод, а если вправо, то ввод. Не так? |
|||
|
||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
архимед имел в виду, что ты тут неправильно стрелки поставил |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
А, да, я перепутал.
Я, собственно, уже прочёл построчно файл, с разбором каждой строки. Но это как-то некрасиво. Где же поточные прелести? |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
в принципе, можно всё прочитать в строку, заменить все запятые на пробелы, потом из неё сделать std::istringstream и из него читать обычным operator>>
-------------------- qqq |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 1 Всего: 11 |
Всё равно как-то это некрасиво. Я же могу с лёгкостью сделать вывод через запятую. Почему же обратная операция порождает такие глюки?
|
|||
|
||||
| bsa |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
test.cpp:
|
||||||
|
|||||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
на VS 2005 ни дебаг ни релиз такого результата не дают
|
|||
|
||||
| archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Dims, интересно получается - при выводе ты указываешь, что нужно вставлять разделитель в виде запятой, и при вводе хочешь, чтобы поток сам догадался?
Попробуй указать ему, что между числами есть разделитель:
Что же касается конвертации \r\n в \n - это особенность текстовых потоков. Если хочешь работать с потоком в бинарном режиме, то используй соответствующие методы, а не операторы <<, >>. Ах, ну да, то что поток сам догадывается, что нужно пропускать пробельные символы - это только лишь по умолчанию:
Добавлено через 8 минут и 43 секунды Выкини свою студию - она у тебя пиратская Hint: файлик test.txt где лежит? Это сообщение отредактировал(а) archimed7592 - 1.12.2007, 12:50 -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
| Alek86 |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1299 Регистрация: 30.1.2007 Где: Киев Репутация: 21 Всего: 25 |
каюсь, но выкидывать не буду именно НЕ там, где должен лежать... а говорил, экстрасенсов нету... |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |