AGB  ·  Datenschutz  ·  Impressum  







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

mit Konsolenanwendung StdIn lesen

Offene Frage von "VizeTE"
Ein Thema von VizeTE · begonnen am 8. Jan 2006 · letzter Beitrag vom 18. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#1

mit Konsolenanwendung StdIn lesen

  Alt 8. Jan 2006, 10:40
Hallo,

ich möchte, wie die Überschrift schon sagt , 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!
Angehängte Dateien
Dateityp: txt pre-revprop-change_163.txt (2,8 KB, 21x aufgerufen)
  Mit Zitat antworten Zitat
Niko

Registriert seit: 23. Jun 2003
416 Beiträge
 
Delphi 2006 Professional
 
#2

Re: mit Konsolenanwendung StdIn lesen

  Alt 8. Jan 2006, 16:38
Hi,

ganz einfach mit read oder readln.

Zum Beispiel:
Delphi-Quellcode:
var s: String;
// ...
while (not Eof) do
begin
  readln(s);
  // s verarbeiten
end;
"Electricity is actually made up of extremely tiny particles called electrons, that you cannot see with the naked eye unless you have been drinking." (Dave Barry)
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#3

Re: mit Konsolenanwendung StdIn lesen

  Alt 9. Jan 2006, 07:38
So funktionierts, das ist ja wirklich sehr einfach


Danke!
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: mit Konsolenanwendung StdIn lesen

  Alt 13. Jan 2006, 16:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von ---Bernhard---
---Bernhard---

Registriert seit: 26. Dez 2003
Ort: Abensberg
111 Beiträge
 
Delphi 2006 Professional
 
#5

Re: mit Konsolenanwendung StdIn lesen

  Alt 13. Jan 2006, 17:09
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!
Bernhard Doll
Das Leben ist ein sch*** Spiel... aber eine super Grafik!!
http://www.doll-online.net
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: mit Konsolenanwendung StdIn lesen

  Alt 13. Jan 2006, 17:57
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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: mit Konsolenanwendung StdIn lesen

  Alt 13. Jan 2006, 19:20
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
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: mit Konsolenanwendung StdIn lesen

  Alt 16. Jan 2006, 11:18
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?
  Mit Zitat antworten Zitat
VizeTE

Registriert seit: 31. Dez 2002
178 Beiträge
 
Delphi 5 Enterprise
 
#9

Re: mit Konsolenanwendung StdIn lesen

  Alt 16. Jan 2006, 11:27
...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.
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: mit Konsolenanwendung StdIn lesen

  Alt 16. Jan 2006, 14:33
Hallo VizeTE,

Zitat von VizeTE:
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 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:00 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