Porady

Jak parsować rozdzielany ciąg na listę ciągów

Jak parsować rozdzielany ciąg na listę ciągów


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Wiele razy trzeba podzielić ciąg na tablicę ciągów, używając znaku jako separatora. Na przykład plik CSV (oddzielony przecinkiem) może mieć wiersz taki jak „Zarko; Gajic ;; DelphiGuide”, a chcesz, aby ten wiersz został sparsowany do 4 linii (ciągów znaków) „Zarko”, „Gajic”, „” ( pusty ciąg) i „DelphiGuide” przy użyciu znaku średnika „;” jako separator.

Delphi oferuje kilka metod do parsowania łańcucha, ale może się okazać, że żadna z nich nie robi dokładnie tego, czego potrzebujesz. Na przykład metoda ExtractStrings RTL zawsze używa cudzysłowów (pojedynczych lub podwójnych) do ograniczników. Innym podejściem jest użycieOgranicznik iDelimitedText właściwości klasy TStrings - ale niestety w implementacji („wewnątrz” Delphi) występuje błąd, w którym znak spacji jest zawsze używany jako separator.

Jedynym rozwiązaniem do parsowania ograniczonego łańcucha jest napisanie własnej metody:

Przykład łańcucha ograniczonego

~~~~~~~~~~~~~~~~~~~~~~~~~
Procedura ParseDelimited (const sl: TStrings; const value: string; const delimiter: string);
var
dx: liczba całkowita;
ns: string;
txt: string;
delta: liczba całkowita;
zaczynać
delta: = Długość (separator);
txt: = wartość + separator;
sl.BeginUpdate;
sl.Clear;
próbować
podczas gdy Długość (txt)> 0 do
zaczynać
dx: = Pos (separator, txt);
ns: = Kopiuj (txt, 0, dx-1);
sl.Add (ns);
txt: = Kopiuj (txt, dx + delta, MaxInt);
koniec;
Wreszcie
sl.EndUpdate;
koniec;
koniec;
~~~~~~~~~~~~~~~~~~~~~~~~~

Użycie (wypełnia notatkę 1):
ParseDelimited (Memo1.lines, 'Zarko; Gajic ;; DelphiGuide', ';')



Uwagi:

  1. Hieronim

    Odpowiedź nieporównywalnie ... :)

  2. Jirair

    Jak przy okazji to niemożliwe.

  3. Winthrop

    Just Shine

  4. Keiran

    Absolutnie z tobą się zgadzam. W tym coś też mi się wydaje, to dobry pomysł. Zgadzam się z Tobą.



Napisać wiadomość