![]() |
|
![]() ![]() ![]() |
|
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
Допустим есть текстовый файл params.txt, расположенный в папке с экзешником программы и имеющий следующее содержание:
//commentarii 1 //Это параметр1 2 //Это параметр2 20100 “hello” “preved” 5 Подскажите пож-та примером ![]() |
|||
|
||||
RedDigger |
|
|||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: нет Всего: 1 |
Но на будущее если хочешь создавать проекты тебе придется писать самому а не просить примеров на форумах... Удачи |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
RedDigger:
![]() то есть: в файле строка:445 //параметр1 в StringList-е: "445" без конечного пробела или табуляции после 445 - то есть чисто "445" как надо изменить регулярное выражение в QRegExp? подскажите пож-та... ![]() |
|||
|
||||
admsasha |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
Если не ошибаюсь, то так:
или так
ну или так
Это сообщение отредактировал(а) admsasha - 26.9.2010, 12:07 |
||||||
|
|||||||
RedDigger |
|
||||||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: нет Всего: 1 |
Если честно то я не понял вопроса.. Добавлю к предыдущим примерам парочку собственных... 1. Если тебе не надо удалять комментарии со строки то тогда просто удали строку с QRegExp.... 2. Если тебе надо использовать другой разделитель, но при этом результат с разделителем "//" тебя устраивает - просто замени эти два символа в строке маски внутри QRegExp на необходимый тебе.. Только будь внимательна - Не все символы отыгрываются так как это кажется с первого взгляда.. Загляни в документацию чтобы понять о использовании регулярных выражений. 3. Если тебе необходимо использовать "//" не как комментарий (удаление из информации его и все что в строке после) а как разделитель строки (из одной строки содержащей 1 или более выражений "//" получить 2 или более строк) - тогда вместо
поставь следующую строку
Естественно заменив __MY_DELIMETER__ на значение твоего разделителя.. Надеюсь помог. |
||||||
|
|||||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
admsasha:
спасибо за подсказку:
дает нужный мне результат ![]() RedDigger тоже спасибо... еще раз... ![]() |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
Теперь у меня проблема в указании пути к текстовому файлу – надо задавать ПОЛНЫЙ путь к файлу (хотя если указано только имя файла, то он ведь должен искаться в папке с пусковым файлом):
допустим каталог программы расположен в /home/Anna/Desktop/Test_primer, пробую:
запуск проги из креатора дает верный ответ - /home/Anna/Desktop/Test_primer запуск экзешника кликом на нем – ответ всего лишь /home/Anna – ПОЧЕМУ и как сие исправить? Работаю под Linux OpenSuse 10.3, Qt 4.6.1...в винде все нормально работает… |
|||
|
||||
RedDigger |
|
||||
![]() Программист Профиль Группа: Участник Сообщений: 26 Регистрация: 24.9.2010 Где: Москва Репутация: нет Всего: 1 |
QDir::current() - возращает рабочий адрес приложения. (Например находясь в папке /tmp ты запускаешь приложение выводящее тебе QDir::current() - оно вернет именно /tmp а не тот адрес где оно расположено..) Тебе надо использовать следующую функцию - QApplication::applicationDirPath() |
||||
|
|||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
RedDigger: у меня очередная проблема - как Вы показали выше считала данные из тектового файла - первая строка в стринглисте result равна "192.132.12.10" (это верно) - мне ее надо передать (использовать) в метод другого модуля в качестве параметра типа (char *) - пробую это сделать так:
вроде ошибок не выдает, но на приемной стороне значение - абракадабра какая-то в зависимости от используемой кодировки (в примере - toAscii)....как тут быть? |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Покажите код.
Ваш код создает временную строковую переменную QByteArray с копией строки и на этой же линии строковая временная переменная грохается при выходе из области видимости. Таким образом указатель на строку становится невалидным при переходе к следующей инструкции.
|
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
SABROG: по Ваше просьбе выкладываю максимально упрощенный (и все равно неработающий верно) мой код - см. приложенный к письму архив проги...
в проекте: в методе Connect_params, если задать первый передаваемый параметр (IP-адрес) в виде константы, а не считанный из текстового файла, то все правильно работает, в противном случае - считываемый IP-параметр неверно воспринимается в методах модуля en_vit1... подскажите пож-та...желательно с минимально нужными исправлениями ![]() ![]() Присоединённый файл ( Кол-во скачиваний: 10 ) ![]() |
|||
|
||||
admsasha |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 28.1.2005 Репутация: нет Всего: 6 |
kuvshinka,
1. твой пример выдает у меня "257.223.62.32"
Может прога не видит твой txt файл ? Например, у меня бинарник собрался в корне с исходниками, а твой txt находится в папке release 2. судя по текстовику, это у тебя конфиг. А почему бы не использовать тогда QSettings ? |
|||
|
||||
kuvshinka |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
у меня бинарник собирается (появляется) в папке Release - там же лежит и текстовый файл...после запуска проги из creator-а выдается какой-то странный ответ - то какое-то "5р", то квадратик, то 257.223.62.32... почему ответ в принципе меняется? что за класс QSettings? никогда его не использовала...подскажите программно как его тут можно применить?
общая задача такая - работающий отдельно от проекта бинарник (Qt 4.6 собран статически в версии Release) программы должен при своем запуске считывать данные из текстового файла и использовать их в разных своих модулях... |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Тут при переходе на следующую инструкцию указатель возвращенный data() становится невалидным, т.к. временный объект QByteArray уничтожается при выходе из области видимости.
Получить указатель на данные в ASCII формате из QString без копирования самого текста невозможно из-за того, что QString содержит текст в Unicode кодировке. Единственным выходом, видимо, будет объявление постоянной QByteArray переменной где нибудь в MainWindow. |
|||
|
||||
kuvshinka |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 386 Регистрация: 27.4.2008 Репутация: нет Всего: нет |
SABROG: ммм....ну объявила я переменную QByteArray ip; в классе MainWindow....и что дальше делать - в той же функции Connect_params записать в ip считанную из файла нужную мне строку?:
а как мне потом ее преобразовать к типу (char *) для записи в передаваемую структуру A?
Это сообщение отредактировал(а) kuvshinka - 2.10.2010, 21:37 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |