Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.033 c
6-1085670241
half_litre
2004-05-27 19:04
2004.07.25
Причина ClientDisconnect ??


3-1087997050
overstep
2004-06-23 17:24
2004.07.25
Получение выходного параметра


1-1089685882
Глеб
2004-07-13 06:31
2004.07.25
Алгоритм перевода чисел в римскую систему счисления


4-1086984795
alienserg
2004-06-12 00:13
2004.07.25
Synchronize внутри DLL. Пытаюсь рисовать из треда на форме.


1-1089594027
HF-Trade
2004-07-12 05:00
2004.07.25
Plugin для 3D Studio Max на Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский