![]() |
Split-Funktion in Delpi???
Hallo Wissende,
ich habe eine Zeile mit Text, welche ich mit einem Trenner ($$) versehen geschrieben habe. Die Inhalte hole ich aus einem Stringgrid.(z.B. text1$$text2$$text3) Nun will ich diesen Inhalt wieder einlesen und weiss nicht genau wie!? In VBS gibt es da eine Splitfunktion, die mir dann einen Array zurück gibt. Wie macht man´s im Delphi? Danke für die Infos Unter Split habe ich leider nichts passendes gefunden. Tom |
Die Funktion musst Du Dir von Hand schreiben, ist aber nicht schwer. Nicht getestet, sollte aber funktionieren.
Delphi-Quellcode:
...:cat:...
// ein paar ansätze
type TStringArray = array of String; function Split(InStr, SplitAt: String): TStringArray; var I, L: Integer; begin SetLength(Result, 0); if InStr = '' then Exit; I := Pos(SplitAt, InStr); L := Length(SplitAt); while I > 0 do begin SetLength(Result, Succ(Length(Result))); Result[High(Result)] := Copy(InStr, 1, Pred(I)); Delete(InStr, 1, Pred(I + L)); I := Pos(SplitAt, InStr); end; end; .... var I: Integer; Strings: TStringArray; begin Strings := Split('text1$$text2$$text3', '$$'); if Length(Strings) > 0 then for I := Low(Strings) to High(Strings) do ShowMessage(Strings[I]); end; |
Hi Sakura,
vielen Dank erst einmal. Ich werde es umgehend testen und hoffe auf Erfolg. Tom |
|
ich hab schon mal son code gepostet und zwar viel kürzer:
Delphi-Quellcode:
function Split(sString, sDelimeter:String):TStringList;
var Res:TStringList; begin Res := TStringList.Create; Res.Text := StringReplace(sString, sDelimeter, #13#10, [rfIgnoreCase, rfReplaceAll]); Result := Res; Res.Free; end; |
@BasicMaster:
Ein paar Probleme:
Code:
...:cat:...
function Split(sString, sDelimeter:String):TStringList;
var Res:TStringList; begin Res := TStringList.Create; [color=#ff0000]// was ist mit bereits vorhandenen Zeilenumbrüchen, sollten diese gebraucht werden?[/color] [color=#ff0000]// string-replace gibt es erst ab D6 und ist EXTREM langsam[/color] Res.Text := StringReplace(sString, sDelimeter, #13#10, [rfIgnoreCase, rfReplaceAll]); Result := Res; [color=#ff0000]// damit ist aber auch das Ergebnis gelöscht![/color] Res.Free; end; |
Moin sakura,
StringReplace ist auch schon meinem D5 bekannt. Das mit dem #13#10 dürfte in diesem Falle auch kein Problem darstellen, da die Daten ja Zeilenweise kommen, und innerhalb eine Zeile ja schlecht ein #13#10 stehen kann. |
Okay, Delphi 5 ist akzeptiert. Zeilenweise u.U., denke man mal an die verschiedenen Arten einen Zeilenumbruch zu bringen (#10, #13#10, und #10#13) dann kann es dennoch zu Problemen führen, denke ich mal. Aber akzeptiert. ;-)
...:cat:... |
Re: Split-Funktion in Delpi???
Ok, gutes Beispiel, aber da hätte ich mal eine Frage sakura:
Wenn ich dein Beispiel ausführe zeigt er nur text1 und text2 mit ShowMessage an! text3 aber nicht! Erst wenn ich hinter dem text3 noch ein $$ einfüge erscheint auch dies. Ich habe jetzt aber eine Textdatei wie folgt: z.B. 12,45 45,78 12,34 23,6 usw. also Koordinaten - ich lese sie mit Readln aus der Datei und dann? Wenn ich deine Funktion nutze bekomme ich mit dem Delimeter nur den ersten Wert jeder Zeile! Ich brauche aber auch den zweiten! Wie geht denn das dann? DANKE! |
Re: Split-Funktion in Delpi???
Delphi-Quellcode:
function splitOutIndex(Source: String; Delimiter: String; Index: Integer): String;
var count, number: Integer; giveback: String; begin count := 1; number := 0; giveback := ''; while (count <= length(Source)) and (number <= index) do begin if copy(Source, count, length(Delimiter)) = Delimiter then begin number := number + 1; count := count + length(Delimiter); end else begin if number = Index then giveback := giveback + Source[count]; count := count + 1; end; end; result := giveback; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz