Write- & Readln nur in Console Mode möglich?

Für Fragen von Einsteigern und Programmieranfängern...
Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Marc »

Hallo Mathias

Wollte das Thema schon abhaken. :-)
Im Anhang ist so ein Versuch.

Aber es klemmt schon bei 'Assign (Datei, 'daten.dat');
Was meinst Du denn wie es sein müsste?
Das ist ein einfaches Beispiel das ich einfach einkopiert habe.
Habe nur die Unit 'crt' ans richtige Ort verschoben.
Dateianhänge
Records with writeln.zip
(127.19 KiB) 50-mal heruntergeladen
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Mathias »

Aber es klemmt schon bei 'Assign (Datei, 'daten.dat');

Da hast du recht, das wurde bei FPC und Delphi geändert, da Assign für andere Zwecke gebraucht werden.

So lässt es sich kompilieren.

Code: Alles auswählen

  AssignFile(Datei, 'daten.dat');
  {$I-}
  Reset(Datei);   (* Datei zum Lesen oeffnen; die Compilerdirektive verhindert Fehlermeldungen *)
  Read(Datei, Datensatz)(* die gesamte Struktur einlesen *)
  CloseFile(Datei);   



Da hast du ein super Tutorial erwischt, von diesem würde ich die Finger lassen.
Bei "file of" stellt man ein f davor.
Da wird nicht mal gezeigt, wie man einen Type richtig deklariert.

Dies hat einen grossen Vorteil, wen man eine Quell-Code lesen will. :wink:

Richtig sieht dies so aus:

Code: Alles auswählen

type
  TDaten = record
    Name: string[50];
    Adresse: string[255];
    Telefonnummer: string[15];
  end;
 
  TGesamte_Daten = array [1..100] of TDaten;
 
var
  Datensatz: TGesamte_Daten;
  i: Integer; // ist besser al 1..100, somit kannst du 4'000'000'000 Datensätze speichern.
  fDatensatz: file of TGesamte_Daten; 


Das schlimmste, du hast GUI und Konsole gemischt.

Um dies zu verhindern, macht unter Lazarus "Datei neu.../Einfaches Programm", somit bist du das ganze GUI-Zeugs los.

Ich möchte nacher auch das mein Code auch auf Linux läuft, desshalb lasse ich das mal mit AllocConsole.

Dies klappt auch unter Linux, da geht dies mit GUI32 nicht, aber es gibt auch eine Lösung.

Wen etwas nicht klappt, einfach weiter Fragen. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Marc »

Hallo Mathias

Ja so klappt das. :-) Ein Held Du bist!

Das ist nur irgend ein Code den ich ausprobieren wollte.
Er verwendet 'writeln' zum schreiben in eine Datei.
Das ist im Moment alles was ich testen will.

Ich will ja nur GUI verwenden. Da mach ich was mit einem button und füge den Pascal code ein.

Ist ja nur mal zum testen. Klar gibt es da viel bessere Methoden Files zu lesen.
Da komm ich hoffentlich später noch dazu. Die ersten Brötchen sind noch klein. :-)
Jetzt habe ich was zum Experimentieren.

Vielen Dank dafür!!
Good code comes from experience, experience comes from bad code.

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von itjump »

So fangen alle mal an. Mein ehemaliger bester Freund ist allerdings aus dieser Phase niemals rausgekommen. Er meint zwar, er könne Programmieren, aber das was er kann ist ein Witz. Was ich damit sagen will: "Du kannst niemals Programmieren, aber du kannst es Versuchen, dann wirst du besser!". Programmieren lernen ist ein endloser Prozess, niemand kann alles schaffen, was ich persönlich sehr Schade finde.

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von compmgmt »

Zu mir meinte auch mal einer er könne viel und ich könne nix außer Hello-World, mittweile realisiere ich große Projekte auf TCP-Server-Client Basis ^^.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von itjump »

compmgmt hat geschrieben:Zu mir meinte auch mal einer er könne viel und ich könne nix außer Hello-World, mittweile realisiere ich große Projekte auf TCP-Server-Client Basis ^^.

Würde ich gerne mal sehen :D

