AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[DOS] Ausgabe abfangen

Ein Thema von Andi1985 · begonnen am 14. Aug 2008 · letzter Beitrag vom 15. Aug 2008
Antwort Antwort
Seite 4 von 4   « Erste     234   
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#31

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 18:17
Hallo zusammen,

naja man kann es schon steuern.
1) wenn Parameter übergeben werden, dann darf das Programm einlesen (von STDIN) ansonsten wird nur eine Fehlermeldung ausgegeben.
2) wenn Parameter übergeben werden, dann liest das Programm aus der übergebenen Datei ansonsten von STDIN.

Wenn ich mich richtig erinnere liefert Paramamstr(1) bei solchen Konstrukten
Meinprog.exe >papierkorb.txt
dann '>papierkorb.txt' zurück. Das Umleiten muß also vom Programm selbst erledigt werden.

Die andere Möglichkeit wäre es mit zwei Threads zu versuchen. Einer lauscht, und der andere dreht den Saft ab wenn nach x Sekunden keine Eingabe erfolgte.

Die Fragestellung erinnert mich ein wenig an meine Tochter. Wenn etwas machbar war, mußte es auch gemacht werden. Das ist jetzt allerdings auch schon 18 Jahre her.

Grüße
K-H
  Mit Zitat antworten Zitat
Benutzerbild von MSSSSM
MSSSSM

Registriert seit: 18. Apr 2008
223 Beiträge
 
Delphi 7 Professional
 
#32

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 20:03
Zitat von p80286:
Wenn ich mich richtig erinnere liefert Paramamstr(1) bei solchen Konstrukten
Meinprog.exe >papierkorb.txt
dann '>papierkorb.txt' zurück. Das Umleiten muß also vom Programm selbst erledigt werden.
versuch mal
Meinprog.exe > papierkorb.txt
Marius
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#33

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 21:11
Hallo,

unabhängig von den mir unbekannten Absichten des Thread Owners möchte ich noch folgendes zu bedenken geben: Jede Konsolenanwendung sollte so geschrieben werden, dass Power-User nicht behindert werden. Eigentlich ist die Unterstützung der Standard I/O-Kanäle eine Entwurfsentscheidung, die aus verschiedenen Verarbeitungsszenarien folgt, z.B. eine Eingabedatei soll verändert werden und das Resultat soll als neue Datei weggeschrieben werden - die von Unix her bekannten filter tools arbeiten genau so. In diesem Fall erwarte ich die Verwendung von STDIN und STDOUT einfach. Da hier eine INI-Datei verarbeitet werden soll und Delphi die entsprechenden Klassen zur bequemen Verarbeitung solcherart strukturierter Textdateien anbietet, gilt es beides unter einen Hut zu bringen.

Delphi-Quellcode:
uses
  Classes,
  IniFiles,
  Windows,
  SysUtils;

var
  stream: TStream;
  strings: TStrings;
  ini: TMemIniFile;

begin
  ini := TMemIniFile.Create('');
  strings := TStringList.Create;
  if ParamCount = 0
    then stream := THandleStream.Create(GetStdHandle(STD_INPUT_HANDLE))
    else stream := TFileStream.Create(ParamStr(1), fmOpenRead);
  strings.LoadFromStream(stream);
  stream.Free;
  ini.SetStrings(strings);
  strings.Free;
  if ini.SectionExists(SECTION) then
  begin {
    ... roll your own dice ...
}
 end;
  ini.Free;
end;
So wird ein im Programm festgeschriebener Dateiname vermieden, die Datei kann über piping oder redirection verarbeitet werden und auf den Inhalt kann bequem zugegriffen werden. Alternativ kann die Eingabedatei auch als Parameter übergeben werden.

Bei einem einfachen StringList.LoadFromFile('C:\BOOT.INI') wird die Einbettung in die Ablaufumgebung nicht berücksichtigt.

Freundliche Grüße
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#34

Re: [DOS] Ausgabe abfangen

  Alt 14. Aug 2008, 22:53
Zitat von marabu:
So wird ein im Programm festgeschriebener Dateiname vermieden, die Datei kann über piping oder redirection verarbeitet werden und auf den Inhalt kann bequem zugegriffen werden. Alternativ kann die Eingabedatei auch als Parameter übergeben werden.
Allerdings wird nicht zeilenweise von der Standardeingabe gelesen, wenn weder Dateiname noch piping oder redirection gewählt werden: Unter Win2000 wird nur 1 Zeile unter Win98 keine Zeile verarbeitet. Und das war ja wohl eine Vorgabe/Wunsch von Mogtar.

Gammatester
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#35

Re: [DOS] Ausgabe abfangen

  Alt 15. Aug 2008, 06:58
Moin,

ich hatte meinen Code in Beitrag #33 als unabhängig von Mogtars konkreten Anforderungen deklariert und mich nur auf das Problem der INI-Daten und deren Verarbeitung konzentriert, da das zeilenweise Verarbeiten ja schon früher im Thread gezeigt wurde, aber okay - hier die Verknüpfung der beiden Code-Teile, damit niemand stolpert:

Delphi-Quellcode:
program Demo;

{$APPTYPE CONSOLE}

uses
  Classes,
  IniFiles,
  Windows,
  SysUtils;

var
  stream: TStream;
  strings: TStrings;
  ini: TMemIniFile;
  h: THandle;
  ft: Cardinal;
  line: string;

const
  SECTION = 'boot loader';

begin
  ini := TMemIniFile.Create('');
  strings := TStringList.Create;
  h := GetStdHandle(STD_INPUT_HANDLE);
  ft := GetFileType(h);
  if ParamCount > 0 then
    stream := TFileStream.Create(ParamStr(1), fmOpenRead)
  else if ft <> FILE_TYPE_CHAR then
    stream := THandleStream.Create(h)
  else
    stream := nil;
  if Assigned(stream) then
  begin
    strings.LoadFromStream(stream);
    stream.Free;
  end else
  begin
    AssignFile(input, '');
    Reset(input);
    while not Eof do
    begin
      ReadLn(line);
      strings.Add(line);
    end;
    CloseFile(input);
  end;
  ini.SetStrings(strings);
  strings.Free;
  if ini.SectionExists(SECTION)
    then WriteLn('roll your own dice ...')
    else WriteLn('unexpected data found');
  ini.Free;
end.
Freundliche Grüße
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#36

Re: [DOS] Ausgabe abfangen

  Alt 15. Aug 2008, 07:55
[OT] Nanu, Delphi-Tags kaputt ? Sie sind eigentlich gesetzt...[/OT]
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz