Ausgabe einer Konsolenanwendung in Datei umleiten

Antworten
Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Ausgabe einer Konsolenanwendung in Datei umleiten

Beitrag von corpsman »

Guten morgen allerseits,

ich habe folgendes Programm geschrieben :

Code: Alles auswählen

 
Program test;
 
{$MODE objfpc}{$H+}
 
{$APPTYPE CONSOLE}
 
Uses
  crt, sysutils;
Var
  b: Boolean;
  c: char;
  i:integer;
Begin
  writeln('Hello World');
  b := true;
  for i := 0 to 99 do begin
    writeln('Line '+inttostr(i));
  end
  While b Do Begin
    // Handle Key's
    If KeyPressed() Then Begin
      c := ReadKey();
      If (c = 'q') Or (c = 'Q') Then Begin
        b := false;
      End;
    End;
    // Prevent 100% CPU Load
    sleep(1);
  End;
  writeln('Shut down.');
End.
 


und möchte dessen Ausgabe in eine .txt Datei umleiten, also habe ich es mit einer .Bat Datei aufgerufen, welche folgendes macht :

Code: Alles auswählen

project1.exe > log.txt


Nur leider bleibt meine log.txt Datei leer, auch kann ich in dem Konsolenfenster nicht Scrollen (wenn ich die Umleitung nicht mache).
Unter Linux ist das alles kein Problem, aber mit Windows scheint es mal weider problematischer zu sein. Könnt ihr mir weiter helfen ?

Corpsman
--
Just try it

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2641
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Ausgabe einer Konsolenanwendung in Datei umleiten

Beitrag von m.fuchs »

Ausgaben umleiten funktioniert nicht bei Nutzung der Unit Crt. Du müsstest sie rauswerfen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Ausgabe einer Konsolenanwendung in Datei umleiten

Beitrag von corpsman »

Gibt es dann noch eine Andere Möglichkeit, nonblocking auf Tastaturereignisse zu reagieren ?

Auch nutze ich das TextColor(); feature...
--
Just try it

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

Re: Ausgabe einer Konsolenanwendung in Datei umleiten

Beitrag von Mathias »

Das könnte dir vielleicht weiterhelfen.

Code: Alles auswählen

program project1;
uses
  Crt;
var
  f: Text;
begin
  AssignFile(f, '');
  ReWrite(f);
  WriteLn(f, 'Hello World');
  repeat
  until KeyPressed;
  CloseFile(f);
end.     


Aufruf:

Code: Alles auswählen

project1
Gibt "Hello World" auf den Bildschirm.

Code: Alles auswählen

project1 > test.txt
Erzeugt die Datei mit dem Inhalt "Hello World", auf dem Bildschirm ist keine Ausgabe.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1498
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Ausgabe einer Konsolenanwendung in Datei umleiten

Beitrag von corpsman »

Das ist cool,

es ermöglicht wieder die Nutzung des Tastatur auslesens, die Farben gehen aber leider nicht :(

Code: Alles auswählen

Program project1;
 
{$MODE objfpc}{$H+}
 
{$APPTYPE CONSOLE}
 
Uses
  crt, sysutils;
Var
  b: Boolean;
  c: char;
  i: integer;
  f: Text;
Begin
  assignfile(f, '');
  rewrite(f);
  writeln(f, 'Hello World');
  For i := 0 To 15 Do Begin
    TextColor(i);
    writeln(f, 'Line ' + inttostr(i));
  End;
  b := true;
  While b Do Begin
    // Handle Key's
    If KeyPressed() Then Begin
      c := ReadKey();
      If (c = 'q') Or (c = 'Q') Then Begin
        b := false;
      End;
    End;
    // Prevent 100% CPU Load
    sleep(1);
  End;
  writeln(f, 'Shut down.');
  CloseFile(f);
End.
 
--
Just try it

Antworten