Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Text aus .txt auslesen (https://www.delphipraxis.net/182154-text-aus-txt-auslesen.html)

Iscye 5. Okt 2014 13:58

Delphi-Version: 6

Text aus .txt auslesen
 
Hallo

ich habe eine Problem beim auslesen eines Textes. Wenn ich den Text im Moment auslese wird dabei die erste Zeile ausgelesen dann die Zweite. Dabei wird aber die Zweite über die Erste überschrieben. Am Ende wird trotzdem nichts in meinem Label angezeigt. Das muss ich irgendwie umgehen sodass der komplette Text zum Schluss in mein Array gespeichert werden kann und ich dieser dann später in einem Label angezeigt wird.


Auslesen:
Code:
Assignfile(RB, 'Raumschiff_bewegen.txt');
  Reset(RB);
  while not eof(RB) do
  begin
    readLn(RB, RaumschiffBewegen);
  end;
  closefile(RB);
Kompletter Code bisher (sehr viel ausgeklammert):

Code:
Const Anzahl_Text = 5;

Type tTextArray = Array [1..Anzahl_Text]of string;

VAR AktText:Integer;
    TextArray: tTextArray;
    Einleitung : string;
    RaumschiffBewegen : string;
    RohstoffeVerladen : string;
    FighterHerstellen : string;
    FightModus : string;


procedure THilfeForm.FormCreate(Sender: TObject);
VAR
  E : Textfile;
  RB : Textfile;
  RV : Textfile;
  FH : Textfile;
  FM : Textfile;
begin
   //Initialisierung Texte
  TextArray[1] := 'Um ein neues Spiel zu starten klickt man auf Neu (im Moment nur diese Option möglich';
  TextArray[2] := RaumschiffBewegen;
  TextArray[3] := 'wafafwatagRohstoffeVerladen';
  TextArray[4] := 'sfaksfadagFighterHerstellen';
  TextArray[5] := 'sfdagkagdjkgdjFightModus';

  AktText := 1;
  TextLabel.Visible := true;
  TextLabel.Caption := ' ';
  TextLabel.Caption := TextArray[AktText];
  VorButton.visible := true;
  ZurueckButton.Visible := false;

  {Assignfile(E, 'Einleitung.txt');
  Reset(E);
  while not eof(E) do
  begin
    readLn(E,Einleitung);
  end;
  closefile(E);
  TextLabel.Caption :=Einleitung; }

  Assignfile(RB, 'Raumschiff_bewegen.txt');
  Reset(RB);
  while not eof(RB) do
  begin
    readLn(RB, RaumschiffBewegen);
  end;
  closefile(RB);

  {Assignfile(RV, 'Rohstoffe_verladen.txt');
  Reset(RV);
  while not eof(RV) do
  begin
    readLn(RV, RohstoffeVerladen);
  end;
  closefile(RV);

  Assignfile(FH, 'Fighter_herstellen.txt');
  Reset(FH);
  while not eof(FH) do
  begin
    readLn(FH, FighterHerstellen);
  end;
  closefile(FH);

  Assignfile(FM, 'Fight_Modus.txt');
  Reset(FM);
  while not eof(FM) do
  begin
    readLn(FM, FightModus);
  end;
  closefile(FM); }
end;

procedure THilfeForm.VorButtonClick(Sender: TObject);

begin
  if aktText = 5 then
    ZurueckButton.Visible := true
  else
  begin
    aktText := aktText + 1;
  TextLabel.Caption := TextArray[aktText];
  TextLabel.Visible := true;
  end;
end;

procedure THilfeForm.ZurueckButtonClick(Sender: TObject);
{VAR
  TextArray:tTextArray;
  i : Integer;}
begin
  {aktText := aktText - 1;
  TextLabel.Caption := ' ';
  i := aktText;
  TextLabel.Caption := TextLabel.Caption + TextArray[i];}
end;

himitsu 5. Okt 2014 14:10

AW: Text aus .txt auslesen
 
Delphi-Quellcode:
S := 'abc';
S := 'def';
if S = 'abcdef' then
Was muß man wohl machen, damit hier in der Variable am Ende alles drin steh?


Wieso gibt es da so viele globale Variablen?

Und warum so viele Textfile-Variablen, wenn die alle nur nacheinander verwendet werden und eine Einzige somit reichen würde?

Iscye 5. Okt 2014 14:58

AW: Text aus .txt auslesen
 
Sorry ich arbeite noch nicht so lange mit Delphi.

Und ich hab die ganzen Variablen noch nicht zusammengefasst, da es für mich persönlich so erstmal übersichtlicher ist.

Bjoerk 5. Okt 2014 16:28

AW: Text aus .txt auslesen
 
Für sowas gibt's auch die TStringList class:

Beispiel:

Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  SL: TStringList;
  FileName: string;
begin
  FileName := ExtractFilePath(ParamStr(0)) + 'Raumschiff_bewegen.txt';
  SL := TStringList.Create;
  try
    if FileExists(FileName) then
      SL.LoadFromFile(FileName); // StringList aus Datei laden;
    Memo1.Lines.Assign(SL); // Z.B. Ganze Datei in ein Memo laden;
    Label1.Caption := SL.Text; // Z.B. Ganze Datei als string in ein Label laden;
    if SL.Count > 0 then
      ShowMessage(SL[0]); // Die erste Zeile anzeigen;
  finally
    SL.Free;
  end;
end;

procedure TForm2.Button2Click(Sender: TObject);
var
  SL: TStringList;
  FileName: string;
begin
  FileName := ExtractFilePath(ParamStr(0)) + 'Raumschiff_bewegen_Neu.txt';
  SL := TStringList.Create;
  try
    SL.AddStrings(Memo1.Lines); // Z.B. Ganzen MemoText der StringList hinuzügen;
    SL.Add(Label1.Caption); // Z.B. Label.Caption der StringList hinuzügen;
    SL.Add('I like TStringList.'); // Eine weitere Zeile anhängen;
    SL.SaveToFile(FileName); // StringList in Datei speichern;
  finally
    SL.Free;
  end;
end;

himitsu 5. Okt 2014 20:18

AW: Text aus .txt auslesen
 
Die TStringList ist natürlich beim Auslesen einer kompletten Datei und gleichzeitigem Zerlegen in einzelne Zeilen von Vorteil.

Aber das Grundproblem ist dennoch eine andere Stelle.
Wenn man mehrere Textstrücke zu einer Variable zusammensetzen will, dann sollte man das auch "zusammensetzen" und nicht jedesmal "überschreiben"!

TStringList.Text macht das intern ja auch und setzt alle Zeilen zu einem String zusammen. :stupid:


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