Главная страница
    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.042 c
15-1183008937
Slider007
2007-06-28 09:35
2007.07.29
С днем рождения ! 28 июня 2007 четверг


2-1183238847
Riply
2007-07-01 01:27
2007.07.29
Использование SetFilePointerEx.


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


2-1182993583
DagOT-R
2007-06-28 05:19
2007.07.29
Верните "свойства папки"!


2-1183588368
snowkam
2007-07-05 02:32
2007.07.29
OpenDialog





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