Здравствуйте, гость ( Вход | Регистрация )
AD | Дата 18.11.2009, 18:09 |
здесь фишка в том, что число записывается в num, а символ "пробела" в sym и все это прогоняется до конца файла. Но ошибка возникает в строчке: (in1 >> num >> char;) Видимо, он пытается считать сразу весь файл, а как ему задать, чтобы считал сначала число, символ, потом, число, символ, и т.д. по циклу? Блин, я нифига не понял из этого текста! При открытии файла НЕОБХОДИМО указывать как его следует открывать. Т.е. Вы открываете файл без лишних указаний (по-умолчанию, как бинарный), а читать пытаетесь как текстовый. Это первое, что бросается в глаза. Надо указывать флаг QIODevice::Text! Второе, насколько я помню, знак переноса строки используется вместе с возвратом каретки (по крайней мере, в данном случае). Поэтому лучше писать или так "\r\n", или так endl! |
|
registr | Дата 18.11.2009, 16:35 |
Спасибо, попрубую сегодня с этим кодом. Вот была еще такая идея считывания, где числа записывались через пробел в текстовый файл:
здесь фишка в том, что число записывается в num, а символ "пробела" в sym и все это прогоняется до конца файла. Но ошибка возникает в строчке: (in1 >> num >> char;) Видимо, он пытается считать сразу весь файл, а как ему задать, чтобы считал сначала число, символ, потом, число, символ, и т.д. по циклу? |
|
AD | Дата 18.11.2009, 13:35 |
Ну есть замечания по поводу кода. Поправил немного. Обратите внимания на параметры, с которыми файл открывается. Взял кусок кода, относящиеся только к QTextStream
Также обратите внимание, что при чтении строки я убираю лишние пробелы. Потом лучше перевод из строки в число делать с проверкой вот так:
|
|
registr | Дата 18.11.2009, 11:46 |
В векторе порядка 50000 чисел, но может быть и больше. Каждое число я записываю с новой строки в файл. Во-первых, возникает проблема с переводом строки "\n" на последнем элементе вектора, когда он записывает его и переводит строку, но она пустая. Из-за возникают глюки. Если число элементов вектора меньше 11 (я брал 0 1 2 3 4 5 6 7 8 9), то программа катагорически отказывается их записывать, вместо них записывает символы-квадратики. Если число элементов вектора больше 10, то все нормально записывается. Это очень странно. Я поставил условие, чтобы при записи последнего элемента не было перевода строки, программа заработала и для числа элементов меньше 11. Но это еще полбеды. При считывании из такого файла с помощью str = in1.readLine(); A2.push_back(str.toFloat()); теряются некоторые элементы моего вектора, в котором 50000 чисел. В простом же случае, когда просто беру 0 1 2 3 4 5 6 7 8 9 числа вообще не считываются. А есть ли более простой способ считать числа из текстового файла? |
|
AD | Дата 17.11.2009, 22:35 |
Такой способ записи и считывания оказался глючным. AD, а какой предлагали Вы? Бьюсь, никак не получается. Что понимается под словом "глючный"? Какие конкретно проблемы? Какой размер вектора? |
|
registr | Дата 17.11.2009, 22:19 |
Цитата QFile file1("file.txt"); file1.open(QIODevice::WriteOnly); QTextStream out1(&file1); for (int i=0; i<A1.size(); i++) out1 << A1[i] << "\n"; // запишется в столбик file1.close(); QString str; file1.open(QIODevice::ReadOnly); QTextStream in1(&file1); while (!file1.atEnd()) { str = in1.readLine(); A2.push_back(str.toFloat()); } Такой способ записи и считывания оказался глючным. AD, а какой предлагали Вы? Бьюсь, никак не получается. |
|
registr | Дата 17.11.2009, 18:49 |
Вообщем да. Если файл нигде дальше открываться не будет заново, то его можно не закрывать. Вдруг кому-нибудь еще пригодиться:
![]() |
|
Litkevich Yuriy | Дата 16.11.2009, 23:58 |
file.close(); // нужно обязательно закрыть файл(!) нет не обязательно, если переменная локальная, т.к.:Цитата QFile::~QFile () Destroys the file object, closing it if necessary. |
|
registr | Дата 16.11.2009, 23:44 |
Методом проб и ошибок удалось записать вектор в файл. Вот:
чтобы сохранить в текстовый файл file.txt
чтобы сохранить в бинарный файл file.bin сразу весь вектор
|
|
registr | Дата 16.11.2009, 19:32 |
Большое спасибо! ![]() ![]() |
|
Просмотр темы полностью (откроется в новом окне) | |
![]() |
Текстовая версия | Сейчас: 26.9.2023, 15:03 |