Entwickler-Ecke
Sonstiges (Delphi) - String vereinzelln
Ice - Di 02.07.02 20:04
Titel: String vereinzelln
Hi Leute!
Ich habe folgendes Problem:
Aus einem bestimmten String möchte ich nach einem bestimmten Zeichen suchen z.B. leerzeichen, jetzt möchte ich mehrere strings erzeugen der erste vom anfang bis zum ersten leerzeichen , vom ersten leerzeichen bis zum zweiten, vom zweiten bis zum dritten usw.
Kann mir da jemand helfen ?
für Hinweise wäre ich echt dankbar!
Marco
mathias - Di 02.07.02 20:09
Titel: Re: String vereinzelln
Schau mal unter der Online-Hilfe nach Pos und Copy, mit den 2 Befehlen kommst Du schon recht weit. :D
Ice - Di 02.07.02 21:07
:P alles klar ich probiers mal !
danke
damadmax - Di 09.07.02 15:27
versuch das mal:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| function explode(s : string; ch : char; var args : tstrings): integer; var p,i : integer; begin p := 1; for i := 1 to length(s) do begin if (s[i] = ch) or (i = length(s)) then begin args.Add(copy(s,p,i-p)); p := i + 1; end; end; result := args.count; end; |
oder so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| function explode(s : string; ch : char; var args : tstrings): integer; var p : integer; begin while length(s) > 0 do begin p := pos(ch, s); if p > 0 then begin args.Add(copy(s,1,p-1)); delete(s,1,p); end else begin args.Add(s); s := ''; end; end; result := args.count; end; |
die 2. ist wohl die bessere....
du solltest vorher die stringlist erstellen und dann an die funktion übergeben.
s ist der zu durchsuchende string
ch ist der platzhalter (leerzeichen, semikolon, ...)
args die stringlist
achso: die funktion berücksichtigt nur ein trennzeichen. wenn also 5 leerzeichen aufeinander folgen, kommen auch 5 einträge in der stringlist hinzu
man könnte auch das funktionsergebnis als stringlist zurückgeben. naja wie man will halt.
Ice - Di 09.07.02 18:44
:D Alles klar ! Vielen Dank!
Marco
Visum - Mi 10.07.02 13:39
Hi, hab die gleiche Frage wegen dem Auflösen von Strings.
Leider versteh ich nicht so ganz, wie man deine Funktionen einbindet :(
Jedesmal, wenn ich versuche eine der Funktionen aufzurufen bricht er mit einem "Abstract Error" ab. Was mach ich da bitte falsch?
Muss ich als Parameter eine TStringlist angeben? Weil der hat die nicht angenommen und so hab ich eine Variable vom Typ TStrings eingesetzt.
Gruß
Visum
Tino - Mi 10.07.02 14:43
tStrings ist eine Abstakte-Klasse und man sollte nie eine Instanz davon erstellen. (schau mal in der Delphi-Hilfe unter dem Begriff
Mit Stringlisten arbeiten nach) Nehme lieber tStringList!
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| Var SL: tStringList; Begin SL := tStringList.Create;
Explode (s, ch, SL); // <- nur als Beispiel!
SL.Free; End; |
Visum - Do 11.07.02 00:35
Hi,
wenn ich das ganze mit einer tStringList mache, bringt Delphi immer nur Folgenden Fehler: "Types of actual an formal var parameters must be identical".
Wenn ich in der Funktion selbst anstelle dem tStrings ein tStringlist einsetze funktioniert alles wunderbar :D
Danke
Visum
damadmax - Fr 12.07.02 01:12
also ich binde das so ein:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| Var ZuZerlegenderString : String; Trennzeichen : Char; Liste : TStrings;
Begin ZuZerlegenderString := 'Ich bin ein zu zerlegender String'; Liste := TStringList.Create; Trennzeichen := ' '; //Leerzeichen zum Beispiel Anzahl := Explode( ZuzerlegenderString, Trennzeichen, Liste ); Liste.Free; End. |
@tino:
so stehts in der hilfe :D
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button1Click(Sender: TObject);
var TempList: TStrings; { Liste deklarieren } begin TempList := TStringList.Create; { Listenobjekt erzeugen } try { Stringliste verwenden } finally TempList.Free; { Listenobjekt freigeben } end; end; |
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!