Seite 1 von 1

REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Mi 19. Okt 2016, 22:27
von Rexfahrer
Hallo, ich schreibe gerade an einem REXX-Programm (reines REXX, kein VISPRO/REXX o. Ä.), bei dem mit Hilfe von file.exe der Typ einer Datei bestimmt werden soll. Dazu muss natürlich die Ausgabe von file.exe irgendwie in einer Variable gespeichert werden damit sie nachher weiterverarbeitet werden kann. Bisher habe ich das immer mit

Code: Alles auswählen

'@file.exe >> log.txt'
gemacht und log.txt dann mit linein() eingelesen.
Nun denke ich mir, dass das doch auch einfacher gehen müsste. Nur wie? Kann mir da vielleicht ein REXX-Profi hier im Forum weiterhelfen?

Gruß, Laurenz

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Mi 19. Okt 2016, 22:56
von ak120
Um welche der zig Varianten von FILE.EXE handelt es sich? Wenn man den Dateityp in Rexx bestimmen möchte, ist dies mit wenig Aufwand möglich. Die meisten mir bekannten file-Programme bestimmen schon recht zverlässig den Dateityp. Wozu also noch ein weiteres Programm? Soll die Rexx-Prozedur nur unter OS/2 oder DOS funktionieren?

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Mi 19. Okt 2016, 23:20
von erdmann
"file.exe | rxqueue"

Danach kann man dann mit "queued" und "linein" den output lesen. Einfach mal die Hilfe zu "rxqueue" durchlesen.

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Mi 19. Okt 2016, 23:53
von thorolf
Rexfahrer hat geschrieben:Hallo, ich schreibe gerade an einem REXX-Programm (reines REXX, kein VISPRO/REXX o. Ä.), bei dem mit Hilfe von file.exe der Typ einer Datei bestimmt werden soll.
Bei SysGetEA gibt es u.a .TYPE als Attribut, damit sollte das eigentlich gehen ...

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Do 20. Okt 2016, 00:31
von Rexfahrer
Danke für eure Antworten, den entscheidenden Hinweis hat erdmann gegeben, um das auszuprobieren habe ich gleich eine kleine Test-Prozedur geschrieben, vielleicht hilft sie noch jemand anderem weiter, ich finde die in OS/2 enthaltene REXX-Dokumentation stellenweise etwas unvollständig:

Code: Alles auswählen

/* Dieses kleine Test-Script benötigt file.exe irgendwo im PATH */

'@RXQUEUE /CLEAR' /* Warteschlange zurücksetzen */

/* Dateityp aller Dateien im Verzeichnis bestimmen und in der Warteschlange speichern */
'@file.exe * | RXQUEUE'

zaehler = 0

/* Inhalt der Warteschlange in Paketen von 20 Zeilen anzeigen bis diese leer ist */
do while queued() \= 0
	if zaehler = 20 then do
		zaehler = 0
		'@pause'
	end
	zaehler = zaehler + 1
	say linein('QUEUE:')
end
'@RXQUEUE /CLEAR' /* Warteschlange zurücksetzen */
thorolf hat geschrieben:Bei SysGetEA gibt es u.a .TYPE als Attribut, damit sollte das eigentlich gehen ...
Das ist mir bekannt, funktioniert aber nur bei Dateitypen, die OS/2 kennt.
ak120 hat geschrieben: Die meisten mir bekannten file-Programme bestimmen schon recht zverlässig den Dateityp. Wozu also noch ein weiteres Programm?
Mein Programm soll nicht nur dazu dienen den Dateityp zu bestimmen, schließlich tut das file.exe schon, sondern helfen, eine Datei, bei der z. B. die Dateiendung fehlt, mit dem richtigen Programm zu öffnen.

Gruß, Laurenz

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Do 20. Okt 2016, 19:26
von ak120
Rexfahrer hat geschrieben:Danke für eure Antworten, den entscheidenden Hinweis hat erdmann gegeben, um das auszuprobieren habe ich gleich eine kleine Test-Prozedur geschrieben, vielleicht hilft sie noch jemand anderem weiter, ich finde die in OS/2 enthaltene REXX-Dokumentation stellenweise etwas unvollständig:
Es is ja zum Glück darüber hinaus, genug zu finden.
/* Dieses kleine Test-Script benötigt file.exe irgendwo im PATH */
Dann teste es doch am besten einfach vor dem Aufruf.

Ob man nun Warteschlangen oder andere Mittel zwischen den Prozessen nutzt, ist letztlich Geschmackssache.
thorolf hat geschrieben:Bei SysGetEA gibt es u.a .TYPE als Attribut, damit sollte das eigentlich gehen ...
Das ist mir bekannt, funktioniert aber nur bei Dateitypen, die OS/2 kennt.
Deshalb ja die Frage zur verwendeten FILE.EXE und somit der darin enthaltenen Unterstützung für Metadaten.
ak120 hat geschrieben: Die meisten mir bekannten file-Programme bestimmen schon recht zverlässig den Dateityp. Wozu also noch ein weiteres Programm?
Mein Programm soll nicht nur dazu dienen den Dateityp zu bestimmen, schließlich tut das file.exe schon, sondern helfen, eine Datei, bei der z. B. die Dateiendung fehlt, mit dem richtigen Programm zu öffnen.
Das funktioniert doch mit den "richtigen" Programmen bereits seit Urzeiten. Es mag sein, daß 1991 noch einige 16-bit Programme ihre Probleme hatten. Ich kann den Nutzen oder Vorteil nicht erkennen. Bei Textdateien bspw. arbeitet ein guter Editor m.E. zuverlässiger als die Schätzung von file.

Re: REXX - Programm-Ausgabe in Variable umleiten

Verfasst: Do 20. Okt 2016, 20:25
von Rexfahrer
ak120 hat geschrieben:Dann teste es doch am besten einfach vor dem Aufruf.
Ne, da dieses Skript nur dazu dient die Verwendung von RXQUEUE auszuprobieren. Sein praktischer Nutzen ist ohnehin gering, man könnte schließlich auch einfach

Code: Alles auswählen

file * | more
eingeben und das würde sogar bessere Ergebnisse liefern.
ak120 hat geschrieben:Deshalb ja die Frage zur verwendeten FILE.EXE und somit der darin enthaltenen Unterstützung für Metadaten.
Wenn du es unbedingt wissen willst: Die über YUM installierbare Version 5.04-7.
ak120 hat geschrieben:Das funktioniert doch mit den "richtigen" Programmen bereits seit Urzeiten. Es mag sein, daß 1991 noch einige 16-bit Programme ihre Probleme hatten. Ich kann den Nutzen oder Vorteil nicht erkennen. Bei Textdateien bspw. arbeitet ein guter Editor m.E. zuverlässiger als die Schätzung von file.
Ich möchte mir erlauben, die Motivation für mein Programm zu erklären:
Hin und wieder kommt es vor, dass eine Datei mit dem Systemeditor geöffnet wird, da OS/2 den Dateityp nicht kennt, obwohl es keine Textdatei ist. Dies kommt beispielsweise vor, wenn bei einer Datei die Endung fehlt oder falsch ist, z. B. bei den vielen FILE0000.CHK usw., die man nach einem CHKDSK auf einem nicht richtig ausgeworfenen USB-Stick erhält. Mit meinem Programm kann man solche Dateien dann ganz normal öffnen und sie werden sofort mit dem richtigen Programm geöffnet und optional mit der richtigen Endung versehen.

Gruß, Laurenz