Entwickler-Ecke

Dateizugriff - String lesen/verarbeiten/speichern


Max Payne - Do 14.07.05 16:50
Titel: String lesen/verarbeiten/speichern
Hi
Mein erstes Topic :wave:

Also ich hab Ferien und langeweile also hab ich mir vorgenommen eine Art Editor (z.B. Szenarioeditor) für ein Spiel zu schreiben. Dazu muss ich aus einer Datei lesen. Das Format ist:
Gebietsnummer;Name;bla;...;bla;X
Gebietsnummer;Name;bla;...;bla;X usw
Wie man sieht immer mit ";" als Trennzeichen und "X" als zeilenende. Ich will nun den Namen und die Nummer laden und da irgendetwas mit machen z.B. in ein Memofeld schreiben (ich bin mir noch nicht sicher was und wie überhaupt das ganze aussehen soll).

Das hab ich mir bisher gedacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.FormCreate(Sender: TObject);
var
   F1: Textfile;
   V1: Char;
   Test: String;
begin
 Test := '';
 AssignFile(F1, 'D:\Test.txt');
 ReSet(F1);
 while not Eof(F1) do
 begin
  Read(F1, V1);
  if V1 = ';' then
  begin
   if Test <> '' then Memo1.Lines.Add(Test);
   Test := '';
  end
  else Test := Test + V1;
 end;
 Form1.Caption := Test;
end;


Funktioniert auch soweit, nur lese ich halt alle Felderund wie gesagt will ich nur die ersten beiden haben. Weiß jemand Rat?

Vielen Dank.


ScorpionKing - Do 14.07.05 16:54

Mach doch folgendes:


Delphi-Quelltext
1:
neu := copy(s,0,5);                    


neu ist der neue String, s der alte Inhalt, 0 der Index, und 5 die Anzahl der Zeichen, die du kopieren willst!


Max Payne - Do 14.07.05 17:05

Copy kenn ich aber mir ist nicht ganz klar wie ich das einsetzen soll...

Ich gehe mal davon aus du hast das Problem nicht richtig verstanden (sorry falls dem nicht so ist und ich nur zu blöd bin).

Also auszug aus der Datei:

PROV18;Calais;Calais;Calais;Calais;Calais;Calais;;;;;X
PROV19;London;London;London;London;London;London;;;;;X
PROV20;Dover;Dover;Dover;Dover;Dover;Dover;;;;;X

Ich will jetzt die Datei so lesen das im Memofeld steht:

PROV18
Calais
PROV19
London
PROV20
Dover

Also nur die ersten beiden Daten.


retnyg - Do 14.07.05 17:07

dafür gibts die schöne prozedur explode, die dir den string in ein array aufspaltet (; als trenner)

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:
function Explode(text: string; seperator: Char): tarray;
var 
  s: string
  m: Integer; 
  c: Char; 
begin
  Result := nil
  s := ''
  for m := 1 to Length(text) do 
  begin
    c := text[m]; 
    if c = seperator then 
    begin 
      SetLength(Result, Length(Result) + 1);
      Result[Length(Result) - 1] := s;
      s := ''
    end 
    else 
      s := s + c; 
  end;
  if s <> '' then 
  begin 
    SetLength(Result, Length(Result) + 1); 
    Result[Length(Result) - 1] := s; 
  end
end;

anwendung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type tarray = array of string;
var t: tarray;
begin
  t:=explode('bla;blubb',';');
  showmessage(t[0]);
end;


Max Payne - Do 14.07.05 18:11

Danke retnyg

Auch wenn ich nicht im Stande war die funktion und den Typ so einzubinden habe ich mir das Prinzip abgeschaut und so hingebastelt das es für mich passt. :wink: