Hallo Pascaler, hallo Eike und Frank,
Eike schrieb:
Versuche doch einmal, beim betätigen eines Buttons einen Prozess zu starten. Z. B.: system( 'ls -l' );
Nun habe ich statt "system" ein "execute" eingesetzt. Dabei stellte sich dann heraus, daß meine Programmierkenntnisse doch noch arg in den Kinderschuhen stecken: :-(
Meine neue Programmzeile lautete nämlich so:
Execute('ls -l');
Es gab die Fehlermeldung: function call as a statement -- value ignored
Dann hat es ziemlich gedauert, bis mir klar wurde, daß ich die Funktion "Execute" nicht einfach so aufrufen kann, und bis ich dann darauf kam, wie ich es hinbekommen könnte, den "Wert", den eine Funktion ja schließlich zurückliefern soll, für eine Anweisung zu benutzen:
Writeln(Execute('ls -l'));
So klappte es. Aber merkwürdig finde ich es doch: Ist denn die Ausgabe von ls -l als "Wert" zu betrachten? Muß ja wohl, sonst könnte es nicht gehen. Dann war ich natürlich neugierig, ob das auch z.B. beim cp-Befehl ging:
Writeln(Execute('cp hmhmhm klapptJaDoch'));
(Wobei ich die kleine Datei "hmhmhm" mit zwei Zeilen Inhalt eigens für diesen Prüfzweck erstellt hatte.)
Das klappte auch. Was mich da aber noch mehr wundert, ist, daß ich ja den Befehl "cp eineDatei andereDatei" in der shell mit <ENTER> abschließen muß, was ich ja hier gar nicht miteingeben kann (oder steckt das schon drin?)!
Auch "Write" statt "Writeln" brachte kein wesentlich anderes Ergebnis:
Write (Execute('cp hmhmhm klapptJaDoch')); Writeln('Hallo');
ergab folgende Ausgabe:
0Hallo
statt (wie in dem ersten Fall):
0 Hallo
Aber der Kopierbefehl wurde einwandfrei ausgeführt.
Feine Sache! :)
Allerdings: "Langsam ernährt sich das Eichhörnchen", ABER ES ERNÄHRT SICH !!! ;-)
Nun meine Frage: Kann ich diese Funktion "Execute" auch anders verwenden, als sie als Wert für "Writeln" zu benutzen, und was könnte man damit bewirken?
Herzlichen Dank für Eure Hilfen!
Fröhliche Grüße Roland
Hallo Roland, hallo Liste,
On Sun, Jun 17, 2001 at 02:43:51AM +0200, Roland Goretzki wrote:
0Hallo
statt (wie in dem ersten Fall):
0 Hallo
Aber der Kopierbefehl wurde einwandfrei ausgef�hrt.
Feine Sache! :)
Nun meine Frage: Kann ich diese Funktion "Execute" auch anders verwenden, als sie als Wert f�r "Writeln" zu benutzen, und was k�nnte man damit bewirken?
Ich vermute das "Execute" einen String zurueck gibt. Den kannst du natuerlich auch benutzen: nach bestimmten Zeichenketten suchen, bei der Ausgabe von ls einen Dateityp herausfiltern ... Wenn, wie im Falle von cp, eine Zahl zurueckgegeben wird, ist das wahrscheinlich der Exitcode. Wenn du also etwas anderes als '0' erhaelst, kann dein Programm entsprechend auf den Fehler reagieren.
Herzlichen Dank f�r Eure Hilfen!
Fr�hliche Gr��e Roland
Roland Goretzki schrieb:
Eike schrieb:
Versuche doch einmal, beim betätigen eines Buttons einen Prozess zu starten. Z. B.: system( 'ls -l' );
Nun habe ich statt "system" ein "execute" eingesetzt. Dabei stellte sich dann heraus, daß meine Programmierkenntnisse doch noch arg in den Kinderschuhen stecken: :-(
Meine neue Programmzeile lautete nämlich so:
Execute('ls -l');
Es gab die Fehlermeldung: function call as a statement -- value ignored
Dann hat es ziemlich gedauert, bis mir klar wurde, daß ich die Funktion "Execute" nicht einfach so aufrufen kann, und bis ich dann darauf kam, wie ich es hinbekommen könnte, den "Wert", den eine Funktion ja schließlich zurückliefern soll, für eine Anweisung zu benutzen:
Writeln(Execute('ls -l'));
So klappte es. Aber merkwürdig finde ich es doch: Ist denn die Ausgabe von ls -l als "Wert" zu betrachten?
Wie Benedikt schrieb, ist das der Rückgabewert. Die Konvention ist, daß ein fehlerfrei abgelaufenes Programm 0 zurückgibt, und ein fehlerhaft abgelaufenes etwas anderes.
Daran hält sich übrigens auch GPC, d.h. wenn ein Programm sauber durchläuft, gibt es 0 (an seinen Aufrufer, also z.B. die Shell) zurück, bei einem Laufzeitfehler was anderes. Außerdem kann man mit Halt (n) das Programm jederzeit beenden, und den Wert n zurückgeben, z.B. wenn das Programm eine unsinnige Eingabe bemerkt, die nicht zu einem Laufzeitfehler führt. (Halt ohne Parameter ist äquivalent zu Halt (0) und damit zu einem sauberen Programmende.)
Muß ja wohl, sonst könnte es nicht gehen. Dann war ich natürlich neugierig, ob das auch z.B. beim cp-Befehl ging:
Writeln(Execute('cp hmhmhm klapptJaDoch'));
(Wobei ich die kleine Datei "hmhmhm" mit zwei Zeilen Inhalt eigens für diesen Prüfzweck erstellt hatte.)
Das klappte auch. Was mich da aber noch mehr wundert, ist, daß ich ja den Befehl "cp eineDatei andereDatei" in der shell mit <ENTER> abschließen muß, was ich ja hier gar nicht miteingeben kann (oder steckt das schon drin?)!
Das ist nur in der Shell nötig, damit sie weiß, wann der Befehl fertig ist. Das <ENTER> gehört nicht zum Befehl selbst.
Nun meine Frage: Kann ich diese Funktion "Execute" auch anders verwenden, als sie als Wert für "Writeln" zu benutzen, und was könnte man damit bewirken?
Du kannst ihn einer Variablen (vom Typ Integer) zuweisen, und anschließend abfragen, ob er <> 0 ist, wenn ja z.B. eine Fehlermeldung ausgeben.
Frank