[Tustep-Liste] Dateiverwaltung mit TUSCRIPT
Gottfried Reeg
Gottfried.reeg at seegelken-reeg.de
Do Sep 7 17:17:45 CEST 2017
Lieber Herr Griesinger,
in meinen Makros verwende ich in der Regel seit langem folgende Zeilen
am Anfang:
Die ersten Zeilen, ermöglichen einen Aufruf des Makros mit #*m,makro
Da innerhalb eines Batchs die Prüfungen von #*m nicht vorgenommen
werden, müssen die Angaben dann für diesen Fall überprüft werden.
$$! quelle $$/ FILE $$-
$$! ziel $$/ FILE $$-
$$! dauer $$/ SINGLE $$-
$$! $$/ t $$- temporär
$$! $$/ p $$- permanent
$$! $$/ p'- $$- perm. nicht fragen, wenn bereits vorhanden
$$! qtraeger=-std- $$/ VOLUME $$- Trägerangabe für die Quelle
$$! ztraeger=-std- $$/ VOLUME $$- Trägerangabe für das Ziel
$$MODE TUSCRIPT, { }
- Prüfen, ob die Angaben zu den Dateien einem Dateinamen entsprechen:
IF (quelle.NE.'FILE NAME') ERROR "Zu QUELLE ist kein legaler Dateiname angegeben"
IF (ziel.NE.'FILE NAME') ERROR "Zu ZIEL ist kein legaler Dateiname angegeben"
IF (dauer != "t","p","p'-") ERROR "Zu DAUER nur t p p'- vorgesehen: ", dauer
- Dateityp festlegen
SET dtyp="SEQ-{dauer}"
IF (dauer=="p'-") SET dtyp = "SEQ-O"
- Abfrage, ob sich Quelle und Ziel unterscheiden
SET status = UNIQUE (quelle, ziel)
ERROR "Datei ", status, " ist mehrfach angegeben"
- Erst nach dem Prüfen dieser Angaben, erfolgt im Fehlerfall der Abbruch
IF (ERROR) STOP
- Prüfen der Quelldatei, ob zum Lesen angemeldet, sonst anmelden,
- Wenn ohne Erfolg, dann wird abgebrochen. Die Fehlermeldung von TUSCRIPT wird ausgegeben
IF (quelle!='LESEN') ERROR/STOP "QUELLE: ", OPEN (quelle, READ, {qtraeger})
- Prüfen der Zieldatei, ob zum Schreiben vorhanden, einrichten
IF (ziel!='SCHREIBEN') ERROR/STOP "ZIEL: ", CREATE (ziel, {dtyp}, {ztraeger})
Viele Grüße aus Berlin
Gottfried Reeg
Am 07.09.2017 um 14:14 schrieb Christian Griesinger:
> Diskussionsforum Tustep-Liste
> Weitere Informationen: www.itug.de
> ------------------------------------------------------------
>
> Liebe TUSTEPianer,
>
> auf dem TUSTEP-Wiki gibt es ja bereits ein paar Informationen
> zur Dateiverwaltung mithilfe von TUSCRIPT, ich würde gerne wissen,
> ob jemand aus der Community ein paar Tipps für den optimalen Umgang
> (also Best Practices) in diesem Bereich hat, die wir auf das Wiki
> hochladen können.
>
> Mich interessiert vor allem folgender Anwendungsfall: Wenn ich ein
> Programm habe, das eine Datei (im folgenden Quelldatei) modifiziert
> (z. B. Tagumwandlung, Registererstellung, automatisierte Auszeichnung)
> und das Ergebnis in einer zweiten Datei (im folgenden Zieldatei)
> speichert, dann möchte ich dieses Programm auch in einer Stapelver-
> arbeitung einsetzen (z.B. innerhalb eine Schleife).
> Wenn nun beispielsweise eine Quelldatei existiert, aber nicht angemeldet
> ist, sollte das Programm natürlich nicht direkt mit einer Fehlermeldung
> abbrechen, sondern ggfs. die Datei zuerst anmelden.
>
> Bisher habe ich folgendes Prozedere zusammengestellt, um die Dateien
> in dem oben skizzierten Kontext zu verarbeiten. Ist das richtig und
> vollständig so oder müsste man noch weitere Prüfungen einbauen? Oder
> gibt es eine einfachere Methode?
>
> #MAKRO
> $$ MODE TUSCRIPT, {}
>
> - 1. Schritt: Quelldatei prüfen
> - Prüfen, ob Quelldatei eingegeben wurde
> IF (quelle .EQ. "") THEN
> PRINT/ERROR "Eingabefehler:"
> PRINT/ERROR "Es wurde keine Quelle eingegeben."
> STOP
> ENDIF
>
> - Prüfen, ob Quelldatei existiert
> IF (quelle .NE. 'DATEI') THEN
> PRINT/ERROR "Dateifehler:"
> PRINT/ERROR "Die Datei {quelle} wurde nicht gefunden."
> STOP
> ENDIF
>
> - Prüfen, ob Quelldatei angemeldet
> status = CHECK(quelle, READ, TUSTEP)
>
> IF (status .NE. "OK") THEN
> status = OPEN(quelle, READ)
> IF (status .NE. "OK") THEN
> PRINT/ERROR "Dateifehler:"
> PRINT/ERROR "Die Datei {quelle} konnte nicht angemeldet werden."
> ENDIF
> ENDIF
>
> - 2. Schritt: Zieldatei prüfen
> - Prüfen, ob Zieldatei eingegeben wurde
> IF (ziel .EQ. "") THEN
> PRINT/ERROR "Eingabefehler:"
> PRINT/ERROR "Es wurde keine Zieldatei eingegeben."
> STOP
> ENDIF
>
> - Prüfen, ob Quell- und Zieldatei identisch sind
> IF (quelle .EQ. ziel) THEN
> PRINT/ERROR "Eingabefehler:"
> PRINT/ERROR "Quelle und Ziel dürfen nicht identisch sein."
> STOP
> ENDIF
>
> - Prüfen, ob Zieldatei existiert und ggfs. anmelden
> IF (quelle .NE. 'DATEI') THEN
> status = CREATE(ziel, SEQ-O)
> IF (status .NE. "OK") THEN
> PRINT/ERROR "Dateifehler:"
> PRINT/ERROR "Die Datei {ziel} konnte nicht eingerichtet werden."
> STOP
> ENDIF
> ENDIF
>
> - Prüfen, ob Zieldatei angemeldet ist
> status = CHECK(ziel, WRITE, TUSTEP)
>
> IF (status .NE. "OK") THEN
> status = OPEN(ziel, WRITE)
>
> IF (status .NE. "OK") THEN
> PRINT/ERROR "Dateifehler:"
> PRINT/ERROR "Die Datei {ziel} konnte nicht geöffnet werden."
> STOP
> ENDIF
> ENDIF
> *eof
>
>
> Viele Grüsse
> Christian Griesinger
> -----
> Parzival-Projekt Bern
> Institut für Germanistik
> Universität Bern
> Länggassstrasse 49, D103
> CH-3012 Bern, Schweiz
> Tel.: +41 (0)31 631 34 65
> Mail: Christian.Griesinger at germ.unibe.ch
> URL: http://www.parzival.unibe.ch/
>
> ------------------------------------------------------------
> Tustep-Liste at itug.de
> https://lists.uni-wuerzburg.de/mailman/listinfo/tustep-liste
Mehr Informationen über die Mailingliste Tustep-Liste