Autor Beitrag
DaKrissX84
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Do 13.03.03 22:48 
Hallo!

Mein Programm soll ein array (of string) mit einzelnen Wörtern füllen.

Die Wörter befinden sich in einer Textdatei (C:\Beispiel.txt) getrennt durch ein ';'. Damit das Programm erkennt, dass es keine weiteren Wörter mehr ins Array schreiben soll, ist ein ']' am Ende der "Wörerkette".

Es sollen also einzelne Wörter erkannt und Stück für Stück in das Array geschrieben werden.

Hat jemand ne bessere Idee als das?:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
str1 := TStringlist.Create;
  str1.Loadfromfile('C:\Beispiel.txt');
  inhalt := str1.text;
  str1.free;
//Um die Textdatei auszulesen

repeat
    
    i := 0;
        repeat
                begin
                wort := wort+inhalt[p];
                p:= p+1;
                i:= i+1;
                end
        until
        wort[i] = ';';

   delete(wort,length(wort),1);
   a := a+1;
   Array[a] := wort;

until
inhalt[p] = ']';

Hoffe, man versteht was ich meine....

Noch ein Problem:
Wenn ich den obigen Code benutze, dann wird das Array an manchen stellen mit ' ' (also quazi nix) gefüllt. Das liegt irgendwie am Zeielenumbruch in der Textdatei... Kann man das auch noch irgendwie verhindern?

Dank im Voraus!
mars
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 238

Debian Woody, Win 2000, Win XP
D7 Ent, Kylix 3
BeitragVerfasst: Do 13.03.03 23:20 
Ich würde allgemein mit einer TStringList weiterarbeiten (statt dem Array). Sonst weiss ich auch nicht viel zu verbessern, ist ein dummes Format (Ich hoffe nicht, dass du diese Datei selber erstellt hast!! :wink: )
DaKrissX84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 20



BeitragVerfasst: Fr 14.03.03 10:52 
Hi!

Ich habe die Datei schon selbst erstellt...

1.Frage:
Wie kann man das denn sonst machen, als die Wörter durch irgendein bestimmtes Zeichen, z.B. ';' zu trennen??

2. Frage:
Wie arbeitet man mit Stringlists?
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 14.03.03 11:45 
Wie so ist das ein dummes Format? Das ist eine ganz normale CSV-Datei mit Semikola als Trennzeichen.

Mit der Methode CommaText von TStringlist bekommst du es relativ einfach in eine Stringliste.

Willst du es in ein Array schreiben versuch mal das:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
{-----------------------------------------------------------------------------
  Procedure : Explode
  Purpose   : Seperates a CSV-line
  Arguments : const Separator, S: string; Limit: Integer = 0
  Result    : TStringDynArray
-----------------------------------------------------------------------------}

type
  TStringDynArray = array of string;

function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = ''or (Limit < 0then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := StrPos(P, PChar(Separator));
    if (P = nilor ((Limit > 0and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5); // mehrere auf einmal um schneller arbeiten zu können
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index); // wirkliche Länge festlegen
end;