Bir bölme gerektiğinde birçok kez vardır sicim Içine dizi karakter ayırıcı olarak kullanarak dizeleri. Örneğin, bir CSV ("virgül" ayrılmış) dosyası "Zarko; Gajiç;; DelphiGuide "ile sınırlandırılmış olarak"; "noktalı virgül karakteriyle"; "noktalı virgül kullanarak" Zarko "," Gajic "," "(boş dize) ve" DelphiGuide "olarak 4 satır (dizeler) ayrıştırılmasını istiyorsunuz.
Delphi, bir dizeyi ayrıştırmak için çeşitli yöntemler sunar, ancak hiçbirinin tam olarak ihtiyacınız olanı yapmadığını görebilirsiniz. Örneğin, ExtractStrings RTL yöntemi, sınırlayıcılar için her zaman tırnak işareti karakterlerini (tek veya çift) kullanır. Başka bir yaklaşım,Sınırlayıcı veDelimitedText TStrings sınıfının özellikleri - ama ne yazık ki, uygulamada ("Delphi içinde") boşluk karakterinin her zaman bir sınırlayıcı olarak kullanıldığı bir hata vardır.
~~~~~~~~~~~~~~~~~~~~~~~~~
ParseDelimited yordamı (const sl: TStrings; const değeri: string; const ayırıcı: dize);
var
dx: tam sayı;
ns: dize;
txt: dize;
delta: tamsayı;
başla
delta: = Uzunluk (ayırıcı);
txt: = değer + sınırlayıcı;
sl. BeginUpdate;
sl. Açık;
Deneyin
Süre (txt)> 0 ise
başla
dx: = Poz (sınırlayıcı, txt);
ns: = Kopyala (txt, 0, dx-1);
sl. Ekle (ns);
txt: = Kopyala (txt, dx + delta, MaxInt);
son;
en sonunda
sl. EndUpdate;
son;
son;
~~~~~~~~~~~~~~~~~~~~~~~~~
Kullanımı (Memo1 doldurur):
ParseDelimited (Memo1.lines, 'Zarko; Gajiç;; DelphiGuide', '')