Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

TStringList болеет. Как вылечить?   Найти похожие ветки 

 
Pavelkq   (2004-07-08 12:22) [0]

Имею цикл в котором из массива запихиваю данные в TStringList. При проверке оказывается, что одна строка заносится с посторонними симфолами. Например:

FData:=TStringList.Create;
for i:=1 to 1000 do
 begin
   Fdata.Sorted := true;
   Fdata.Duplicates := dupIgnore;
   if A[i]<>"" then
   FData.Add(A[i]);
 end;

 Вдруг обраниживается на каком-то 179 элементе, что A[179]="приехать", а Fdata.Strings[179]=#0#0#1#0#1"приехать"#1#$1a#0. Пришлось написать процедуру, которая проверяет все элементы и корректирует результат, выкидывая лишние символы (благо, у меня могут присутствовать исключительно русские строчные буквы). Но это же не вариант.
 Вероятно, это связано с памятью, т.к., когда я пытался вставить диагностику в код, то ошибка уже случалась не на 179, а на 309, то на 877. Т.е. от количества строк кода зависело, где будет ошибка. Причем от раза к разу, если не менять код, ошибка возникает в одном и том же элементе, т.е. не случайным образом. Как с этим бороться?


 
Семен Сорокин ©   (2004-07-08 12:23) [1]

Trim при занесении


 
Sandman25 ©   (2004-07-08 12:34) [2]

Fdata.Sorted := true;
  Fdata.Duplicates := dupIgnore;

Лучше вынести из цикла. Первое вниз, второе вверх.


 
KSergey ©   (2004-07-08 12:37) [3]

1.Какого типа А?
2.Похоже, что в А как раз то, что видим в Fdata.Strings. А в массиве точно есть столько элементов, сколько их используется?
Знаете, признаться либо мистика, либо проблема не тут, либо не та.


 
Pavelkq   (2004-07-08 12:46) [4]

[2] - пробовал, не получается тогда избавиться от дубликатов. Хотя, сортировка срабатывает.
 [3] - 1.A:string
       2.Нет, введя дополнительные переменные и проходя пошагово видно, что А заполнен корректно.
       3.Количество элементо точно отслеживается. Иначе бы была ошибка работы программы. А ее нет. Причем ошибка вылезает не в конце, а где попало. Думаю, это память. Чего бы дополнительные строки в цикле меняли положение ошибки?


 
Sandman25 ©   (2004-07-08 12:49) [5]

[4] Pavelkq   (08.07.04 12:46)

Так все-таки A:String или A[179]="приехать"?

>Количество элементо точно отслеживается.

Включите Project-Options-Compiler-Range checking


 
Digitman ©   (2004-07-08 13:00) [6]


> проходя пошагово видно, что А заполнен корректно


чем смотришь ? Evaluate/Modify ? он тебе тоже непечатные символы далеко не все выведет ..

вставай на A[i] и проверяй Length(A[i]), сравнивая с тем что показывает Evaluate/Modify


 
Pavelkq   (2004-07-08 13:00) [7]

var A: array of string соррии...
Project-Options-Compiler-Range checking включен. Ошибок нет.


 
KSergey ©   (2004-07-08 13:54) [8]

Ну тогда A[] содержит эти символы


 
Amoeba ©   (2004-07-08 14:47) [9]

Не с неба же они падают!


 
Pavelkq   (2004-07-08 15:46) [10]

Конечно, с неба. Я анализировал в ходе выполнения программы. Было видно, что A[] не содержал этих символов, а Fdata.Strings[], содержал. Вывести на экран это не удавалось, т.к. любые попытки вывести такую строку ничего не отображали. Можно это увидеть только приостановав выполнение программы, и наведя на переменную.
 Ладно, похоже, это действительно чудеса. Я перепишу все немного по другому...


 
Sandman25 ©   (2004-07-08 15:48) [11]

Все патчи для D6 установлены?


 
Amoeba ©   (2004-07-08 17:07) [12]

Небольшое замечание несколько в сторону.

У тебя
var A: array of string

и при этом

for i:=1 to 1000 do

хотя первый элемент массива имеет индекс 0. То, что он пропускается - это так задумано?


 
Digitman ©   (2004-07-08 17:19) [13]

посмотреть бы воочию, как этот самый "волшебный" массив A инициализируется и заполняется перед тем как ..


 
Pavelkq   (2004-07-09 06:29) [14]

Патчей у меня нет. Где их взять?
[13]- Нет, код посылать не буду, т.к. он сам займет 4 листа + еще 2 DLL-ки и огроменный словарь.
 Я уже все другим способом сделал и все работает без ошибок.
Всем большое спасибо за отклик!



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.03 c
3-1088419343
Jaxtor
2004-06-28 14:42
2004.07.25
Передача на сервер информации о версии программы


14-1088594973
Александр Иванов
2004-06-30 15:29
2004.07.25
У меня в субботу свадьба


3-1087338013
Квэнди
2004-06-16 02:20
2004.07.25
проблема с LibMySQL


1-1089665031
RedLord
2004-07-13 00:43
2004.07.25
из полного пути к файлу его имя


14-1089085236
jb
2004-07-06 07:40
2004.07.25
Чего бы плохого шефу сделать