Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi document laden (https://www.delphipraxis.net/83686-document-laden.html)

NoobBoob 5. Jan 2007 21:40


document laden
 
hi leute ,
weiß einer vielleicht , wie ich ein document laden kann (textdocument) wo z.b. drinne steht:

aaaa:dddd
gggg:ssss
rrrr:vvvv


der soll das dann in 2 arrays speichern

das vor dem doppelpunkt in der einen das nach dem doppelpunkt in anderem array

z.b.
aaaa:dddd aaaa im array wort1 an stelle 1 : wort1[1] , und dddd in der array wort2 und auch stelle 1 : wort2[1]
gggg:ssss gggg dann : wort1[2] und ssss dann : wort2[2] weiß das jemand?

bitte um schnelle hilfe :P


Mfg NoobBoob

MrKnogge 5. Jan 2007 21:46

Re: document laden
 
Schau dir mal den Befehl
Delphi-Quellcode:
pos
an, mit seiner Hilfe kannst du nach zeichen oder Zeichenketten suchen.

NoobBoob 5. Jan 2007 21:50

Re: document laden
 
was bringt das? ^^
also wie soll das mir weiterhelfen?

MrKnogge 5. Jan 2007 21:54

Re: document laden
 
Du suchst in jeder Zeile nach deinem Doppelpunkt, pos gibt dir dann die Position des Doppelpunktes zurück. Alles was vor dieser Position ist, packst du ins erste Array, den Teil danach in dein 2. Array.

NoobBoob 5. Jan 2007 21:55

Re: document laden
 
ja aber wie geht das?

dominikkv 5. Jan 2007 22:40

Re: document laden
 
so vllt...
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   f: TextFile;
   temp: string;
   n: Integer;
   s1, s2: array of string;
begin
n := 1;
setLength(s1, 1);
setLength(s2, 1);

AssignFile(f, 'C:\Test.txt');
Reset(f);
while not EOF(F) do
  begin
    ReadLN(f, temp);
    setLength(s1, length(s1)+1);
    setLength(s2, length(s2)+1);
    s1[n] := copy(temp, 1, Pos(':', temp)-1);
    s2[n] := copy(temp, Pos(':', temp)+1, length(temp)-Pos(':', temp));
    inc(n);
  end;
CloseFile(f);
end;

Klaus01 6. Jan 2007 10:07

Re: document laden
 
Guten Morgen,

und noch eine Variante:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  liste: TStringList;
  liste2: TStringList;
  Array1: array [0..5] of String;
  Array2: array [0..5] of string;
  i,j:Byte;
begin
   liste := TStringList.create;
   liste2 := TStringlist.create;
   liste2.Delimiter:=':';
   liste.LoadFromFile('d:\test.dat'); //enthält den ganzen Text
   liste2.DelimitedText:=liste.Text; // enthält pro Zeile einen Teil des Textes
 
   // den Teil kann man sicherlich noch eleganter lösen
   i:=0;
   j:=0;
   while i <= liste2.Count-1 do
     begin
       Array1[j]:=liste2.strings[i];
       Array2[j]:= liste2.strings[i+1];
       j:=j+1;
       i:=i+2;
     end;

   // Ausgabe in ein Memo
   for i:=0 to high(array1) do
     memo1.Lines.add(array1[i]);

   liste.Free;
   liste2.Free;
end;
einen Nachteil hat das Verfahren, in den Texten dürfen keine Leerzeichen enthalten sein.
aaaaa:bbbbb das geht
aa aa:bbbbb das geht in die Hose
Leerzeichen sind in dem Falle durch ein anderes Zeichen zu ersetzen.

Grüße
Klaus

marabu 6. Jan 2007 13:25

Re: document laden
 
Hallo,

ich hätte auch noch eine Alternative: Statt Delimiter die Eigenschaft NameValueSeparator strapazieren. Dann kann man auf die einzelnen Werte so zugreifen, als ob sie in zwei Arrays gespeichert wären. Sie sind aber nur in einer StringList gespeichert:

Delphi-Quellcode:
procedure LoadNamedValues(s: TStrings; fn: TFileName);
var
  i: Integer;
begin
  s.LoadFromFile(fn);
  s.NameValueSeparator := ':';
  for i := 0 to Pred(s.Count) do
    ShowMessage(Format('%d: %s <-> %s', [s.Names[i], s.ValueFromIndex[i]]));
end;
Grüße vom marabu


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