← ST-Computer 07 / 1986

Dateiverwaltung

Listing

Eine kurze, aber dennoch wirkungsvolle, Dateiverwaltung in Basic stellen wir hier vor. Das Programm bietet verĂ€nderbare Masken und ist noch dazu vollstĂ€ndig GEM-unter-stĂŒtzt. Es beherrscht alle nötigen FĂ€higkeiten einer Dateiverwaltung und kann nach Belieben erweitert werden.

Dieses Programm dient dazu, Daten zu verwalten, die der Benutzer leicht abfragen kann.

Man kann z. B. damit eine Adressenverwaltung errichten. Das Programm beinhaltet folgende Funktionen:

  • Laden (von Diskette)
  • Speichern (auf Diskette)
  • Eingabe (bzw. Neueröffnen)
  • Ausgabe (auf Drucker oder Bildschirm)
  • Sortieren (nach Quicksort)
  • Editieren (bestimmte Zeichenfolgen in der Datei suchen, löschen oder verĂ€ndern)

Die Funktionen werden einfach mit der Maus angeklickt. Danach erscheint ein leeres Rechteck, worin sÀmtliche Eintragungen erfolgen. Sollten noch keine Daten im Speicher sein, so hat man nur die Möglichkeit zwischen Laden, Editieren und Quit.

Laden:
Nach der Eingabe eines 12 Buchstaben langen Filenamens werden die Daten aus diesem File von Diskette gelesen.

Speichern:
Die Daten werden auf Diskette unter dem Namen geschrieben, der beim Laden oder der Neueröffnung angegeben wurde.

Eingabe
Wenn sich noch keine Daten im Speicher befinden, so erscheint im Bearbeitungsfenster „Neueröffnung:“, und man wird aufgefordert, einen Namen fĂŒr die Datei einzugeben. Dieser Name ist dann gleichzeitig der Filename, unter dem die Daten auf Diskette geschrieben werden. Danach fragt das Programm nach der Anzahl der Posten und deren Bezeichnungen. Im Falle einer Adressenverwaltung mĂŒĂŸte man folgende Eingaben machen: Anzahl der Posten = 5

  1. Bez.: Name
  2. Bez.: Vorname
  3. Bez.: Strasse
  4. Bez.: Wohnort
  5. Bez.: Telefon

In dieser Reihenfolge werden die Daten anschließend eingegeben.

Hat man die letzte Eintragung gemacht, drĂŒckt man um mit der Eingabe aufzuhören, oder eine andere Taste, um damit fortzufahren. Die maximale Zahl der Eintragungen betrĂ€gt 299.

Ausgabe:
DrĂŒckt man die Taste ’D’, so erfolgt die Ausgabe auf dem Drucker in SĂ€ulenform. Ansonsten die Taste ’B’ fĂŒr Bildschirm drĂŒcken. Die Daten erscheinen nun mit ihren Bezeichnungen auf dem Bildschirm.

Mit ’ ★ ’ kann man die Bildschirmausgabe jederzeit verlassen, oder man drĂŒckt eine andere Taste, um damit fortzufahren.

Editieren:
Zuerst gibt man den Posten an, der gesucht werden soll. Danach erfolgt die Eingabe einer Zeichenkette. Hat der Computer die betreffende Stelle gefunden, so braucht der Benutzer nur folgende Tasten zu betÀtigen:

’L’ - löscht die gesamte Eintragung. (Danach sollte man am besten neu sortieren).
’E’ - erwartet eine neue Eintragung des gesuchten Postens. '*' - verlĂ€ĂŸt den Editmodus, eine andere Taste - sucht weiter (Klein-, Großschrift wird unterschieden!!)

Sortieren:
Man gibt den Posten an, der sortiert werden soll. Dabei kann nach allen Posten sortiert werden.

Quit:
Beendet das Programm. (Alle Daten gehen verloren)

Die im Programm benutzten GEM-Routinen können natĂŒrlich, falls vom GEM-Kurs schon vorhanden, ’hinzu-gemergt’ werden. Man spart sich somit einige Tipparbeit.

Arnfried Griesert & Andreas Wienforth

1000 rem ################################################## 1005 rem ## Dateiverwaltung ## 1010 rem ################################################## 1015 rem ## geschrieben am 23.03.86 von ## 1020 rem ## ## 1025 rem ## Arnfried Griesert ++ Andreas Wienforth ## 1030 rem ## Montanusstr. 8 ++ Am Kloster 36 ## 1035 rem ## 5653 Leichlingen 1 ++ 5653 Leichlingen 1 ## 1045 rem ## ## 1050 rem ################################################## 1055 clear:dim name$ (5), lg (100), rg (100) : option base 1 1060 gosub init:gosub fu1lwind:gosub cleardesk:clearw 2 1065 for ypos1=48 to 252 Step 34 1070 xpos1=38:xpos2=133:color 1.1,1,1,1 1075 ypos2=ypos1+29:ypos1-ypos1+3:gosub rechteck:ypos1=ypos1-3 1080 xpos1=35 :xpos2=130 : color 1,1.1,1,0 1085 ypos2=ypos1+2o:gosub rechteck:circle 145,ypos1+31,8 :next ypos1 1090 gotoxy 3,4 :?"Laden" 1095 gotoxy 3.6 :?"Speichern" 1100 gotoxy 3.8 :?"Eingabe" 1105 gotoxy 3,10 :? "Ausgabe" 1110 gotoxy 3,12:? "Sortieren" 1115 gotoxy 3,14: ? "Editieren" 1120 gotoxy 3,16:?"Quit" 1125 xpos1=60:xpos2=600:ypos1=10;ypos2=30 1130 color 1,3,1,1.1:fuell=1:gosub eckrund 1135 xpos1=50: xpos2=590 :ypos1=0 :ypos2=20 1140 color 1 ft.1.1,0:fuel1 = 1:gosub eckrund 1145 gotoxy 5.1:?"Datei Verwaltung"; S 1150 ? " by Hugo-Soft-Coorperation" 1155 color 1,1,1,1,2: fill 0,0 1160 color 1,1,1,1,1:xpos1=305:ypos1=75 :xpos2=605:ypos2-325:gosub rechteck 1165 color 1,1,1,2,2:xpos1=300:ypos1=70.:xpos2=600:ypos2=320:gosub rechteck 1170 mausnr=3:gosub mausform:out 2,7 1175 gosub maus:if key< >1 then 1175 1180 if not (ymaus>48 and ymaus<286 and xmaus>35 and xmaus<153) then 1175 1185 x=fix( (ymaus—48)/34) 1190 color 1,1,1,1,1 :pcircle 145,x*34+79,8 1195 for i=14 to 0 step -2:sound 1,i,x+1,6,2 :next i 1200 xalt=35:yalt=x*34+86:xneu=300:yneu=70:breit1=95:hoch1=26 1205 breit2=300:hoch2=250:gosub growbox 1210 color 1,4,1,1,0: xpos1=300: ypos1=70: xpos2=600 : ypos2=320 : gosub rechteck 1215 on x+1 gosub laden,speichern,eingabe,ausgabe,sortieren.aendern.ende 1220 color 1,1,1,2.2:gosub rechteck:gosub schrumpfbox 1225 color 1,0,1,1,1:pcircle 145, x*34+79,8: circle 145, x*34+79.8 1230 goto 1175 1240 LADEN: 1245 if len(file$)<>0 then return 1250 erase wert$,name$:dim wert$(5,300),name$(5) 1255 gotoxy 19,7:? "Laden einer Datei:" 1260 gotoxy 19,9:? "Namen der Datei: __________.____" 1265 gotoxy 27,9:1 ine input file$ 1270 if len(file$)< >12 then goto 1260 1275 on error goto 1310 1280 open "I",#1,file$:inputtl,anzahl,posten 1285 for i=1 to posten:name$(i)=space$(15):input#1,name$(i):next i 1290 for i=1 to anzahl:for i1=1 to Posten 1295 wert$(i1,i)=space$(20):input#l,wert$(il,i) 1300 next i1,i 1305 close #1:return 1310 resume 1305 ' 1315 '---------------------------------------------------------------------- 1320 SPEICHERN: 1325 if anzahl-0 or len(file$)=0 then return 1330 gotoxy 19,7:print "Daten werden gesichert !" 1335 gotoxy 19,9:print "Bitte etwas Geduld ...” 1340 open ”0",#1,file$:print #1.anzah1.Posten 1345 for i=1 to posten:print #1,name$(i):next 1350 for i=1 to anzahl:for i1=1 to posten:print #1,wert!(i1.i):next i1,i 1355 close #1:return 1365 EINGABE: 1370 if anzahl>=299 then return 1375 if len(file$)< >0 then 1425 1380 gotoxy 19,7:? "Neueroeffnung:" 1385 gotoxy 19,9:? "Namen der Datei: __________.__" 1390 gotoxy 27,9: line input file$ 1395 if len(file$)<>12 then goto 1385 1400 gotoxy 19,10:input "Wieviele Posten: ",posten:if posten>5 then 1400 1405 for i=1 to Posten 1410 gotoxy 19.11+i:? i". ";:input "Bez.: ",name$(i):next 1415 dim wert$(5,200):anzahl=0 1420 gosub rechteck 1425 gotoxy 19.7:? "Eingabe:" 1430 anzahl=anzahl + l-.gotoxy 19.9:? "Nr.:"anzahl 1435 for i=1 to Posten:gotoxy 19,10+i:? name$(i);":";:input wert$(i,anzahl) 1440 if len(wert$(i.anzahl))=0 then wert$(i,anzahl)="???" 1445 next i 1450 gotoxy 19,17:? "Taste druecken (* - Abbruch)" 1455 a=inp(2):if a=42 then return eise goto 1420 1465 AUSGABE: 1470 if anzahl-0 or len(file$)=0 then return 1475 gotoxy 19,7:? "Ausgabe von: ";file$ 1480 gotoxy 19,9:? "Drucker oder Bildschirm (d/b) ?" 1485 a$=chr$(inp(2)) 1490 if a$="d" or a$="D" then goto 1550 1495 if a$< >"b" and a$<>"B" then goto 1485 eise a=l 1500 while not(a>anzahl) 1505 gosub rechteck:gotoxy 19,7:? "Ausgabe von: ";file$ 1510 gotoxy 19,9:? "Nr.: "a'Vanzahl 1515 for i=1 to posten:gotoxy 19.10+i 1520 print using "\xxxxxxxx\:";name$(i); 1525 print using " \xxxxxxxxxxxxxxxxxx\";wert$(i.a) 1530 next i 1535 a=a+1:gotoxy 19,17:print "Taste druecken (* “ Abbruch)" 1540 b=inp(2):if b-42 then a=anzahl+1 1545 wend:return 1550 ' Druckerausgabe 1555 lprint "Ausgabe von: ";file$ 1560 lprint:lprint:lprint " 1565 for i=1 to posten:lprint using "\xxxxxxxxx\ ";name$(i)next:lprint 1570 for i=1 to anzahl:lprint:lprint using "###) ";i;:for i1=1 to Posten 1575 lprint using "\xxxxxxxxx\ ";wert$(il,i): 1580 next i1,i : lprint: lprint: lprint anzahl" Elemente"-.return 1590 SORTIEREN: 1595 if anzahl-0 or len(file$)-0 then return 1600 gotoxy 19.7:? "Sortieren:" 1605 if Posten-1 then goto 1620 1610 for i=1 to Posten:gotoxy 19,8+i:print i:") ";namet(i):next 1615 gotoxy 19.15:input "Welchen Posten sortieren ";a 1620 REM QUICKSORT 1625 z=0:lg(1)-1:rg(l)-anzahl 1630 gosub 1640: 'Einsprung in Quicksort 1635 goto 1720: 'Ende 1640 'Anfang des rekursiven Unterprogramms 1645 z—z+1:if lg(z)>-rg(z) then 1715 1650 xx-lg(z):yy-rg(z) 1655 ' Vergleichselement holen (letztes Element) 1660 vg$-wert$(a.yy) 1665 if xx>yy then 1700 1670 if wert$(a,xx)<vg$ then xx=xx+l:goto 1670 1675 if wert$(a,yy)>vg$ then yy«yy-l:goto 1675 1680 if xx>yy then 1700 1685 for i=1 to posten-.swap wert$ ( i , xx) ,wert$ (i, yy) : next i 1690 xx=xx+l:yy-yy-l 1695 goto 1665 1700 ' 1705 rg(z+1)=yy: lg(z+1)=lg(z):gosub 1640 1710 lg(z+1)=xx: rg(z+1)=rg(z):gosub 1640 1715 z=z-1:return 1720 return 1730 AENDERN: 1735 if anzahl=0 or len(file$)=0 then return 1740 gotoxy 19,7:? "Editieren:" 1745 if posten«l then goto 1765 1750 for i=1 to posten:gotoxy 19,8+i:? i;". ”;name$(i):next i 1755 gotoxy 19,15:input "Welchen Posten abaendern: ",a 1760 if a<1 or a>posten then goto 1755 1765 gosub rechteck:gotoxy 19,7:? "Editieren:" 1770 gotoxy 19,9:input "Gesucht wird: ",a$ 1775 if len(a$)=0 then a$«"???" 1780 for i=1 to anzahl 1785 if instr(O.wertS(a.i),a$)«0 then goto 1855 1790 gosub rechteck:gotoxy 19,7:? "Editieren:" 1795 for il=1 to Posten:gotoxy 19,8+il 1800 Print name$(il);": 1805 print wert$(i1,i):next il 1810 gotoxy 19,15:? "Loeschen/weiter/edit/*" 1815 b$-chr$(inp(2)) 1820 if b$<>"L" and b$<>"l" then goto 1835 1825 for il=l to posten:swap Werts(il,i),wert${il,anzahl):next il 1830 anzahl=anzahl-1:i=anzahl+1:goto 1855 1835 if b$«"W" or b$«"w" then goto 1855 1840 if b$-"*" then i-anzah1:goto 1855 1845 if b$< >"E" and b$<>"e" then goto 1855 1850 gotoxy 19,16-.? name$(a);": ";:input wert$ (a. i): i-anzahl 1855 next i:return 1865 ENDE: 1870 color 1,1,1,1,1: fuell=1: xpos1=365: xpos2=550: ypos1=174: ypos2=194 1875 gosub eckrund 1880 color 1,1,1,1,0: fuell=1: xpos1=360: xpos2=545: ypos1=169: ypos2=189 1885 gosub eckrund 1890 gotoxy 22, 11:? " Auf. Wiedersehen !!!" 1895 a=inp (2) : end 1905 FULLWIND: 1910 poke gintin,3 1915 poke gintin+2,5 1920 poke gintin+4,0 1925 poke gintin+6,1 1930 poke gintin+8,658 1935 poke gintin+10,417 1940 gemsys 105 1945 return 1955 CLEARDESK: 1960 color 1,1,1,1.1: 1965 xpos1=-1 :xpos2=638 :ypos1=—40:ypos2=-20 1970 gosub RECHTECK:color 1,1,1 1975 return 1980 ' ---------------------------------------------- 1985 SCHRUMPFBOX: 1990 schrumpf%=1 1995 GROWBOX: 2000 poke control+2,8 2005 poke Control+4,1 2010 poke gintin, xalt 2015 poke gintin+2, yalt 2020 poke gintin+4, breit1 2025 poke gintin+6, hoch1 2030 poke gintin+8, xneu +1 2035 poke gintin+10,yneu +38 2040 poke gintin+12,breit2 2045 poke gintin+14,hoch2 2050 gemsys 73 + schrumpf% 2055 schrumpf%= 0 2060 return 2065 ' -------—-------------------------------------------------------- 2070 INIT: 2075 aes#=gb 2080 control = peek(aes#) 2085 global = peek(aes#+4 ) 2090 gintin = peek(aes#+8 ) 2095 ginout = peek(aes#+12) 2100 addrin = peek(aes#+16) 2105 addrout = peek(aes#+20) 2110 return 2115 ' ---------------------------------------------------------------- 2120 MAUS: 2125 poke contr1,124 2130 vdisys 2135 xmaus=peek(ptsout)-1 2140 ymaus=peek(ptsout+2)-38 2145 key=peek(intout) 2150 return 2155 ' -------------—-------------------------------------------------- 2160 MAUSFORM: 2165 if mausnr>7 then return 2170 add#=gb 2175 gintin=peek(add#+8) 2180 addrin=peek(add#+16) 2185 poke gintin,mausnr 2190 poke addrin,0 2195 gemsys(78) 2200 return 2205 ' ----------------------------------------------------------------- 2210 RECHTECK: 2215 poke contrl ,11 2220 poke contrl +2 ,2 2225 poke contrl +6 ,0 2230 poke contrl +10,1 2235 poke ptsin,xpos1 +1 2240 poke ptsin+2,ypos1 +38 2245 poke ptsin+4,xpos2 +1 2250 poke ptsin+6,ypos2 +38 2255 vdisys 2260 return 2265 '------------------------------------------------------------------ 2270 ECKRUND: 2275 poke contrl ,11 2280 poke contrl +2.2 2285 poke contrl +6,0 2290 if fuell= 0 then poke contrl+10,8 else poke contrl+10,9 2295 poke ptsin , xpos1 +1 2300 poke Ptsin+2, ypos1 +38 2305 poke ptsin+4, xpos2 +1 2310 poke ptsin+6, ypos2 +38 2315 vdisys 2320 return 2325 '-------------------------------------------- 2330 ' 2335 rem ######################################### 2340 rem #### You have hardly reached the END #### 2345 rem #########################################