Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Вниз

Проблема с добавлением значения в TStringList   Найти похожие ветки 

 
Sidoran ©   (2007-05-21 14:56) [0]

Есть вот такая вот функция, которая делит строчку с разделителем на множество строчек.

function ExtString(g:string;ch:char;str:TStringList):integer;
var i,p,first,last:integer;
item:string;
begin
i:=0;first:=1;
for p:=2 to StrLen(PChar(g))do
if g[p]=ch then begin
last:=p;
item:=copy(g,first+1,last-first-1);
str.Add(item);
first:=last;
i:=i+1;
end;
ExtString:=i;
end;

Проблема в том что при добавлении 7 по счету значения компилятор начинает матюкаться на Access Violation.
Подскажите в чем собственно проблема.


 
clickmaker ©   (2007-05-21 14:59) [1]

вышел за границы массива, значит


 
MBo ©   (2007-05-21 15:14) [2]

TStringList.DelimitedText уже умеет делать заявленную задачу


 
Плохиш ©   (2007-05-21 15:33) [3]


> StrLen(PChar(g))

Length уже не в моде?

В общем согласен с [2], но рекомендую посмотреть реализацию метода  SetDelimitedText...


 
Sidoran ©   (2007-05-21 15:49) [4]


> вышел за границы массива, значит

Наврядли. если загонять в StringList целый файл, то все в порядке.

> TStringList.DelimitedText уже умеет делать заявленную задачу

Конекретно мою задачу оно не выполняет, потому как удаляет пустые значения. У меня же файл который содержит определенное количество разделителей, но не всегда определенноей количество заполненых полей.


 
clickmaker ©   (2007-05-21 15:53) [5]


> если загонять в StringList целый файл, то все в порядке

эээ... не понял. Если только 7 значений, то падает, а если больше, то все пучком?


 
Sidoran ©   (2007-05-21 16:21) [6]


> > если загонять в StringList целый файл, то все в порядкеэээ.
> .. не понял. Если только 7 значений, то падает, а если больше,
>  то все пучком?

Если делать Вот так:
  AssignFile(f,fname);
  k:=TStringList.Create;
  k.LoadFromFile(fname);

То все прекрасно хавается и намного больше 7 символов. Файл содержит почти 12 тыщ строк. А вот если добавлять по одному то выползает ошибка.


 
MBo ©   (2007-05-21 16:22) [7]

>А вот если добавлять по одному
Покажи


 
Sidoran ©   (2007-05-21 16:31) [8]


> Покажи

В самом верху кусок кода


 
MBo ©   (2007-05-21 16:55) [9]

как используешь?


 
Sidoran ©   (2007-05-21 17:00) [10]


> как используешь?

str.Add(item);// str:StringList,item:string;
если чет не понял то уточни плиз вопрос.


 
clickmaker ©   (2007-05-21 17:03) [11]

скорей всего, first+1 в какой-то момент выходит за границы


 
MBo ©   (2007-05-21 17:11) [12]

объект str создан?


 
Sidoran ©   (2007-05-21 17:16) [13]


> объект str создан

прописывание в телее функции str:=TSrtingList.Create ни дало ни каких результатов.


 
MBo ©   (2007-05-21 17:23) [14]

почему в теле функции?
Ей нужно передавать заранее созданный объект


 
{RASkov} ©   (2007-05-21 17:32) [15]

> [13] Sidoran ©   (21.05.07 17:16)

Не надо в теле ничего прописывать, у тебя должно выглядеть нечто так:

var sl: TStringList;
begin
 sl:= TStringList.Create;
 ExtString(<строка>, <разделитель>, sl);
.........
 sl.Free;
end;


 
Sidoran ©   (2007-05-21 17:33) [16]

Вызов функции происходит так
p:=ExtString(k[i],#9,k1);
где обьект к1 уже создан.


 
clickmaker ©   (2007-05-21 17:34) [17]

кстати, если строчка не оканчивается разделителем, то последний элемент останется за бортом


 
Sidoran ©   (2007-05-21 17:35) [18]


> кстати, если строчка не оканчивается разделителем, то последний
> элемент останется за бортом

Спасибо, но я знаю.Формат моего файла таков что каждая строчка начинается и заканчивается разделителем.


 
Sidoran ©   (2007-05-21 17:39) [19]

На всякий случай добавлю что функция работает без сучка и задоринки при количестве разделителей меньше 6. При большем отказывается.


 
clickmaker ©   (2007-05-21 17:41) [20]


> При большем отказывается

и вид строки при этом значения не имеет?
как-то слабо верится...



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

Форум: "Основная";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.04 c
15-1183027152
Ega23
2007-06-28 14:39
2007.07.29
Class vs Record


6-1166732105
m00ngl0w
2006-12-21 23:15
2007.07.29
WinSock


15-1183160038
O.O
2007-06-30 03:33
2007.07.29
D6 и Vista


15-1182859100
Predfer
2007-06-26 15:58
2007.07.29
Мышь PS/2 не работает


3-1177149693
Pascal
2007-04-21 14:01
2007.07.29
Связанные таблицы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский