C 16/116
Tips & Tricks

In die Datei geschaut

Wollen Sie in Dateien des C 16 herumschnüffeln oder sie gar ändern, dann haben wir hier das richtige Programm für Sie.

Mit dem Hilfsprogramm »P++Z« (Listing) können Sie alle sequentiellen Files bearbeiten, die sich mit »INPUT #« lesen lassen. Grundideen für dieses Programm sind:

— namentlich bekannte Dateien lesen, ohne das zuständige Anwenderprogramm zu benutzen,

— Dateien kopieren (Sicherheitskopien).

Sie können aber auch die einzelnen Variablen einer Datei verändern oder löschen. Beim Verändern müssen Sie darauf achten, daß der vorhandene Variablentyp erhalten bleibt. Wenn Sie nicht wissen, ob eine vorhandene Zahl vom zuständigen Anwenderprogramm als String oder Integervariable gelesen wird, dann sollten Sie Zahlen auch nur durch andere Zahlen ersetzen. Eine besondere Leistung des Programms ist die Absicherung gegen ein versehentliches Überschreiben von Daten. Vor dem Überschreiben einer Datei wird diese in »UTHELP« umbenannt und gespeichert. Die Umbenennung ist auf dem Bildschirm angezeigt. Sollten Sie nachträglich bemerken, daß beim Verändern einer Datei Fehler entstanden sind, so können Sie unter »UTHELP« auf die alte Datei zurückgreifen. Da auf jeder Diskette nur eine Datei mit dem Namen »UTHELP« gespeichert werden kann, sollten Sie vor dem Bearbeiten einer weiteren Datei Ihre letzten, mit »P++Z« vorgenommenen Änderungen überprüfen.

Vor dem Laden einer anderen Datei kontrolliert das Programm, ob ausgeführte Änderungen gespeichert wurden. Haben Sie dies noch nicht getan, so fragt Sie der Computer, ob Sie eine Speicherung wünschen.

Als weitere Programmierhilfen bieten wir Ihnen für »P++Z« eine Übersicht zur Programmstruktur (Tabelle 2) und die Variablenliste mit den Zeilennummern, in denen die Variable vorkommt (Tabelle 1).

