![]() |
|
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]()
|
|
| Martin_8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.10.2006 Где: Минск Репутация: нет Всего: нет |
Здравствуйте.
Помогите, пожалуйста, разобраться с TStringList. Статью о TStringList я прочитал, но всё равно не могу понять, почему происходит так, как описанное ниже. У меня есть txt файл, который мне необходимо обработать. Скажем, записать результат его парсинга в memo. Файл состоит из двух секций [IN_PARAM] и [OUT_PARAM]. В секции [OUT_PARAM] содержится информация в формате “^имя” = “значение^”. Причём блоки параметров “^имя” = “значение^” периодически (через 12 строк) повторяются (начало 12-и строчного блока это ^DocDate, а конец это ^Num ). Первые 12 строк описывают одну организацию, следующие 12 строк описывают вторую организацию и т.д. На выходе, я хочу получить только “значения”. txt файл прикреплён. Разбор я выполняю так.
Вся проблема во втором while: Первый 12 итераций в for выполняются нормально, и я получаю данные об первой организации. Но следующие 12 итераций for опять выводят информацию о первой организации, а не о следующей. С третей та же проблема и т.д. Хотя я вижу, что переменная j меняется. Возникает такое ощущение, что “указатель строки” не перемещается дальше, а остаётся на первом блоке из 12-записей. Покажите, где здесь ошибка и как её исправить? P.S. Потом, если удастся побороть описанную проблему, нужно будет вносить “значения” в БД, Insert запросом по 12 за раз. Посоветуйте, как и куда лучше сохранять мои “значения”, для последующей вставки в БД через Insert ? Присоединённый файл ( Кол-во скачиваний: 9 )
document1.txt 1,81 Kb |
|||
|
||||
| Данкинг |
|
||||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
А зачем дважды грузить в Memo1, но в результате всё равно работать с S ? Честно говоря, ничего из кода не понял, но могу посоветовать использовать не StringList, а TextFile, т.е. читать строки напрямую из текста. -------------------- There's nothing left but silent epitaphs. |
||||
|
|||||
| Martin_8 |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.10.2006 Где: Минск Репутация: нет Всего: нет |
Данкинг, Спаибо за ответ, особоеено в такое время.
Я в принципе, делаю всё так, как Вы написали. Я так и делаю, вот здесь, как раз и нахдится "значение"
Вот это делается здесь:
Но я хочу понять, почему в моём случаи, не перемещается "указатель" строк в TStringList. Я просто зашёл в тупик. Это сообщение отредактировал(а) Martin_8 - 22.12.2008, 10:04 |
||||
|
|||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
не совсем вкуриваю, о каком указателе речь...
|
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
||||
|
||||
| TRS743 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 22.12.2008 Репутация: нет Всего: нет |
for j:= h to h+12 do
begin b:= Pos('^',s.Values[s.Names[j]]); // определяю позицию нахождения в строке символа ^ ss:=s.Values[s.Names[j]]; // переписываем строку Delete(ss,b,1); // удаляем символ ^ Memo2.Lines.Add(ss); // выводим результат в memo h:=h+1; end; Не совсем понял смысл проги, но выделенное красным цветом вызывает подозрения |
|||
|
||||
| Martin_8 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 16.10.2006 Где: Минск Репутация: нет Всего: нет |
NewDima, Спасибо!
А я как-то не заметил свойство ValueFromIndex у TStringList. С ним всё работает. Честно говоря, я не понял, почему не работает мой код, ну да ладно. Посоветуйте, пожалуйста, ещё по поводу этого: Это сообщение отредактировал(а) Martin_8 - 22.12.2008, 12:02 |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 11 Всего: 130 |
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| NewDima |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 922 Регистрация: 20.2.2006 Где: <?here?> Репутация: нет Всего: 12 |
это уже следующая тема и другой раздел базы данных |
|||
|
||||
![]()
|
| Правила форума "Delphi: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |