Ausgabe in Datei und auf Terminal

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
fht
Beiträge: 3
Registriert: Mi 22. Jul 2020, 18:06
OS, Lazarus, FPC: Debian GNU/Linux 10 (buster) / FPC 3.0.4+dfsg-22
CPU-Target: 64Bit
Wohnort: 58791 Werdohl (Germany)
Kontaktdaten:

Ausgabe in Datei und auf Terminal

Beitrag von fht »

Hallo,

(wahrscheinlich trivial, aber ich finde nichts)

Ich schreibe einiges in ein Logfile, möchte aber etwas davon beim Programmlauf auf das Terminal ausgeben. Dabei möchte ich den Quelltext - z.B. eine Prozedur "Anzeige_Variablen" mit der Ausgabe von eingestellten Variablen - nicht mehrfach schreiben

Kann an das Teriminal über eine Dateivariable ansprechen?

Beispiel:
Anzeige_Variablen(LogFile);
Anzeige_Variablen(Terminal);


mfg Friedrich

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

Re: Ausgabe in Datei und auf Terminal

Beitrag von theo »

Ist das nicht das, was write, bzw. writeln macht, oder verstehe ich dich falsch?
https://www.freepascal.org/docs-html/rt ... write.html

fht
Beiträge: 3
Registriert: Mi 22. Jul 2020, 18:06
OS, Lazarus, FPC: Debian GNU/Linux 10 (buster) / FPC 3.0.4+dfsg-22
CPU-Target: 64Bit
Wohnort: 58791 Werdohl (Germany)
Kontaktdaten:

Re: Ausgabe in Datei und auf Terminal

Beitrag von fht »

Wahrscheinlich war meine Frage viel zu knapp formuliert.

Ich denke mir in etwa folgendes

Es gibt eine Prozedur

Code: Alles auswählen

 PROCEDURE Anzeige_Variablen(f_log:text);   
            write(f_log, "Eingabedatei); writeln(f_log,f_ein_name);
            write(f_log, "Ausgabedatei); writeln(f_log,f_aus_name);
            .....
     END; {Kontrolle_Parameter}
Im Hauptprogramm steht dann

Code: Alles auswählen

  BEGIN
           IF f_log_name ='log' then 
               BEGIN
                     assign(f_log,'log.txt);
                     reset(f_log);
                END
                ELSE 
                     [i]<entsprechendes für die Ausgabe auf das Terminal>
                     <wie, weiss ich nicht> [/i]
                 END

Aufgerufen würde dann später :
Anzeige_Variablen(f_log);


Bislang fällt mir nur ein, die Prozedur Kontrolle_Parameter zweimal zu schreiben, das wäre aber sehr unschön

jammernich
Beiträge: 42
Registriert: Di 5. Nov 2024, 22:36
OS, Lazarus, FPC: Win11, Lazarus 4.5, fpc 3.2.3

Re: Ausgabe in Datei und auf Terminal

Beitrag von jammernich »

@fht

es gibt viele Wege: deklariere doch einen Art Schalter (globale Variable) oder geh über einen weiteren Parameter für die Procedure

Code: Alles auswählen

// var ConsoleEnabled : Boolean = True; 

procedure Log(AMsg : String; AOnConsole: boolean = False);
begin
  //alternativ: über ConsoleEnabled
  if AOnConsole then Writeln(AMsg) else //AUSGABE Console
    writeln(textfile, AMsg);			   //AUSGABE DATEI
end; 

Warf
Beiträge: 2310
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Ausgabe in Datei und auf Terminal

Beitrag von Warf »

Ja, es gibt zum einen die Handles: StdOutputHandle, StdInputHandle und StdErrorHandle
Zusätzlich gibt es noch die File Variablen: Input, Output und ErrOutput

Ich arbeite lieber mit den Handles als mit den Textfiles weil Textfiles als "magic" type einige Eigenheiten haben über die ich nicht nachdenken will. Aber das kann zu inkosistenzen im interen TextRec der File Variablen führen, also mischen davon ist gefährlich. Entweder das eine oder das andere

Antworten