Thema: Delphi [DOS] Ausgabe abfangen

Einzelnen Beitrag anzeigen

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