compmgmt
Beiträge: 351
Registriert: Mi 25. Nov 2015, 17:06
OS, Lazarus, FPC: Win 10 Pro | Lazarus 1.8.2 | FPC 3.0.4
CPU-Target: i386 + x86_64
Wohnort: in der Nähe von Stuttgart
Kontaktdaten:

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von compmgmt »

itjump hat geschrieben:
compmgmt hat geschrieben:Zu mir meinte auch mal einer er könne viel und ich könne nix außer Hello-World, mittweile realisiere ich große Projekte auf TCP-Server-Client Basis ^^.

Würde ich gerne mal sehen :D

Ich arbeite aktuell an einer Steuerungssoftware für die "ECoS" ("ESU Command Station", ist eine Modellbahnsteuerung) mit lnet. Ich muss nochmal schauen, wie das mit dem Veröffentlichen ist, da lnet unter der modified LGPL steht.

Code: Alles auswählen

InitiateSystemShutdownExA(nil, nil, 0, true, false, $0005000F);
Have fun with this snippet ;)

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Marc »

itjump hat geschrieben:So fangen alle mal an. Mein ehemaliger bester Freund ist allerdings aus dieser Phase niemals rausgekommen. Er meint zwar, er könne Programmieren, aber das was er kann ist ein Witz. Was ich damit sagen will: "Du kannst niemals Programmieren, aber du kannst es Versuchen, dann wirst du besser!". Programmieren lernen ist ein endloser Prozess, niemand kann alles schaffen, was ich persönlich sehr Schade finde.


Ich hoffe er ist nicht deswegen ein ehemaliger Freund? Wenn er das Berufsmässig macht, und trotzdem viel verdient ist ja alles bestens. :-)

Bin der Meinung, man sollte zuerst mit etwas sehr sehr einfachem anfangen. Mann sieht es läuft. Kann ein bisschen experimentieren und versteht vieleicht was da passiert.
Hauptsache man hat Freude daran, und kommt eventuell sogar an sein Ziel. Die einen lernen schneller als die anderen. Es gibt sicher auch etwas was dein ehemaliger Freund viel besser kann als Du. ;-)
Ich meine, wie Du auch, man kann es versuchen, es braucht ja nicht jeder ein Profi werden.
Pascal / Lazarus ist meiner Meinung nach hervorraged um Programmieren zu lernen.
Und für meine Projekte auf jeden Fall ausreichend.
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Mathias »

Er verwendet 'writeln' zum schreiben in eine Datei.

Dies ist falsch, er verwendet nur Write. WriteLn wird nur bei Text-Dateien gebraucht.
Und die Konsole ist vergleichbar mit mit Textdateien.

Diese beiden Zeilen machen das selbe:

Code: Alles auswählen

  Write('Hello World' + LineEnding);
  WriteLn('Hello World');   


Ist ja nur mal zum testen. Klar gibt es da viel bessere Methoden Files zu lesen.

Schlecht ist diese Methode nicht, sie ist nur sehr alt.

Da sieht man sehr gut was passiert.

Code: Alles auswählen

program Project1;
 
type
  TAdresse = record
    Name, Vorname: string[20];
    Plz: integer;
    Strasse, Ort: string[20]
  end;
 
var
  saveAdresse, loadAdress: TAdresse;
  fAdresse: file of TAdresse;
 
begin
  // Inizialisieren
 
  with saveAdresse do begin
    Name := 'Hugentobler';
    Vorname := 'Hans';
    Plz := 3000;
    Strasse:='Bahnhofst. 123';
    Ort := 'Bern';
  end;
 
  // Speichern
 
  AssignFile(fAdresse, 'adresse.dat');
  Rewrite(fAdresse);
  Write(fAdresse, saveAdresse);
  CloseFile(fAdresse);
 
  // Laden
 
  AssignFile(fAdresse, 'adresse.dat');
  Reset(fAdresse);
  Read(fAdresse, loadAdress);
  CloseFile(fAdresse);
 
  // Ausgabe
 
  with loadAdress do begin
    WriteLn(Name + ' ' + Vorname);
    WriteLn(Strasse);
    WriteLn(Plz, ' ' + Ort);
  end;
 
end.


So fangen alle mal an. Mein ehemaliger bester Freund ist allerdings aus dieser Phase niemals rausgekommen. Er meint zwar, er könne Programmieren, aber das was er kann ist ein Witz.
Ich denke mal unter DOS war dies einfacher, man konnte vieles mit Read und Write machen und lernte verstehen was der PC machte. Mit den GUIs wurde vieles undurchsichtiger.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Mathias »

Pascal / Lazarus ist meiner Meinung nach hervorraged um Programmieren zu lernen.
Und für meine Projekte auf jeden Fall ausreichend.

Nicht nur für Anfänger, man kann sogar richtige Profi-Software damit entwickeln. Man bedenke Lazarus selbst ist auch mit Lazarus entwickelt. :wink:
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von itjump »

Mathias hat geschrieben:
Er verwendet 'writeln' zum schreiben in eine Datei.

Dies ist falsch, er verwendet nur Write. WriteLn wird nur bei Text-Dateien gebraucht.

Diese beiden Zeilen machen das selbe:

Code: Alles auswählen

  Write('Hello World' + LineEnding);
  WriteLn('Hello World');   


Ist ja nur mal zum testen. Klar gibt es da viel bessere Methoden Files zu lesen.

Schlecht ist diese Methode nicht, sie ist nur sehr alt.

Da sieht man sehr gut was passiert.

Code: Alles auswählen

program Project1;
 
type
  TAdresse = record
    Name, Vorname: string[20];
    Plz: integer;
    Strasse, Ort: string[20]
  end;
 
var
  saveAdresse, loadAdress: TAdresse;
  fAdresse: file of TAdresse;
 
begin
  // Inizialisieren
 
  with saveAdresse do begin
    Name := 'Hugentobler';
    Vorname := 'Hans';
    Plz := 3000;
    Strasse:='Bahnhofst. 123';
    Ort := 'Bern';
  end;
 
  // Speichern
 
  AssignFile(fAdresse, 'adresse.dat');
  Rewrite(fAdresse);
  Write(fAdresse, saveAdresse);
  CloseFile(fAdresse);
 
  // Laden
 
  AssignFile(fAdresse, 'adresse.dat');
  Reset(fAdresse);
  Read(fAdresse, loadAdress);
  CloseFile(fAdresse);
 
  // Ausgabe
 
  with loadAdress do begin
    WriteLn(Name + ' ' + Vorname);
    WriteLn(Strasse);
    WriteLn(Plz, ' ' + Ort);
  end;
 
end.


So fangen alle mal an. Mein ehemaliger bester Freund ist allerdings aus dieser Phase niemals rausgekommen. Er meint zwar, er könne Programmieren, aber das was er kann ist ein Witz.
Ich denke mal unter DOS war dies einfacher, man konnte vieles mit Read und Write machen und lernte verstehen was der PC machte. Mit den GUIs wurde vieles undurchsichtiger.

Deshalb mache ich auch lieber etwas mit CLI Anwendungen. Die sind in der Regel gut Dokumentiert für viele Dinge schlicht besser geeignet. Brauche ich eine GUI, kann ich mir ja immer noch schnell eine mit GTK+ dazu basteln :D

itjump
Beiträge: 179
Registriert: Do 13. Okt 2016, 18:35
Wohnort: Winnenden

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von itjump »

Marc hat geschrieben:
itjump hat geschrieben:So fangen alle mal an. Mein ehemaliger bester Freund ist allerdings aus dieser Phase niemals rausgekommen. Er meint zwar, er könne Programmieren, aber das was er kann ist ein Witz. Was ich damit sagen will: "Du kannst niemals Programmieren, aber du kannst es Versuchen, dann wirst du besser!". Programmieren lernen ist ein endloser Prozess, niemand kann alles schaffen, was ich persönlich sehr Schade finde.


Ich hoffe er ist nicht deswegen ein ehemaliger Freund? Wenn er das Berufsmässig macht, und trotzdem viel verdient ist ja alles bestens. :-)

Bin der Meinung, man sollte zuerst mit etwas sehr sehr einfachem anfangen. Mann sieht es läuft. Kann ein bisschen experimentieren und versteht vieleicht was da passiert.
Hauptsache man hat Freude daran, und kommt eventuell sogar an sein Ziel. Die einen lernen schneller als die anderen. Es gibt sicher auch etwas was dein ehemaliger Freund viel besser kann als Du. ;-)
Ich meine, wie Du auch, man kann es versuchen, es braucht ja nicht jeder ein Profi werden.
Pascal / Lazarus ist meiner Meinung nach hervorraged um Programmieren zu lernen.
Und für meine Projekte auf jeden Fall ausreichend.

