считывание строки из файла(QFile) |
Здравствуйте, гость ( Вход | Регистрация )
считывание строки из файла(QFile) |
Гость_Гость_* |
12.7.2015, 23:20
Сообщение
#1
|
Гости |
Добрый вечер.
Прошу помочь с проблемой. Когда записываю строку в файл:
Все записывается в файл. А когда пытаюсь считать:
Приложение аварийно завершается, в чем проблема? |
|
|
ahalaj |
13.7.2015, 9:28
Сообщение
#2
|
Студент Группа: Участник Сообщений: 47 Регистрация: 14.6.2014 Пользователь №: 4166 Спасибо сказали: 13 раз(а) Репутация: 1 |
Не инициализируешь QString чтобы в ней хватило места для прочитанной строки, в результате строка читается или в никуда, или возникает переполнение стека.
|
|
|
lanz |
13.7.2015, 11:30
Сообщение
#3
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Нет, нет, нет.
Так делать нельзя, вы записываете на строку, а внутреннее представление строки в памяти. То что там какие то символы читаются в файле, просто деталь реализации. Для ввода и вывода строк используйте http://doc.qt.io/qt-5/qtextstream.html#details |
|
|
Гость_Гость_* |
13.7.2015, 14:40
Сообщение
#4
|
Гости |
lanz, а для чего тогда эти функции?? ( QFile::read(), QFile::write() ) , и ещё вопрос. В файле какие-то иероглифы, функция QFile::write(), записывает данные в двоичном коде, или это кодировка какая?
Спасибо за ответы. |
|
|
lanz |
13.7.2015, 14:56
Сообщение
#5
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Эти функции для считывания/записи байт/двоичных данных из файла.
QTextStream использует их внутри себя, только он потом еще разбирается с кодировками и всяким таким и подготавливает правильные объекты QString. Иероглифы это скорее всего внутренние данные класса QString, которые не предназначены для записи. |
|
|
Гость_Гость_* |
13.7.2015, 15:26
Сообщение
#6
|
Гости |
А как тогда считать из файла какие-нибудь данные, и, скажем строку. К примеру, в файле есть строка: "Автомобили: 56". Как считать ее так, чтобы с 56 можно было проводить арифметические действия.
|
|
|
lanz |
13.7.2015, 15:45
Сообщение
#7
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Считать как строку, потом выделить часть про 56, потом преобразовать ее в число методом
http://doc.qt.io/qt-5/qstring.html#toInt |
|
|
Гость_Гость_* |
13.7.2015, 16:08
Сообщение
#8
|
Гости |
Тогда в файле должно быть без пробелов написано, вот так- " Автомобили:56 ", и как быть, если чисел не одно, а несколько, " Автомобили:56 12.15 ". А QDataStream приемлемо будет использовать в этом случае?
И ещё вопрос, как выделить часть с цифрами? |
|
|
lanz |
13.7.2015, 16:26
Сообщение
#9
|
Старейший участник Группа: Участник Сообщений: 690 Регистрация: 28.12.2012 Пользователь №: 3660 Спасибо сказали: 113 раз(а) Репутация: 8 |
Это уже задача программиста
Для считывания чисел используйте http://doc.qt.io/qt-4.8/qtextstream.html#operator-gt-gt-2 и другие перегрузки. Для разбора строки можно использовать посимвольные циклы или регулярные выражения. QDataStream работает с двоичными данными, вам он тут не поможет. Придумайте пошаговый алгоритм, как решить вашу задачу, опишите его на обычном русском языке, потом подумаем ка перевести это для компьютера |
|
|
Гость_Гость_* |
13.7.2015, 16:48
Сообщение
#10
|
Гости |
Я нашел 2 решения.
Первое. В файле " Hello:51 " "Первый способ"
Вроде работает, и складывает, вывел 105.5. И второй способ, с QDataStream. "Второй способ"
Записали в файл.
Считали. Какой способ лучше и быстрее? И вообще, правильно делаю ? |
|
|
Текстовая версия | Сейчас: 16.11.2024, 2:45 |