Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Delphi XE2: Text Teilen ohne Strings.Delimiter
Kralle - Mi 12.09.12 17:06
Titel: Delphi XE2: Text Teilen ohne Strings.Delimiter
Hallo,
ich stehe mir glaube ich gerade selber im Weg.
Ich möchte einen Text in Teil-Texte aufteilen.
Mit
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure Split(const Delimiter: Char; Input: string; const Strings: TStrings); begin Strings.Clear; Strings.Delimiter := Delimiter; Strings.DelimitedText := Input; end; |
eigentlich kein Problem (Trennzeichen '\'). Aber das Ergebnis ist nicht das was ich erwarte.
Ausgangsstring:
Zitat: |
Heiko ist \a500 entfernt. Das \a501\a789 ist rot. |
Ergebnis:
Zitat: |
Heiko
ist
a500
entfernt.
Das
a501
a789
ist
rot.
|
Erwartet habe ich :
Heiko ist
\a500 entfernt. Das
\a501
\a789 ist rot.
Wo ist mein Fehler? Oder was muss ich anders machen?
MfG
Heiko
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 12.09.2012 um 17:13
Narses - Mi 12.09.12 17:12
Moin!
Kralle hat folgendes geschrieben : |
Wo ist mein Fehler? Oder was muss ich anders machen? |
Setz mal .StrictDelimiter auf TRUE. :idea:
cu
Narses
Kralle - Mi 12.09.12 17:21
Moin,
Narses hat folgendes geschrieben : |
Moin!
Kralle hat folgendes geschrieben : | Wo ist mein Fehler? Oder was muss ich anders machen? | Setz mal .StrictDelimiter auf TRUE. :idea:
cu
Narses |
Ergebnis:
Zitat: |
Heiko
ist
a500
entfernt.
Das
a501
a789
ist
rot.
|
Also, noch schlimmer als vorher und die `\`sind auch immer noch weg.
Muß ich das jetzt doch mit Copy() uns Co machen?
Gruß Heiko
Tranx - Mi 12.09.12 17:21
Mal eine andere Frage zurück:
Ich habe leider nicht Delphi XE. Daher geht das bei mir nicht mit dem Testen. Aber eines verstehe ich nicht so Recht. Wie kann man in einer Prozedur den Parameter auf const setzen, also nicht veränderbar und dann innerhalb der Prozedur die Variable ändern? Bei mir gibt der Compiler schon die Fehlermeldung aus, dass man der linken Seite nichts zuweisen darf. Weil sie eiben als const deklariert ist. Allerdings habe ich das mit dem const für TStringlist ausprobiert und es klappt. Ganz verstehen kann ich das zwar nicht, wie das bei einfachen Variablen verboten udn bei Komponenten erlaubt ist, aber es ist nun mal so.
Am Einfachsten durch eine Schleife. So in etwa:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| procedure Split(Delimiter: char; const s: string; Strings: TStringList); var i: integer; Teil: string; begin Strings.Clear; Teil := ''; for i := 1 to Length(s) do begin if s[i] = Delimiter then begin Strings.Add(Teil); Teil := Delimiter; end else begin Teil := Teil + s[i]; end; end; Strings.Add(Teil); end; |
Leider muss ich über TStringlist gehen, da TStrings bei Delphi 5 nur abstrakt ist.
In der Variable Strings ist dann das, was Du willst. Du kannst es z.B. einer ListBox.Items zuweisen:
Delphi-Quelltext
1: 2: 3:
| SL := TStringList.Create; Split('/',Edit1.Text,SL); Listbox1.Items := SL; |
Kralle - Mi 12.09.12 18:20
Moin,
Tranx hat folgendes geschrieben : |
Am Einfachsten durch eine Schleife. So in etwa:
|
Damit funktioniert es. - Danke.
Gruß
Heiko
Lemmy - Mi 12.09.12 19:48
Tranx hat folgendes geschrieben : |
Mal eine andere Frage zurück:
Ich habe leider nicht Delphi XE. Daher geht das bei mir nicht mit dem Testen. Aber eines verstehe ich nicht so Recht. Wie kann man in einer Prozedur den Parameter auf const setzen, also nicht veränderbar und dann innerhalb der Prozedur die Variable ändern? Bei mir gibt der Compiler schon die Fehlermeldung aus, dass man der linken Seite nichts zuweisen darf. |
dann schau dir die Methode nochmal ganz genau an: die mit const definierte Variable wird nicht geändert, lediglich ein Property der Klasse wird verändert. Die Variable (Pointer) auf den Bereich in dem das Objekt gespeichert wird, wird aber nicht geändert (es steht ja nirgens Strings := nil - das würde so nicht gehen).
und an beide: SChaut euch mal die Hilfe zu DelimetedTExt an, da steht nämlich drin, dass am Delimeter und an Leerzeichen getrennt wird, außer die Leerzeichen befinden sich in einem Text der mit dem Char der in QuotedChar definiert ist eingeschlossen ist.
GRüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!