(Herbert Wißmann/kn)
A$ File-Variable
340 410 1090 1200 1260 1300 5440 5450
EM$ Error-Meldungen
25 29 5120
EN Error-Nummern
25 27 28 5120 5130 5140
ES Error-Trak
25 5120
ET Error-Sektor
25 5120
GF$ Anfangs-Zeichen
195 1090 1200
GS Gesamtzahl Variablen
340 350 1000 1080 1160 5430
I Indiz
280 320 340 400 410 440
KT Änderungs-Flag
270 1310 5400 9700
L Loop
1160 1190 1200 5430 5440 5450 9730
N1$ Aktuelle Datei
210 220 260 380 5070 5350
N2$ SAVE Datei
5070 5080 5090 5310 5410 5420
N3$ RVS + Dateiname
220 230 1000 1150 1100 5300
Q$ Hilfsvariable
27 28 270 290 390 1040 1050 1060 1070 1080 1100 1110 1180 1220 5050 9710
Q% Index
1080 1090 1260 1300
S1$ Strich
194 1010 1030
S2$ Sternenreihe
193 1090
ST Status
300 310 420 430
X$ Hilfsvariable
5000 5010
Tabelle 1. Variablenliste zu »P++Z«
Zeile Bemerkung
1 Programmname, letzte Änderung, Programm-Länge
19 Sprung nach 190, da am Programmanfang oft benutzte Unterprogramme gut aufgehoben sind.
24-29 Floppy Error Unterprogramm
190-195 Standardvariable (Programmanfang)
200-230 N1$ und N3$ erhalten ihren Inhalt (siehe Variablenliste)
250-350 Die Anzahl der Variablen wird für die DIM-Anweisung ermittelt. Dieser Teil sichert auch beim kleinen Speicherplatz des C 16 eine optimale Ausnutzung. Bei mehr als 30 Variablen wird deren Anzahl angezeigt.
370-460 Die Variablen werden eingelesen.
1000-1330 Hier steht das Hauptprogramm. Zuerst gibt man die laufende Nummer der gewünschten Variable an. Diese wird gezeigt und man kann nach Eingabe von »A« diese ändern, beziehungsweise die Variable wird nach Eingabe von »L« gelöscht. Jede andere Eingabe führt das Programm wieder zur Zeile 1000. Ein »A« anstelle der laufenden Nummer läßt alle eingelesenen Variablen auf dem Bildschirm erscheinen. Hier sorgt Zeile 1170, daß, nachdem der Bildschirm einmal gefüllt wurde, eine Programmpause bis zum Drücken einer Taste eingelegt wird.
1240-1250 zeigen eine für Basic 3.5 spezielle Möglichkeit, eine Bildschirmzeile zu löschen. Zuerst muß der Cursor eine Zeile nach oben (dort steht »Welche Nummer ? xx«). Jetzt wird ein CHR$ (27) in den Bildschirm geschrieben. C 16-Besitzer sollten wissen, wenn dem CHR$(27) ein »Q« folgt, wird ab Cursorposition die Zeile gelöscht, ohne daß sich dabei die Cursorposition selbst verändert. Zeile 1250 löscht also eine Bildschirmzeile und schreibt dann an deren Anfang die Worte »NEUER INHALT:«.
1270 und 1310 setzen die Flags für Änderungen an der Datei auf 99. Diese Flags werden bei einem Speichervorgang wieder auf 0 gesetzt.
5000 wird nur angesprungen, wenn man versucht, das Programm zu beenden oder ein neues File einzulesen, bevor Änderungen gespeichert wurden.
5030 gibt die Möglichkeit, die Diskette zu wechseln oder auch den Speichervorgang abzubrechen.
5070 fragt nach dem neuen Dateinamen, gibt gleichzeitig den ursprünglichen Namen als »default« ins Eingabefeld.
5100-5140 überprüft, ob auf der eingelegten Diskette ein File mit gleichem Namen vorkommt, der dann in Zeile
5300-5380 sicherheitshalber in den Namen »UTHELP« umbenannt wird, also nicht sofort verloren geht.
5400-5480 enthält den eigentlichen Speichervorgang. Gespeichert wird unter Gebrauch der Variablen N2$ (gefüllt in Zeile 5070).
9700 Bei Eingabe eines »E« anstelle einer laufenden Nummer (Zeile 1000) wird das Programm beendet, wenn eventuell Änderungen gespeichert wurden oder die Frage nach Speichern verneint wurde.
Tabelle 2. Programmstruktur von »P++Z«
1 rem"@p++z":rem  6.10.85  psz=2586
3 rem  **************
4 rem  * h.wissmann *
5 rem  * 02822 4922 *
6 rem  *  30.11.83  *
7 rem  **************
19 goto190
24 close15:open15,8,15
25 input#15,en,em$,et,es:ifen<2thenreturn
27 ifen=64thenq$="{down}  ist kein seq.file {flon}!{flof}{down}":return
28 ifen=62thenq$="{down}  gibt es nicht {flon}!{flof}{down}":return
29 print"{down} "em$" {rvon}{flon}error{flof}{rvof}":close15:end
190 gosub24
193 s2$="****************************************"
194 s1$="{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}{SHIFT-*}"
195 gf$=chr$(34)
200 print"{clr}{dblu}**      seq.files lesen/aendern       **{down}{down}  file name{down}"
210 n1$="":inputn1$:ifn1$=""then9720
220 n3$="{rvon}"+n1$+"{rvof}"
230 print"{down}  bestand ";n3$
240 :
250 rem ** rec.zaehlen
260 open2,8,3,n1$+",s,r"
270 q$="":gosub25:ifq$<>""thenclose2:printq$:getkeyq$:goto200
280 i=1
290 input#2,q$
300 ifst=64then330
310 ifst<>0then25
320 i=i+1:goto290
330 close2
340 gs=i:dima$(i)
350 ifgs>30then print gs;" variable, einen moment bitte{down}"
360 :
370 rem **   rec.lesen
380 open2,8,3,n1$+",s,r"
390 q$="":gosub25:ifq$<>""thenclose2:printq$:getkeyq$:goto200
400 i=1
410 input#2,a$(i)
420 ifst=64then450
430 ifst<>0then25
440 i=i+1:goto410
450 close2
460 :
1000 print"{clr}      dateiinfo ";n3$;" ";gs;"variable{down}"
1010 prints1$" bitte gewuenschte lfd.nummer eingeben"
1020 print" oder 0=neuer file, c=copy, e=ende"
1030 print"      a=alle variablen listen":prints1$"{down}"
1040 q$="":input"{up} welche nr: ";q$
1050 ifq$="a"then1150
1060 ifq$="0"orq$="e"then9700
1070 ifq$="c"then5030
1080 q%=val(q$):ifq%<1orq%>gsthen1040
1090 print"{down}{down}";s2$;"{down} ";gf$;a$(q%);gf$:print"{down}";s2$;"{down} a=aendern  l=loeschen"
1100 getkeyq$:ifq$="a"then1240
1110 ifq$="l"then1290
1120 goto1000
1130 :
1140 rem ** datei listen
1150 print"{clr}   "n3$"{down}"
1160 forl=1togs
1170 ifpeek(205)<23then1190
1180 printn3$;"weiter nach return";:getkeyq$:print"{clr}";n3$:ifq$="e"then1000
1190 printusing"### ";l;
1200 print"= ";gf$;a$(l);gf$;"{down}"
1210 next
1220 getkeyq$:goto1000
1230 :
1240 rem ** aendern  a$(q%)
1250 print"{up}"chr$(27)"qneuer inhalt:"
1260 inputa$(q%)
1270 kt=99
1280 goto1000
1290 rem ** loeschen
1300 a$(q%)=""
1310 kt=99
1320 goto1000
1330 :
5000 print"{clr}{down} > aenderung abspeichern{down}{down}":input" ja/nein";x$
5010 ifx$="nein"then9710:else ifx$<>"ja"then5000
5030 print"{clr}  datei speichern"
5040 print"{down}{down} bitte gewuenschte zieldiskette einlegen und {rvon}return{rvof}  (z=zurueck)"
5050 getkeyq$:ifq$="z"then1000
5060 print"{down} unter welchem namen soll die datei      gespeichert werden {down}"
5070 print"  "n1$:input"{up}";n2$:ifn2$=""then1000
5080 iflen(n2$)>15thenn2$=left$(n2$,15)
5090 print"{up}  {rvon}";n2$;"{rvof}{down}{down}"
5100 open5,8,2,n2$+",s,r"
5120 input#15,en,em$,et,es
5130 close5:ifen=62then5400
5140 ifen<>0then29
5300 print"{clr}{down} die alte datei "n3$:print"{down} wird nun {rvon}'uthelp'{rvof}.{down}"
5310 print" danach wird '"n2$"' neu angelegt."
5320 print#15,"s:uthelp"
5330 gosub24:print"  {rvon}s-ok{rvof}"
5350 print#15,"r:uthelp=";n1$
5360 gosub24:print"  {rvon}r-ok{rvof}"
5380 :
5400 kt=0
5410 open1,8,2,n2$+",s,w"
5420 gosub25:print"  {rvon}saving{rvof} "n2$
5430 forl=1togs
5440 ifa$(l)=""then5470
5450 print#1,a$(l)
5460 gosub25
5470 next
5480 close1:goto1000
5620 :
9700 ifkt=99thengoto5000
9710 ifq$="0"thenclr:goto190
9720 gosub25:close15
9730 forl=1to30:print:next
9740 print"ende"
9750 end
Listing zu »P++Z«. Bitte beachten Sie die Eingabehinweise.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →