Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konsole: Read wann zu Ende? (https://www.delphipraxis.net/5230-konsole-read-wann-zu-ende.html)

Chewie 28. Mai 2003 16:53


Konsole: Read wann zu Ende?
 
Ich hab mir vorhin gedacht: Hey, es wäre doch praktisch, ein Programm zu haben, das die Ausgabe eines Konsolenprogramms (in meinem Fall mysqldump) in die Zwischenablage kopiert.

Folgenden Code hab ich dafür geschrieben:
Delphi-Quellcode:
var
  s, fulls: String;
  Clipboard: TClipboard;
begin
  fulls := '';
  s := '';
  repeat
    fulls := fulls + #13#10 + s;
    ReadLn(s);
  until //bis wohin??
  Clipboard := TClipBoard.Create;
  Clipboard.SetTextBuf(@fulls[1]);
  Clipboard.Free;
end.
Ich führe dann z.B. den Befehl
Code:
mysqldump --user=root -A | cmd2clip
] (cmd2clip ist der Name meines Programms) aus. Das Problem ist jetzt, dass ich nicht weiß, wann die Ausgabe zu Ende ist. Gibt es irgendein Zeichen am Ende der Ausgabe oder so etwas?

RomanK 28. Mai 2003 17:06

Hoi,
ist jetzt nicht die Lösung für dein Prob aber schau dir diesen Code mal an.
Du känntest das ganze auch mit
Code:
 > C:\cmd.txt
in eine Datei umleiten und dann auslesen.

Chewie 28. Mai 2003 18:39

So, Problem gelöst. Hätt ich eigentlich früher drauf kommen können

Ich hatte anscheinenend vergessen, dass die Standardein- und ausgabe eigentlich (zumindest in Pascal) nicht groß was anderes wie eine Textdatei ist. Und da gibts ja neben den schönen Read und Write-Funktionen natürlich auch das eof, und damit hats dann geklappt.

So sieht das ganze aus. Wenn einer also ein Konsolenprogramm braucht, mit dem die Eingabe in die Zwischenablage kopiert werden soll, einfach folgenden Source kompilieren und fertig:
Delphi-Quellcode:
program Cmd2Clip;
{$APPTYPE CONSOLE}
uses
  clipbrd;

var
  s, fulls: String;
  Clipboard: TClipboard;
begin
  fulls := '';
  s := '';
  while not eof do
  begin
    ReadLn(s);  
    fulls := fulls + #13#10 + s;
  end;
  Clipboard := TClipBoard.Create;
  Clipboard.SetTextBuf(@fulls[1]);
  Clipboard.Free;
end.

Edit: Acch Schmarrn, wenn ich aus ner repeat-Schleife eine while-Schleife mache, dann könnt ich den Code doch auch etwas ändern :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:19 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