AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Split-Funktion in Delpi???

Ein Thema von torud · begonnen am 2. Jun 2003 · letzter Beitrag vom 13. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#1

Split-Funktion in Delpi???

  Alt 2. Jun 2003, 10:18
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
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2
  Alt 2. Jun 2003, 10: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;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
torud

Registriert seit: 26. Jul 2002
Ort: Sachsen
1.198 Beiträge
 
Delphi XE5 Professional
 
#3
  Alt 2. Jun 2003, 11:10
Hi Sakura,

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

Tom
Danke
Tom
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4
  Alt 2. Jun 2003, 11:38
Schon die Code-Library gefunden?`

http://www.delphipraxis.net/internal...hlight=explode
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Basic-Master

Registriert seit: 9. Mär 2003
Ort: Brilon
395 Beiträge
 
Delphi 2007 Enterprise
 
#5
  Alt 2. Jun 2003, 14: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;
Christian
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6
  Alt 2. Jun 2003, 14: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;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 2. Jun 2003, 15: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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#8
  Alt 2. Jun 2003, 17: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.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
FreewareFire

Registriert seit: 25. Sep 2003
51 Beiträge
 
Delphi 7 Professional
 
#9

Re: Split-Funktion in Delpi???

  Alt 25. Sep 2003, 00:36
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!
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#10

Re: Split-Funktion in Delpi???

  Alt 25. Sep 2003, 08:34
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 Uhr.
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