![]() |
mit Konsolenanwendung StdIn lesen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich möchte, wie die Überschrift schon sagt :zwinker:, mit einer Konsolenanwendung die Standardeingabe auslesen. Hintergrund sind die Hooks von Subversion. Dort gibt es ein Verzeichnis wo man ausführbare Dateien ablegen kann. Je nach Name der Datei wird diese bei bestimmten Ereignissen ausgeführt. U.a. werden dort per StdIn Informationen übergeben die ich gern auswerten möchte. Ich habe mal die entsprechende Template-Datei angehängt. Ich habe bereits eine Konsolenanwendung geschrieben, die gestartet wird und die 5 angegebenen Parameter entgegennimmt. Ich habe aber leider keine Ahnung wie ich an die Daten aus der Standardeingabe herankomme. Ich hoffe da kann mir jemand helfen, Danke! |
Re: mit Konsolenanwendung StdIn lesen
Hi,
ganz einfach mit read oder readln. Zum Beispiel:
Delphi-Quellcode:
var s: String;
// ... while (not Eof) do begin readln(s); // s verarbeiten end; |
Re: mit Konsolenanwendung StdIn lesen
So funktionierts, das ist ja wirklich sehr einfach :wall:
Danke! |
Re: mit Konsolenanwendung StdIn lesen
im Laufe der Zeit hat sich dann doch noch ein Problem ergeben...
Und zwar der Fall wenn es nichts zu lesen gibt. Dann steht mein Programm still weil es auf Informationen wartet. Kann man das noch irgendwie abfragen? Vielleicht kann man irgendwie feststellen wieviele Bytes es zu lesen gibt oder etwas in die Richtung. |
Re: mit Konsolenanwendung StdIn lesen
Ich galub das ist mit ReadLn nicht möglich.
Bei ReadLn wird erst der Befehl gegeben, dass der User was eingeben soll/kann. Dadurch wartet das Programm bis der User auf Enter drückt! |
Re: mit Konsolenanwendung StdIn lesen
Zitat:
|
Re: mit Konsolenanwendung StdIn lesen
Moin,
also bei mir bleibt das Programm nicht hängen, solange man eine Datei über StdIN an das Programm sendet. Was machst du da? Meinst du, wenn man das Programm einfach so aufruft? Dann ist das Verhalten aber genau richtig! MfG Thorsten |
Re: mit Konsolenanwendung StdIn lesen
Zitat:
|
Re: mit Konsolenanwendung StdIn lesen
...und noch ein Stoperstein, über den ich gestolpert bin...
Das einlesen von Umlauten macht mir noch ein wenig zu schaffen. Ich habe versucht den Text mit CharToOEM zu konvertieren. Es wurde auch konvertiert aber leider nicht richtig. Da sind immernoch komische Zeichen. Es sind zwar andere wenn ich CharToOEM verwende aber leider keine gescheiten. |
Re: mit Konsolenanwendung StdIn lesen
Hallo VizeTE,
Zitat:
Kann man nicht. Dein Programm weiss nichts von einer Datei. Dein Programm horcht was auf StdIN so los ist und wird beendet wenn es dort das Endezeichen (#26) liest. Wenn du keine Datei an dein Programm sendest, wird StdIN auf die Tastatur gelegt. Das liegt nunmal in der Natur der Sache, sorry. Wenn du sowas abfangen willst, darfst du nicht StdIN nehmen, sondern musst den Dateinamen übergeben und die Datei selber einlesen. Das ist nunmal so! Zitat:
Da es ja ein Konsolenprogramm ist, müstest du ja eigentlich z.B. das Programm Edit oder UltraEdit (und dann den Text konvertieren) nehmen. Und zwar in ASCII, da Windows eine andere Zeichentabelle benutzt (ANSI). Also Gegenfrage wie erstellst du deine Dateien, mit einem Windowsprogramm (z.B. Notepad)? Dann kannst du mit...
Delphi-Quellcode:
deinen Zeichen umwandeln, damit sie in deiner Anwendung richtig aussehen.
function ANSI2ASCII(AText:string):string;
const MaxLength = 255; var PText : PChar; begin PText:=StrAlloc(MaxLength); StrPCopy(PText,AText); {$IFDEF WIN32} CharToOEM(PText,PText); {32Bit} {$ELSE} AnsiToOEM(PText,PText); {16Bit} {$ENDIF} Result:=StrPas(PText); StrDispose(PText); end; Ährlich gesagt habe ich keine Ahnung was du da eigentlich machen möchtest. MfG Thorsten |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz