Your browser doesn't support the features required by impress.mod.js, so you are presented with a simplified version of this presentation.

For the best experience please use the latest Chrome, Safari or Firefox browser.

2021-10-27 ZOOM-Universe
ITUG Jour Fixe 06

Segmente und Segmentdateien

Eine Einführung

Präsentation https://itug.github.io/ITUGJF06
Daten https://github.com/ITUG/ITUGJF06
Download Präsentation und Daten (zip)
Thomas Kollatz @kol_t
CC-BY 4.0

Was ist eine Segmentdatei

siehe TUSTEP-WIKI

Anweisungen

Einrichten
Gib Kommando >#da,segmentdatei,ran-ap
Inhalt einer Segmentdatei in Editordatei holen
Gib Anweisung >h,segmentdatei,?
Holen eines Segments (bearbeiten)
Gib Anweisung >h,segmentdatei,segment1
Retten eines Segments (speichern)
Gib Anweisung >r,segmentdatei,segment1
Titelvergabe
Gib Anweisung >tt=mein erstes Segment

TUSCRIPT, Segmente und Segmentdateien

Inhalt anzeigen
$$ MODE TUSCRIPT,{}
segmentfile="texte"
ERROR/STOP OPEN(segmentfile,WRITE,-std-)
inhalt=SEGMENT(segmentfile,"?")
holen | lesen
$$ MODE TUSCRIPT,{}
segmentname="tag_211027"
tag_211027=SEGMENT(segmentfile,segmentname)
retten | schreiben
$$ MODE TUSCRIPT,{}
SEGMENT/ERASE $segmentfile,segmentname=tag_211027

TUSCRIPT, Segmente und Segmentdateien

Segmenttitel
$$ MODE TUSCRIPT,{}
SEGMENT/TITLE $segmentfile,segmentname="Eintrag v. Mittwoch 27. Okt. 21"
umbenennen
$$ MODE TUSCRIPT,{}
status=RENAME(segment,segment_neu,-,segmentfile)
löschen
$$ MODE TUSCRIPT
status=DELETE(segment_neu,-,segmentfile)

Vergleiche mit Original #*vemo

Das Makro *VEMO vergleicht edierte Daten mit den Originaldaten.
Es erwartet, dass die Daten in der zur Spezifikation DATEI angegebenen 
Datei mit dem Editor oder mit dem Kommando #HOLE aus einer
anderen Datei "geholt" wurden. Die geholten Daten können entweder
eine gesamte Datei oder nur ein Segment einer Datei umfassen.
Das Makro vergleicht die Daten in der angegebenen Datei mit den
entsprechenden Daten in der Datei, aus der sie geholt wurden.
Zur Spezifikation DATEI ist die Standard-Editor-Datei voreingestellt.
Außer der Spezifikation DATEI hat das Makro noch die Spezifikationen
MODUS, LOESCHEN und PROTOKOLL; sie entsprechen denen des Kommandos
#VERGLEICHE.

#in,vemo

Beispiel: x, #*vemo,<editor>

Segmentdatei sortieren #*seso

Standard-Makro: SESO
                    
 Mit dem Makro *SESO können Segment-Dateien umkopiert und dabei
 die darin enthaltenen Segmente nach ihren Namen sortiert werden.
 Das Makro *SESO hat folgende Spezifikationen:
                    
 QUELLE, ZIEL, MODUS und LOESCHEN
                    
 Zur Spezifikation MODUS sind folgende Angaben erlaubt:
 -  Sortieren         Nach den Segmentnamen sortieren
 -  Sortieren/MEGA    dto. und Mega-Segmentdatei erstellen
 -  Generieren        Segmentdatei wieder herstellen
 -  Generieren/MEGA   dto. und Mega-Segmentdatei erstellen
 Zur Spezifikation MODUS ist SORTIEREN voreingestellt.

#in,seso

Segment-Datei und Mega-Segmentdatei

Eine "normale" Segment-Datei kann bis zu 9999 Segmente aufnehmen. Sie kann jedoch mit dem Kommando #RETTE,segmentdatei,-std-,+;+,+ in eine Mega-Segment-Datei konvertiert werden. Eine Mega-Segment-Datei kann bis zu 999999 Segmente aufnehmen; weitere Unterschiede zur normalen Segment-Datei gibt es nicht. Beim Einrichten einer Segment-Datei sollte als Dateityp RAN angegeben werden, damit schnell auf die einzelnen Segmente zugegriffen werden kann.

Handbuch

cr_segm I

$$ MODE TUSCRIPT,{}
-- Segmentdatei einrichten:
segm_file="goethe_segm.tf"
ERROR/STOP CREATE (segm_file,ran-o,-std-)

-- Inhalt der Ausgangsdatei auf Variable legen:
file="aufgabe02.tf"
FETCH dsk = TUSTEP_DSK
path2file=ADJUST_PATH (dsk,file)
status=READ (path2file,content)
IF (status!="OK") THEN
 PRINT status
 STOP
ENDIF

-- Dateizugriff Segment startet bei Segmentkennung <text>:
BUILD S_TABLE segm_anf=" <text> "

-- Dict zur Kontrolle - Segmentname muss unique sein:
DICT numa CREATE 999999

cr_segm II

ACCESS q: READ/VARIABLE/STREAM/* content s,segm_kennung/segm_anf+segment+e,typ
 LOOP/9999999
  READ/EXIT q
  IF (typ!=1) CYCLE
  numatags=FILTER (segment,":<numa>*</numa>:",-)
  numawert=EXTRACT (numatags,":<numa>:"|,":</numa>:")
  numawert=JOIN(numawert)
  numa=SQUEEZE(numawert)
  -- Abbruch, wenn numa nicht unique ist:
  DICT numa ADD numa
  -- konformen Segmentnamen aus numa generieren:
  segm_name=EXCHANGE (numa,":/:_:")
  segm_name=CONCAT ("g_",segm_name)
  -- Segmentkennung <text> ins zu rettende Segment integrieren:
  zeile1alt=SELECT (segment,1)
  zeile1neu=CONCAT (segm_kennung,zeile1alt)
  segment=REPLACE (segment,1,zeile1neu)
  -- Segment in Segmentdatei schreiben:
  SEGMENT/ERASE $segm_file, $segm_name = segment
 ENDLOOP
ENDACCESS q