Textdatei / Ausgabe auf TEdit

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
fifilein
Beiträge: 2
Registriert: Do 5. Aug 2010, 15:45

Textdatei / Ausgabe auf TEdit

Beitrag von fifilein »

Hi,

nach gut 15 Jahren gehts wieder zurück ans programmieren, allerdings scheinen mir meine Turbo Pascal Kentnisse aus non-IDE, non-Objects und non-Windows Zeiten nicht wirklich zu helfen.

Ich versuche gerade die ersten Schritte und hänge bereits, Tutorial von der Lazarus Homepage hat noch geklappt. Im ersten Schritt möchte ich mal Zeile für Zeile aus einer Datei einlesen und in eine Textzeile ausgeben.

das war zum test wie ich einen text ins edit1 feld hineinbekomme:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit1.Text:='Neuer Inhalt';
end;
globale variablendefinition for datei

Code: Alles auswählen

var
  Form1: TForm1;
  LeseDatei:text;
  EineZeile:string;
 
const
  Dateiname='C:\Users\fif\Documents\xyz.txt';
hauptprogramm

Code: Alles auswählen

initialization
  {$I unit1.lrs}
  assignfile(LeseDatei,Dateiname);
  reset(LeseDatei);
  readln(LeseDatei,EineZeile);
  Form1.Edit1.Text:=EineZeile;  
  closefile(LeseDatei);
end.
er kompiliert richtig, und gibt eine Fehlermeldung;
Project project1.exe raised exception class " External: SIGSEGV'. ????

wenn ich die Form1.Edit... Zeile weggebe, startet das PRogramm, und ich kann mit dem Klick auf den Button den Inhalt des Textfelder ändern. Datei/Verzeichnis passt.

Ich vermute mal, meine komplette Miss-Kentniss von Objekten und IDE führt mich auf einen total falschen weg?

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

Re: Textdatei / Ausgabe auf TEdit

Beitrag von theo »

Du schreibst den Code in die "initialization" Section.
Das ist der früheste Punkt wo Code dieser Unit ausgeführt wird. Zu dieser Zeit sind noch keine Objekte erstellt.
Mach das Ganze im Formular-Ereignis "OnCreate".

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 / Ausgabe auf TEdit

Beitrag von Teekeks »

Was du jetzt in den initialisation-Teil geschrieben hat, wird ausgeführt, bevor Form1 erzeugt wurde.
Du greifst also auf nicht vorhandenen Speicher/den falschen Speicherbereich zu.
Packe das ganze in Form1.OnCreate und es wird funktionieren.

Wenn du mit Objekt-Orientierter Programmierung nicht vertraut bist, solltest du dir dieses Wissen unbedingt aneignen.

Edit: mist, zu spät :)

fifilein
Beiträge: 2
Registriert: Do 5. Aug 2010, 15:45

Re: Textdatei / Ausgabe auf TEdit

Beitrag von fifilein »

danke euch 2en, ich hab schon befürchtet dass mein problem mit der objektorientierung zusammenhängt.

gibts denn so ne art crash-kurs was das anbelangt? ich brauch keine großartigen objektmanipulationen, ich werd mein programm altmodisch mit procedures/functions schreiben, gerade für programm aufbau und gui wäre es hilfreich.

hehe, kleine abwandlung und schon funktionierts.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
begin
  readln(LeseDatei,EineZeile);
  Edit1.Text:=EineZeile;
end;
er zeigt nächste zeile an immer wenn ich den button drücke.

jetzt beginnen natürlich die feinheiten, ich kann closefile nicht in initialisation, weil dann schließt er die datei wieder gleich zu beginn, aber das ist alles schaffbar.

dh der programm aufbau schaut folgendermaßen aus

1) intialisation - kaum was
2) das eigentliche programm mit berechnungen & allem - procedures
3) start des eigentlichen programms über buttonaufruf (auf "hauptprocedure" von 2)
4) ende des programms über anderen button mit fileclose

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

Re: Textdatei / Ausgabe auf TEdit

Beitrag von theo »

fifilein hat geschrieben: gibts denn so ne art crash-kurs was das anbelangt?
Ist zwar für Delphi, aber auf diesem Level ist das egal:
http://www.delphi-treff.de/tutorials/ob ... ammierung/" onclick="window.open(this.href);return false;
Du solltest aber Objekt-Orientiert nicht mit Ereignis-Orientiert (Windows etc.) verwechseln.
Das sind zwei versch. "Gewohnheiten" ;-)
fifilein hat geschrieben: 1) intialisation - kaum was
2) das eigentliche programm mit berechnungen & allem - procedures
3) start des eigentlichen programms über buttonaufruf (auf "hauptprocedure" von 2)
4) ende des programms über anderen button mit fileclose
In die "Initialization" solltest du nichts schreiben. Das ist nur für spezielle Fälle nötig.
Statt fileclose und Zeugs solltest du dich vllt. mit eingebauten Methoden wie TMemo.LoadFromFile anfreunden.
Auch TStringList oder TMemoryStream sind hier hilfreich.

Antworten