Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delimiter Textfile (https://www.delphipraxis.net/153740-delimiter-textfile.html)

keine_ahnung 14. Aug 2010 12:01

Delimiter Textfile
 
Grüß euch herzlich...
versuche verzweifelt aus einer Textdatei die folgendermaßen aufgebaut ist:
Code:
1;12
10;100
1;12
2;51
die erste Zahl bis zum Semikolon in ein Memofeld 1 und die 2 Zahl nach dem Semikolon in Memofeld 2 zuschreiben.
Bei der ersten Zeile hab ich kein problem...
Hier der Code
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
  var
  Datei : TStringList;
  TextZeile0, textzeile1 : string;
  i,y:integer;
begin
    i:=0;
    y:=1;
    Datei := TStringList.Create;
    try
      OpenDialog1.Execute;
      Datei.LoadFromFile(OpenDialog1.FileName);
      Datei.Delimiter := ';';
      Datei.DelimitedText := Datei.text;
      label1.Caption:=inttostr(Datei.count);
      TextZeile0:=Datei[i];
      TextZeile1:=Datei[y];
      Memo1.Lines.Add(TextZeile0);
      Memo2.Lines.Add(TextZeile1);
   finally
   Datei.Free;
  end;
end;
könnte mir jemand helfen, wie ich eine Schleife konstruiere kann, damit ich die ganze Textdatei abarbeiten kann.
Besten Dank im voraus.
chris

Der.Kaktus 14. Aug 2010 12:04

AW: Delimiter Textfile
 
Delphi-Quellcode:
for i:=0 to Datei.count-1 do
         Memo1.Lines.Add(Datei.Strings[i]);
        ......

DeddyH 14. Aug 2010 12:14

AW: Delimiter Textfile
 
Kaki, da fehlt aber eine Kleinigkeit ;)
Delphi-Quellcode:
for i := 0 to Datei.Count - 1 do
  if Odd(i) then
    Memo2.Lines.Add(Datei[i])
  else
    Memo1.Lines.Add(Datei[i]);
Oder auch
Delphi-Quellcode:
var Memo: TMemo;
...
for i := 0 to Datei.Count - 1 do
  begin
    if Odd(i) then
      Memo := Memo2
    else
      Memo := Memo1;
    Memo.Lines.Add(Datei[i]);
  end;
Ungetestet

simmi 14. Aug 2010 12:20

AW: Delimiter Textfile
 
Ist zwar recht einfach gestrickt, funktioniert aber völlig Problemlos. Sofern, das 3. Memofeld nicht stört...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, j : word;
    s   : string;
begin
memo3.Lines.LoadFromFile('datei.txt');
for i:=0 to memo3.Lines.Count-1 do
  begin
    s:=memo3.Lines[i];
    j:=pos(';',s);
    memo1.Lines.Add(copy(s,1,j-1));
    delete(s,j,length(s)-j);
    memo2.Lines.Add(s);
  end;
end;

keine_ahnung 14. Aug 2010 12:30

AW: Delimiter Textfile
 
Ich danke Euch für die schnelle Antwort...
stand irgendwie auf der Leitung....
chris

Net7 14. Aug 2010 12:41

AW: Delimiter Textfile
 
Hallo,

hier mal eine Funktion aus meiner Funktionskiste. Ich danke dem Autor der mich mit seiner Orginalfunktion inspirierte, leider ist dieser mir unbekannt.

Delphi-Quellcode:
{-------------------------------------------------------------------------------
  Procedure: splitOutIndex
  DateTime: 2009.05.20
  Arguments: const Source: String; const Delimiter: String; Index: Integer
  Result:   String
  Aufgabe:  Funktion zum heraussplitten eines einzelnen Indexes
  Aufrufbeispiel:
                 var
                 LZumZerlegen: String;
                   begin
                        LZumZerlegen := 'Text1|Text2|Text3';
                        ShowMessage(SplitOutIndex(LZumZerlegen, '|', 1)); //Zeigt "Text2"
                   end;
-------------------------------------------------------------------------------}

function splitOutIndex(const Source: string; const Delimiter: string; Index: Integer): string;
var
  Lcount, Lnumber, LSourceLength, LDelLength, LStart, LEnd: Integer;
begin
  LCount := 1;
  Lnumber := 0;
  if Index = 0 then LStart := 1 else LStart := 0;
  LEnd := 0;
  result := '';
  LSourceLength := length(Source);
  LDelLength := length(Delimiter);
  while (LCount <= LSourceLength) and (LEnd = 0) do
    begin
      if copy(Source, LCount, LDelLength) = Delimiter then
        begin
          inc(LNumber);
          if LNumber >= Index then
            begin
              if LStart = 0 then
                LStart := LCount + LDelLength
              else
                begin
                  LEnd := LCount;
                  result := copy(Source, LStart, LEnd - LStart);
                end;
            end;
          Lcount := Lcount + LDelLength;
        end else inc(LCount);
    end;
  if (LStart > 0) and (LEnd = 0) then
    result := copy(Source, LStart, LSourceLength - LStart + 1);
end;
Mfg Marko


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:24 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