![]() |
|
|
![]()
|
|
| artsb |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
В ini файл из структуры:
записывается информация вот так:
Считываю так:
Проблема в том, что в inf может храниться не одна строка, а несколько, и записываться та они записываются, а вот считываться все не хотят, только первая. Как быть? Это сообщение отредактировал(а) artsb - 10.12.2007, 01:07 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||||
|
|||||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
ReadSectionValues ?
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
К сожалению нет, потому что ReadSectionValues читает значения параметров выбранного РАЗДЕЛА.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Юзай XML и не майся. Или разбивай Ini файл по секциям типа:
|
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
У меня как раз такой вид как ты привёл.
Но, если в Memo написано: ------------------------------ Привет Как дела? Что делаешь? ------------------------------ То в файл записывается: ------------------------------ [i] name=... www=... inf=Привет Как дела? Что делаешь? ------------------------------ А при считывании из inf в переменную считывается только "Привет". С XML я работать не умею. :( -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| ama_kid |
|
|||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
Не совсем понятно, как это ты в AnsiString хранишь несколько строк, это ведь не массив. Если имеется ввиду несколько строк, разделенных #13#10, в виде одной строки, - тогда можно попробовать сделать замену символов конца строки на свой строковый разделитель(например, таб или точку с запятой) при записи и обратной замене при считывании...
Добавлено через 1 минуту и 59 секунд ага, понял попробуй сделать как я посоветовал (замена символов между строк) -------------------- самурай без меча подобен самураю с мечом, но только без меча |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Вот так:
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Да, тогда придется делать замену символа разделения строк. Если не ошибаюсь то в Memo используется класс TStrings, надо его привести к классу TStringList, у него должен быть метод для изменения разделителя. А потом уже в AnsiString. Обратная схема та же, сначала в AnsiString, потом TStringList, установка разделителя и уже его присваиваем Memo.
Значит пора научиться ;) |
||||
|
|||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Может будет проще изменить структуру?
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
В таком случае структура может быть такой:
Насчет TStringList. Можно установить разделитель в свойстве Delimiter, потом считать все строки через свойство DelimitedText и записать в один ключ. Это сообщение отредактировал(а) SABROG - 11.12.2007, 12:30 |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Как вариант можно можно использовать такую структуру, но мне кажется что это не удобно.
SABROG не мог бы ты дать пример кода, как реализовать через TStringList. ama_kid можешь тоже дать примерчик, по предложенному тобой способу. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
||||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
SABROG спасибо. Как работает понял. Но проблема в том, что иформация из файла копируется в вектор в inf. А у AnsiString я что-то не нашёл DelimitedText. Как быть?
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Заменить AnsiString на указатель на TStringList в структуре нельзя ?
Куда в итоге выводится inf ? Если в Memo, то строки вполне могут сидеть в AnsiString'е "до востребования". Это сообщение отредактировал(а) SABROG - 11.12.2007, 18:11 |
|||
|
||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Можно конечно сделать так:
Но так в Memo будет текст мигать. И это долго, по-моему. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Зачем тебе пихать что-то в memo в цикле, оно затираться будет в любом случае ?
Я говорю про кусок кода, где тебе нужно выводить строки. Я правильно понимаю структуру, в ListBox'e есть итемы, каждому итему назначена структура grp, каждая структура grp содержит какие-то данные, в том числе и многострочное info ? Видимо при клике на итем куда-то у тебя отображаются все эти данные из grp. Некое подобие базы данных ? Так вот я не вижу никаких припятствий в том, чтобы AnsiString заменить на указатели TStringList. А при выборе итема делать Memo->Assign(grp->moyStringList); |
|||
|
||||
| artsb |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
SABROG огромное тебе спасибо, ты натолкнул на мысль. Сделал проще:
Структуру не менял. Просто в обработчике клика по ListBox1 написал:
А при добавлении записи в вектор:
В inf у меня всегда хранится DelimitedText. Всё сохраняется и считывается, т.е. всё круто. Ещё раз ОГРОМНОЕ тебе спасибо! Но у меня маленький вопросик: Если в Memo: =========================== привет как дела пока =========================== то в inf: =========================== привет|"как дела"|пока =========================== Так вот, если юзверь захочет в Memo нарисовать рожицу с использованием '|', могут быть проблемы. Можно ли вместо одного символа использовать несколько. -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
||||
|
|||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Нет, там тип char. Т.е. всего 1 байт отведен под эти цели. Но можно попробывать использовать непечатные символы, например 0x00-0x1F. Только не знаю запишется ли строка в .ini файл.
Еще есть сомнения насчет интерпретации разделителя внутри кавычек " ". Экспериментируй, сделай стресстест. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Всё равно, БОЛЬШОЕ тебе спасибо.
Это сообщение отредактировал(а) artsb - 11.12.2007, 22:19 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| ama_kid |
|
||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: 10 Всего: 95 |
Народ, если честно - не понимаю, зачем так все сложно? Есть ведь функция StringReplace. Юзается примерно следующим образом:
При записи в ini-файл:
Считывается, соответственно, с обратной заменой
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||
|
|||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
ama_kid ты прав, спасибо попробую.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Как по мне, так мой вариант все же компактней. И я проверил, если разделитель стоит внутри кавычек, то он не считается разделителем. Даже если пользователь напишет строку в кавычках, скажем цитирование, да еще и со смайликом: "Ни дня без строчки кода :|" То все обрабатывается нормально и точно также выведется без искажений. Внутренние кавычки не посчитаются за новую строку и смайлик не посчитается за разделитель. |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
SABROG кавычки ставятся только если есть пробелы в строке (обрати внимание).
Например: ------------------------- Привет. Как дела? Пока. ------------------------- будет записано как: Привет.|"Как дела?"|Пока А если так: ------------------------- Привет. Какдела? Пока. ------------------------- то будет записано как: Привет.|Какдела?|Пока Это сообщение отредактировал(а) artsb - 12.12.2007, 15:26 -------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 3 Всего: 91 |
Отсутствие кавычек никак не влияет на работу
![]() В общем, если символ разделителя или пробелы появляются в строке, то она экранируется кавычками. Это сообщение отредактировал(а) SABROG - 13.12.2007, 14:30 |
|||
|
||||
| artsb |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2280 Регистрация: 17.7.2007 Где: центр Вселенной Репутация: 39 Всего: 64 |
Теперь всё норамально. Спасибо.
-------------------- Чем отличается умный человек от мудрого? Умный - выпутается из любой ситуации. Мудрый - просто в неё не попадёт. |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |