Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi mit Konsolenanwendung StdIn lesen (https://www.delphipraxis.net/60512-mit-konsolenanwendung-stdin-lesen.html)

VizeTE 8. Jan 2006 10:40


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!

Niko 8. Jan 2006 16:38

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;

VizeTE 9. Jan 2006 07:38

Re: mit Konsolenanwendung StdIn lesen
 
So funktionierts, das ist ja wirklich sehr einfach :wall:


Danke!

VizeTE 13. Jan 2006 16:56

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.

---Bernhard--- 13. Jan 2006 17:09

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!

VizeTE 13. Jan 2006 17:57

Re: mit Konsolenanwendung StdIn lesen
 
Zitat:

Zitat von ---Bernhard---
Ich galub das ist mit ReadLn nicht möglich.

Ich versteif mich da ja auch nicht auf das ReadLn, wenn es da eine andere Möglichkeit gibt soll mir das auch recht sein.

omata 13. Jan 2006 19:20

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

VizeTE 16. Jan 2006 11:18

Re: mit Konsolenanwendung StdIn lesen
 
Zitat:

Zitat von omata
Meinst du, wenn man das Programm einfach so aufruft?

Ja, das meinte ich. Kann man das Abfangen? D.h. irgendwie prüfen ob es überhaupt was zu lesen gibt?

VizeTE 16. Jan 2006 11:27

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.

omata 16. Jan 2006 14:33

Re: mit Konsolenanwendung StdIn lesen
 
Hallo VizeTE,

Zitat:

Zitat von VizeTE
Zitat:

Zitat von omata
Meinst du, wenn man das Programm einfach so aufruft?

Ja, das meinte ich. Kann man das Abfangen? D.h. irgendwie prüfen ob es überhaupt was zu lesen gibt?

nein!
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:

Zitat von VizeTE
Das einlesen von Umlauten macht mir noch ein wenig zu schaffen.

Tja, da ist dann die Frage wie erstellst du die Datei, die du an dein Programm übergibst?
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:
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;
deinen Zeichen umwandeln, damit sie in deiner Anwendung richtig aussehen.

Ährlich gesagt habe ich keine Ahnung was du da eigentlich machen möchtest.

MfG
Thorsten


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.
Seite 1 von 2  1 2      

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