Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Split-Funktion in Delpi??? (https://www.delphipraxis.net/5332-split-funktion-delpi.html)

torud 2. Jun 2003 09:18


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

sakura 2. Jun 2003 09:33

Die Funktion musst Du Dir von Hand schreiben, ist aber nicht schwer. Nicht getestet, sollte aber funktionieren.
Delphi-Quellcode:
// 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;
...:cat:...

torud 2. Jun 2003 10:10

Hi Sakura,

vielen Dank erst einmal. Ich werde es umgehend testen und hoffe auf Erfolg.

Tom

Luckie 2. Jun 2003 10:38

Schon die Code-Library gefunden?`

http://www.delphipraxis.net/internal...hlight=explode

Basic-Master 2. Jun 2003 13:09

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;

sakura 2. Jun 2003 13:45

@BasicMaster:
Ein paar Probleme:

Code:
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;
...:cat:...

Christian Seehase 2. Jun 2003 14:16

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.

sakura 2. Jun 2003 16:25

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:...

FreewareFire 24. Sep 2003 23:36

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!

SirThornberry 25. Sep 2003 07:34

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 23:18 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz