Witajcie:)
Jest sobie łańcuch lanc o długości np. 10 MB. Chciałbym przeprowadzić na nim operację parsowania jakiegoś
parametru, który występuje w tym łańcuchu 1-2 tyś. razy pomiędzy tagiem początkowym a końcowym.
Zastosowałem poniższy mechanizm:
While Pos(TagPoczatkowy, lanc)>0 do
Begin
lanc:=Copy(lanc, Pos(TagPoczatkowy, lanc)+length(TagPoczatkowy), length(lanc));
Parametr:=Copy(lanc, 1, Pos(TagKoncowy, lanc)-1);
Memo1.Lines.Add(Parametr);
lanc:=Copy(lanc, Pos(TagKoncowy, lanc)+length(TagKoncowy), length(lanc));
End;
Niestety jest dość mało wydajny, zapewne z powodu ciągłego kopiowania łańcucha od pierwszego znaku
występującego po tagu TagKoncowy do końca łańcucha (ostatni wiersz pętli), szczególnie na początkowym
etapie parsowania, kiedy łańcuch jest najdłuższy.
Pytanie: Czy jest sposób, żeby uniknąć tego kopiowania łańcucha, a tylko przesunać jego wskaźnik
początku na pozycję Pos(TagKoncowy, lanc)+length(TagKoncowy)? A może należałoby zastosować zupełnie
inny mechanizm?