Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c