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

Вниз

Проблема с добавлением значения в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.019 c
3-1177169820
Roven
2007-04-21 19:37
2007.07.29
Установка базы данных


15-1183486078
ttimetabler
2007-07-03 22:07
2007.07.29
помогите определить время :)


15-1183153749
Riply
2007-06-30 01:49
2007.07.29
Что-то пустынно стало на форуме


15-1183182652
@!!ex
2007-06-30 09:50
2007.07.29
ICQ BOT..


2-1183635867
Кирей
2007-07-05 15:44
2007.07.29
Подключение сетевого диска