Nein, der Grund war ein anderer :D und Beruflich macht der das auch nicht, dazu hat er auch zu wenig Kenntnisse, was leider auf mich auch Zutrifft. Er meinte halt, er könne was, nur weil sein Vater Diplom-Informatiker ist, was natürlich nicht Richtig ist. Ich bin Asperger Autist, und muss trotzdem hart an mir Arbeiten, um etwas beim Programmieren zu lernen :D . Ich lerne vielleicht um einiges schneller bei diesen Themen, als Menschen ohne Autismus, jedoch habe ich dadurch Teilweiße Motivationsprobleme, weil ich mich an niemanden messen kann, zumindest nicht in diesem Thema. Mein ehemaliger bester Freund kahm nur leider nicht mehr mit mir klar, weil ich leider bestimmte Dinge nicht selbst erkennen konnte, wodurch ich der Meinung war, es sei alles OK. Er wusste das, hat mich aber nicht Akzeptiert. Naja, so kann man sich in Menschen täuschen :D
Ja, ich versuche halt immer näher an die Hardware ranzukommen, mit HEX und Assembler funktioniert das auch super, allerdings sehe ich andere Sprachen, die Ähnliche Dinge schaffen und mir dabei eine Menge Arbeit abnehmen, z.B C/C++ oder auch Pascal. Man lässt sich halt am Anfang noch Recht gut ablenken, wodurch man aber meiner Meinung nach am meisten lernt, wenn man dadurch z.B. dann Spontan mal eben 6-7 Programmiersprachen parallel lernt :D

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Marc »

Die Methode ist uralt. Pascal zu DOS Zeiten.
Aber wenn man das nicht versteht braucht man auch nicht objektorientiert weitermachen.
Aber ist wunderbar wenn das heute noch so funktioniert.

Ist wie in der Mechaniker Ausbildung. In der ersten Woche gibts erst mal eine Feile und ein Stück Metall. Da wird nicht gleich an der CNC Maschine gearbeitet.
Zumindest hoffe ich das das noch so ist. :-)
Good code comes from experience, experience comes from bad code.

Mathias
Beiträge: 6194
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Mathias »

Ist wie in der Mechaniker Ausbildung. In der ersten Woche gibts erst mal eine Feile und ein Stück Metall. Da wird nicht gleich an der CNC Maschine gearbeitet.
Zumindest hoffe ich das das noch so ist. :-)

Leider immer weniger. :roll:
In der Grundschule das Gleiche, man kann nicht mal mehr 1+1 im Kopf zusammenzählen, ohne Technische Hilfsmittel.

Die Methode ist uralt. Pascal zu DOS Zeiten.

Aber immer noch sehr gut.
Wie würdest du das Beispiel mit der Adresse abspeichern ?
TFileStream, aber dies ist schon komplexer.

Hier noch ein Tutorial: https://www.delphi-treff.de/tipps-trick ... speichern/
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Marc
Lazarusforum e. V.
Beiträge: 208
Registriert: Fr 11. Nov 2016, 14:09
OS, Lazarus, FPC: Linux Mint 20 (WinXP VBox)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Write- & Readln nur in Console Mode möglich?

Beitrag von Marc »

@itjump. Bin jetzt kein Arzt, aber ich glaube auch nicht das sich Programmierkenntnisse vererben lassen.
Wobei Ausnahmen bestätigen die Regel :-)

Ist bestimmt nicht einfach mit Autismus zu leben.
Aber ich weiss jetzt das ich Dich mal was ganz schwieriges fragen werde.

@Mathias Ja dann kriegt man statt einem Mechaniker einen CNC Operator. :-)

Ich habe mir gedacht auf dieselbe alte Weise.
Wenn das dann klappt, mit was eleganterem.
Du hast jetzt schon TFileStream vorgeschlagen.

Ganz am Schluss hätte ich ein paar Projekte die ich unbedingt damit realisieren will.
Mal sehen wie weit ich komme. :-)
Good code comes from experience, experience comes from bad code.

Antworten