Textdatei lesen <- gelöst (glaub ich !D)

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Antworten
Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Textdatei lesen <- gelöst (glaub ich !D)

Beitrag von Stephanie H. »

Hi
Also ich schreib ein Konsolenprogramm in Lazarus
und ich hab da Probleme mit der Textdatei...
Also immer wenn ich den Namen der Datei eingebe,
kommt da immer ein Fenster mit das:
Project project.exe raised exception class 'RunError(2)'.
Joa und irgenwie weiß ich nicht was ich jetzt machen soll...
Also das hier ist mein Quellcode:

Code: Alles auswählen

begin
     writeln('Geben Sie bitte den Dateinamen ein: ');
     readln(filename);
     assign(workfile, filename);
     reset(workfile);                                                         //<-also ich glaub der Fehler liegt hier beim Öffnen...
     writeln('Wie viele Zeilen hat deine Datei?:');
     readln(Zeilenanzahl);
     FOR i := 0 to Zeilenanzahl do
       begin
        IF NOT eof (workfile) then
           begin
                readln (workfile, name);
                writeln(name);
           end;
       end;
Zuletzt geändert von Stephanie H. am Mo 10. Mai 2010, 19:24, insgesamt 1-mal geändert.

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Textdatei lesen

Beitrag von Teekeks »

Benutze mal Assignfile() anstatt Assign().
Das sollte den Fehler beheben.
Übrigens, wenn du immer bis zum Dateiende Lesen willst:

Code: Alles auswählen

{deine vorbereitung}
while not eof(workfile) do
begin
  readln (workfile, name);
  writeln(name);
end;
Und nochmal Übrigens:
Eine bessere Methode:

Code: Alles auswählen

var tf:TStringlist;
begin
  tf:=TStringlist.create;
  tf.LoadFromFile(filename);
{zugriff dann z.B. über:}
  Writeln(tf.strings[i]);
{zum schluss dann noch ein}
  tf.free;
end;

creed steiger
Beiträge: 958
Registriert: Mo 11. Sep 2006, 22:56

Re: Textdatei lesen

Beitrag von creed steiger »

RunError(2) ist file not found

probier das Programm evtl mal direkt aufzurufen und nicht unter Lazarus.

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Textdatei lesen

Beitrag von Stephanie H. »

funktioniert alles nicht :(
ich hab das auch schon ohne Lazarus ausprobiert
da schließt sich das Programm aber sofort
nach dem ich den Dateinamen eingegeben hab...

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Textdatei lesen

Beitrag von Teekeks »

Existiert die Datei überhaupt? weil z.B. 'asd.txt' nicht immer gefunden wird.
Unter Linux müsste das dann './asd.txt' heißen.
Also Absolute Pfade verwenden...

Achso: und, warum nimmst du nicht meinen 2. Vorschlag ?
Der sollte auf jeden Fall gehen...

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Textdatei lesen

Beitrag von Stephanie H. »

Ja weil ich ein KonsolenProgramm schreibe und nicht mit diesen TStrings und Formularen und so... :D

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Textdatei lesen

Beitrag von theo »

Wieso?
TStringList hat doch mit Formularen nichts zu tun. :roll:
Oder hat dir dein Lehrer gesagt, du darfst keine OOP verwenden?

Stephanie H.
Beiträge: 91
Registriert: Sa 6. Feb 2010, 15:58
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Textdatei lesen

Beitrag von Stephanie H. »

wir hatten OOP noch nicht :D

Teekeks
Beiträge: 359
Registriert: Mi 27. Mai 2009, 20:54
OS, Lazarus, FPC: OpenSuse11.4 x86 (Lazarus: 0.9.30 FPC 2.4.2)
CPU-Target: x86
Wohnort: Cottbus

Re: Textdatei lesen

Beitrag von Teekeks »

Na dann:
Das hier wäre OOP:

Code: Alles auswählen

ar tf:TStringlist;
begin
  tf:=TStringlist.create;
  tf.LoadFromFile(filename);
{zugriff dann z.B. über:}
  Writeln(tf.strings[i]);
{zum schluss dann noch ein}
  tf.free;
end;
Ein Tutorial zu OOP findest du hier.
Ist zwar für Delphi aber das sollte ziemlich lange noch stimmen.

(Es kann ja nicht schaden mal dem Unterricht voraus zu sein)

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Textdatei lesen

Beitrag von pluto »

Das hier wäre OOP:
Naja, die TStringList, ist recht einfach von der OOP. Du nutzt sie ja nur. Du erstellst ja jetzt keine eigenen Klassen. Wo du von anderen ableitest und soweiter.
Es kann jedoch nicht schaden, am Anfang es ohne TStringList und CO zu versuchen. Das stimmt schon.

Aber warum soll der User bei deinem Programm, die Zeilenanzahl eintragen ?
Das ist eigentlich unüblich und auch nicht Notwendig. Eine Schleife verwendest du schon. Informiere dich mal über while oder repeat. Denn eine Forschleife ist hier nicht gerade Sinnvoll.
MFG
Michael Springwald

Antworten