22. April 2012: Kleiner Einblick in aktuellen Zwischenstand Programmierung
Dipl.-Kfm. Winfried Sobottka
Ausgangspunkt: 1.355 erstklassige Datensätze von Rechtsanwältinnen aus diversen Städten, aufwändig mit P & C in eine Textdatei gestellt. Ein "Datensatz" sah z.B. so aus:
Das folgende Programm, aus dem Handgelenk und nicht unbedingt vorzeigbar strukturiert geschrieben, stellte dann alles in eine unsortierte Datei:
Dann baute ein weiteres Programm mir den Feldinhalt eines Zusatzfeldes zusammen, der sich aus Nachnamen, Trennzeichen (Chr$(0)) und Vornamen zusammensetzt. Nach dem Inhalt dieses Feldes kann alphabetisch nach Namen sortiert werden. Dann standen 1.355 Datensätze immer noch unsortiert in einer Datei. Ich brauchte ein gut strukturiertes und gut dokumentiertes Programm, das alle wichtigen Subroutines enthielt, um mit wenig Aufwand beliebige Selektionen und Sortierungen durchzuführen, und baute gleich eine einfache Sortierung ein. Sie ist erstens primitv, zweitens nicht hinsichtlich der Geschwindigkeit optimiert - vor jedem Lesen und jedem Schreiben erfolgt ein "OPEN", nach dem Lesen bzw. Schreiben ein "Close":
Das Programm brauchte in der kompilierten Version fast exakt 6 Minuten, dann war die Datei nach dem Sortiernamen sortiert. Das ist nicht gerade blitzschnell, aber anderes hatte ich auch nicht erwartet: Der eigentlich Sortieralgorithmus ist banal und war in zwei Minuten geschrieben: 8 for satzstart%=1 to anzahl-1: Es werden ganze Sätze ausgetauscht, nicht nur ein Index organisiert - und die Sätze haben eine Länge von 1.024 Bytes. Dabei muss jeder Satz beim ersten Lesen zergliedert werden, um an den Sortiernamen heranzukommen (wobei standardmäßig nach allen Feldern zergliedert wird) und vergleichen zu können, nach jedem Durchlauf werden die beiden Tauschpartner nochmals am Stück gelesen und am Stück geschrieben. Millionen Sätze kann man nicht so verarbeiten, dafür muss eine intelligente Indexverwaltung her - deren Programmierung Zeit und möglichst Ruhe vor den gepulsten elektromagnetischen Strahlen und anderen Aufgaben voraussetzte (1 Wochenende in einer Hütte in Sibirien mit 220 Volt Stromanschluss... und einem frischen Bett...) Drei Screenshots: Einblick in data.all (unsortierte Datei), Einblick in sdata.all (sortierte Datei), Zeitmessung des Sortierlaufes. PS.: Bei der schnellen Übertragung mit P & C kommt es vor, dass Sätze versehentlich doppelt übertragen werden - Maus scheint zu klemmen, und plötzlich hat man einen Satz doppelt in der Textdatei, was aber zunächst nicht auffällt. Im zweiten Screenshot - nach dem Sortierlauf - sieht man einen solchen Fall ganz unten. Ein Programm, um doppelte Sätze aus einer sortierten Datei hinauszuwerfen, ist in zwei Minuten geschrieben.... |
Berufsbezeichnung: Rechtsanwältin Vorname, Name: Regine Herscher Datum der Zulassung: 22.12.1989 Adresse der Kanzlei: Brückstr. 20-26 44135 Dortmund Kammerzugehörigkeit: Rechtsanwaltskammer für den Oberlandesgerichtsbezirk Hamm Kontaktdaten Telefon: 0231-950374-0 Telefax: 0231-95037422 Email: kontakt@ra-herscher.de Zweigstelle Adresse: Brandtstr. 27 45127 Essen Telefon: 0201-10269951 Telefax: 0201-10269952 Zweigstelle Adresse: Johannisstr. 66 49074 Osnabrück Telefon: 0541-93386886 Telefax: 0541-93386885 |
0 DIM daten$(2, 30) 1 feldanzahl% = 28: daten$(2, 1) = "vorname" 2 daten$(2, 2) = "zuname" 3 daten$(2, 3) = "Name" 4 daten$(2, 4) = "titel" 5 daten$(2, 5) = "beruf" 6 daten$(2, 6) = "fachanwalt" 7 daten$(2, 7) = "cofeld" 8 daten$(2, 8) = "strasse" 9 daten$(2, 9) = "plz" 10 daten$(2, 10) = "ort" 11 daten$(2, 11) = "telefon" 12 daten$(2, 12) = "fax" 13 daten$(2, 13) = "email" 14 daten$(2, 14) = zweigstelle$: REM 0,1 oder 2 15 daten$(2, 15) = "strasse" 16 daten$(2, 16) = "z1plz" 17 daten$(2, 17) = "z1ort" 18 daten$(2, 18) = "z1telefon" 19 daten$(2, 19) = "z1telefax" 20 daten$(2, 20) = "z2strasse" 21 daten$(2, 21) = "z2plz" 22 daten$(2, 22) = "z2ort" 23 daten$(2, 23) = "z2telefon" 24 daten$(2, 24) = "z2telefax" 25 daten$(2, 25) = "kammer" 26 daten$(2, 26) = "datum" 27 daten$(2, 27) = "Interessen" 28 daten$(2, 28) = "Sortname" 50 REM 60 REM 70 OPEN "gesamt.txt" FOR INPUT AS #1 75 OPEN "result.txt" FOR OUTPUT AS #2 76 OPEN "result2.txt" FOR OUTPUT AS #3 77 OPEN "data.all" FOR RANDOM AS #4 LEN = 1024: FIELD #4, 1024 AS all$ 80 FOR I = 1 TO 20000 100 LINE INPUT #1, D$: 110 IF INSTR(D$, "*ENDE*") THEN I = 25000: GOTO 1000 120 GOSUB 20000 1000 NEXT I: PRINT "ANZAHL:", anzahl: PRINT "Name:", NOMEN: PRINT "cofeld:", COFELD: PRINT "Strasse:", STRASSE: PRINT "ort:", ORT: PRINT "telefon:", TELEFON 1010 PRINT "telefax:", TELEFAX: PRINT "Datum:", DATUM: PRINT "fachanwalt:", FACHANWALT: GOTO 43000: REM ENDE 2000 REM 2100 REM 2200 REM 2300 REM 20000 IF INSTR(D$, "Vorname") = 0 THEN 20100 20010 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): 20011 PRINT #2, D$: NOMEN$ = D$: NAMEN$ = NOMEN$: GOSUB 26000: PRINT #2, ZUNOMEN$: PRINT #2, VORNOMEN$: PRINT #2, TITEL$: RETURN: REM Vor- und Zuname ggfs. inkl. titel 20100 IF INSTR(D$, "Adresse der Kanzlei:") = 0 THEN 20300 20110 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): PRINT #2, D$: REM ADRESSE ggf. inkl. c/o-Feld 20115 CO = 0: IF INSTR(D$, "c/o") THEN CO = 1: COFELD$ = D$ ELSE STRASSE$ = D$ 20116 LINE INPUT #1, D$: PRINT #2, D$: IF CO = 0 THEN ORT$ = D$: RETURN ELSE STRASSE$ = D$ 20120 LINE INPUT #1, D$: PRINT #2, D$: ORT$ = D$: RETURN 20300 IF INSTR(D$, "Telefon:") = 0 THEN 20400 20310 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): PRINT #2, D$: TELEFON$ = D$: RETURN: REM Telefon 20400 IF INSTR(D$, "Telefax:") = 0 THEN 20500 20410 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): PRINT #2, D$: TELEFAX$ = D$: RETURN: REM Telefax 20500 IF INSTR(D$, "Email:") = 0 THEN 20600 20510 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): PRINT #2, D$: EMAIL$ = D$: RETURN: REM EMAIL 20600 IF INSTR(D$, "Datum der Zulassung:") = 0 THEN 20700 20610 S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): PRINT #2, D$: DATUM$ = D$: RETURN: REM Datum der Zulassung 20700 IF INSTR(D$, "Fachan") = 0 THEN 20800 20710 PRINT #2, D$: FACHANWALT$ = FACHANWALT$ + D$: RETURN: REM Fachanwalt$ 20800 IF INSTR(D$, "Rechtsanw") = 0 THEN 20801 ELSE IF INSTR(D$, "kammer") = 0 THEN PRINT #2, D$: BERUF$ = D$: RETURN: REM Rechtsanwalt o. -amwältin 20801 IF INSTR(D$, "kammer") THEN PRINT #2, D$: KAMMER$ = D$ 20850 IF INSTR(D$, "Zweigstelle") = 0 THEN 20950 ELSE GOSUB 25000: REM FACHANW 20950 IF INSTR(D$, "*") THEN PRINT #2, D$: anzahl = anzahl + 1: GOSUB 30000: RETURN 20999 RETURN 24000 REM 24010 REM 24020 REM 24030 REM 25000 IF zweigstelle = 0 THEN zweigstelle = 1 25001 LINE INPUT #1, D$: LINE INPUT #1, D$: IF INSTR(D$, "Adresse:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z1STRASSE$ = D$: PRINT #2, D$ 25002 LINE INPUT #1, D$: Z1ORT$ = D$: PRINT #2, D$ 25003 LINE INPUT #1, D$: IF INSTR(D$, "*") THEN RETURN 20950 25004 IF INSTR(D$, "Telefon:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z1TELEFON$ = D$: PRINT #2, D$: GOTO 25002 25005 IF INSTR(D$, "Telefax:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z1TELEFAX$ = D$: PRINT #2, D$ 25006 IF INSTR(D$, "Zweigstelle") THEN 25020 25007 GOTO 25003 25020 LINE INPUT #1, D$: LINE INPUT #1, D$: IF INSTR(D$, "Adresse:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z2STRASSE$ = D$: PRINT #2, D$ 25021 LINE INPUT #1, D$: Z2ORT$ = D$: PRINT #2, D$ 25022 LINE INPUT #1, D$: IF INSTR(D$, "*") THEN RETURN 20950 25023 IF INSTR(D$, "Telefon:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z2TELEFON$ = D$: PRINT #2, D$: GOTO 25022 25024 IF INSTR(D$, "Telefax:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z2TELEFAX$ = D$: PRINT #2, D$ 25025 IF INSTR(D$, "Zweigstelle") THEN zweigstelle = 2: GOTO 25030 25026 GOTO 25022 25030 LINE INPUT #1, D$: LINE INPUT #1, D$: IF INSTR(D$, "Adresse:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z3STRASSE$ = D$: PRINT #2, D$ 25031 LINE INPUT #1, D$: Z3ORT$ = D$: PRINT #2, D$ 25032 LINE INPUT #1, D$: IF INSTR(D$, "*") THEN RETURN 20950 25033 IF INSTR(D$, "Telefon:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z3TELEFON$ = D$: PRINT #2, D$: GOTO 25032 25034 IF INSTR(D$, "Telefax:") THEN S% = INSTR(D$, ":"): D$ = RIGHT$(D$, LEN(D$) - S% - 1): Z3TELEFAX$ = D$: PRINT #2, D$ 25035 IF INSTR(D$, "Zweigstelle") THEN 25040 25036 GOTO 25032 25040 RETURN 25100 REM 25200 REM 25300 REM 25400 REM 26000 REM aufteilung nomen$ in vornomen$ und zunomen$ 26010 VORNOMEN$ = "": ZUNOMEN$ = "": WHILE RIGHT$(NOMEN$, 1) = CHR$(32): NOMEN$ = LEFT$(NOMEN$, LEN(NOMEN$) - 1): WEND 26020 TEST% = LEN(NOMEN$): WHILE MID$(NOMEN$, TEST%, 1) <> CHR$(32): E$ = MID$(NOMEN$, TEST%, 1): ZUNOMEN$ = ZUNOMEN$ + E$: TEST% = TEST% - 1: WEND 26030 X$ = "": FOR TT% = LEN(ZUNOMEN$) TO 1 STEP -1: X$ = X$ + MID$(ZUNOMEN$, TT%, 1): NEXT TT%: ZUNOMEN$ = X$ 26040 S% = INSTR(NOMEN$, ZUNOMEN$): VORNOMEN$ = LEFT$(NOMEN$, S% - 2): WHILE RIGHT$(VORNOMEN$, 1) = CHR$(32): VORNOMEN$ = LEFT$(VORNOMEN$, LEN(VORNOMEN$) - 1): WEND 26050 WHILE LEFT$(VORNOMEN$, 1) = CHR$(32): VORNOMEN$ = RIGHT$(VORNOMEN$, LEN(VORNOMEN$) - 1): WEND 26060 S% = 1: yes=0:STELLE% = 1: WHILE S% > 0: S% = INSTR(Stelle%, VORNOMEN$, "."):if s% then yes=1 26070 IF S% > STELLE% THEN STELLE% = S% ELSE S% = 0 26080 WEND:if yes=0 then stelle%=0 26090 IF STELLE% THEN TITEL$ = titel$+LEFT$(VORNOMEN$, STELLE%): VORNOMEN$ = RIGHT$(VORNOMEN$, LEN(VORNOMEN$) - STELLE%) 26081 if instr(vornomen$,".") then 26060 26100 RETURN 29100 REM 29200 REM 29300 REM 29400 REM 30000 REM satz schreiben als textdatei 30050 IF LEN(NOMEN$) > NOMEN THEN NOMEN = LEN(NOMEN$) 30100 IF LEN(COFELD$) > COFELD THEN COFELD = LEN(COFELD$) 30200 IF LEN(STRASSE$) > STRASSE THEN STRASSE = LEN(STRASSE$) 30300 IF LEN(ORT$) > ORT THEN ORT = LEN(ORT$) 30400 IF LEN(TELEFON$) > TELEFON THEN TELEFON = LEN(TELEFON$) 30450 IF LEN(TELEFAX$) > TELEFAX THEN TELEFAX = LEN(TELEFAX$) 30500 IF LEN(EMAIL$) > EMAIL THEN EMAIL = LEN(EMAIL$) 30600 IF LEN(DATUM$) > DATUM THEN DATUM = LEN(DATUM$) 30700 IF LEN(FACHANWALT$) > FACHANWALT THEN FACHANWALT = LEN(FACHANWALT$) 30710 REM PRINT #3,beruf$:PRINT #3,FACHANWALT$:PRINT #3,NOMEN$:PRINT #3,COFELD$:PRINT #3,STRASSE$:PRINT #3,ORT$: 30711 REM PRINT #3,TELEFON$:PRINT #3,TELEFAX$:PRINT #3,EMAIL$ 30715 REM PRINT #3,Z1STRASSE$:PRINT #3,Z1ORT$:PRINT #3,Z1TELEFON$:PRINT #3,Z1TELEFAX$ 30716 REM PRINT #3,Z2STRASSE$:PRINT #3,Z2ORT$:PRINT #3,Z2TELEFON$:PRINT #3,Z2TELEFAX$ 30717 REM PRINT #3,Z3STRASSE$:PRINT #3,Z3ORT$:PRINT #3,Z3TELEFON$:PRINT #3,Z3TELEFAX$ 30800 GOSUB 40000: GOSUB 41000: REM BEREINIGEN, SELEKTIEREN UND ABSTELLEN DER DATEN 30803 NOMEN$ = "": COFELD$ = "": STRASSE$ = "": ORT$ = "": TELEFON$ = "": TELEFAX$ = "": KAMMER$ = "": EMAIL$ = "": DATUM$ = "": 30805 FACHANWALT$ = "": BERUF$ = "": TITEL$ = "": VORNOMEN$ = "": ZUNOMEN$ = "" 30810 Z1STRASSE$ = "": Z1ORT$ = "": Z1TELEFON$ = "": Z1TELEFAX$ = "" 30811 Z2STRASSE$ = "": Z2ORT$ = "": Z2TELEFON$ = "": Z2TELEFAX$ = "" 30812 Z3STRASSE$ = "": Z3ORT$ = "": Z3TELEFON$ = "": Z3TELEFAX$ = "": zweigstelle = 0: zweigstelle$ = "" 30850 RETURN 35000 REM 35100 REM 35200 REM 35300 REM 38803 REM NOMEN$="":COFELD$="":STRASSE$="":ORT$="":TELEFON$="":TELEFAX$="":KAMMER$="":EMAIL$="":DATUM$="": 38805 REM FACHANWALT$="":beruf$="":TITEL$="":VORNOMEN$="":ZUNOMEN$="" 38810 REM Z1STRASSE$="":Z1ORT$="":Z1TELEFON$="":Z1TELEFAX$="" 38811 REM Z2STRASSE$="":Z2ORT$="":Z2TELEFON$="":Z2TELEFAX$="" 38812 REM Z3STRASSE$="":Z3ORT$="":Z3TELEFON$="":Z3TELEFAX$="" 40000 REM ***************************************************************************++ 40001 WHILE LEFT$(VORNOMEN$, 1) = CHR$(32): VORNOMEN$ = RIGHT$(VORNOMEN$, LEN(VORNOMEN$) - 1): WEND 40002 WHILE RIGHT$(VORNOMEN$, 1) = CHR$(32): VORNOMEN$ = LEFT$(VORNOMEN$, LEN(VORNOMEN$) - 1): WEND 40003 WHILE LEFT$(ZUNOMEN$, 1) = CHR$(32): ZUNOMEN$ = RIGHT$(ZUNOMEN$, LEN(ZUNOMEN$) - 1): WEND 40004 WHILE RIGHT$(ZUNOMEN$, 1) = CHR$(32): ZUNOMEN$ = LEFT$(ZUNOMEN$, LEN(ZUNOMEN$) - 1): WEND 40005 WHILE LEFT$(COFELD$, 1) = CHR$(32): COFELD$ = RIGHT$(COFELD$, LEN(COFELD$) - 1): WEND 40006 WHILE RIGHT$(COFELD$, 1) = CHR$(32): COFELD$ = LEFT$(COFELD$, LEN(COFELD$) - 1): WEND 40007 WHILE LEFT$(STRASSE$, 1) = CHR$(32): STRASSE$ = RIGHT$(STRASSE$, LEN(STRASSE$) - 1): WEND 40008 WHILE RIGHT$(STRASSE$, 1) = CHR$(32): STRASSE$ = LEFT$(STRASSE$, LEN(STRASSE$) - 1): WEND 40010 PLZ = VAL(left$(ORT$,7)): PRINT PLZ: PLZ$ = STR$(PLZ): PLZ$ = RIGHT$(PLZ$, LEN(PLZ$) - 1) 40020 S% = INSTR(ORT$, PLZ$) + LEN(PLZ$): ORT$ = RIGHT$(ORT$, LEN(ORT$) - S%) 40030 IF VAL(Z1ORT$) = 0 THEN 40050 ELSE Z1PLZ = VAL(left$(Z1ORT$,7)): PRINT Z1PLZ: Z1PLZ$ = STR$(Z1PLZ): Z1PLZ$ = RIGHT$(Z1PLZ$, LEN(Z1PLZ$) - 1) 40040 S% = INSTR(Z1ORT$, Z1PLZ$) + LEN(Z1PLZ$): Z1ORT$ = RIGHT$(Z1ORT$, LEN(Z1ORT$) - S%) 40050 IF VAL(Z2ORT$) = 0 THEN 40070 ELSE Z2PLZ = VAL(left$(Z2ORT$,7)): PRINT Z2PLZ: Z2PLZ$ = STR$(Z2PLZ): Z2PLZ$ = RIGHT$(Z2PLZ$, LEN(Z2PLZ$) - 1) 40060 S% = INSTR(Z2ORT$, Z2PLZ$) + LEN(Z2PLZ$): Z2ORT$ = RIGHT$(Z2ORT$, LEN(Z2ORT$) - S%) 40070 IF LEN(Z1STRASSE$) = 0 THEN 40080 40075 WHILE LEFT$(Z1STRASSE$, 1) = CHR$(32): Z1STRASSE$ = RIGHT$(Z1STRASSE$, LEN(Z1STRASSE$) - 1): WEND 40077 WHILE RIGHT$(Z1STRASSE$, 1) = CHR$(32): Z1STRASSE$ = LEFT$(Z1STRASSE$, LEN(Z1STRASSE$) - 1): WEND 40080 IF LEN(Z2STRASSE$) = 0 THEN 40090 40085 WHILE LEFT$(Z2STRASSE$, 1) = CHR$(32): Z2STRASSE$ = RIGHT$(Z2STRASSE$, LEN(Z2STRASSE$) - 1): WEND 40087 WHILE RIGHT$(Z2STRASSE$, 1) = CHR$(32): Z2STRASSE$ = LEFT$(Z2STRASSE$, LEN(Z2STRASSE$) - 1): WEND 40090 IF LEN(TELEFON$) = 0 THEN 40093 40091 WHILE LEFT$(TELEFON$, 1) = CHR$(32): TELEFON$ = RIGHT$(TELEFON$, LEN(TELEFON$) - 1): WEND 40092 WHILE RIGHT$(TELEFON$, 1) = CHR$(32): TELEFON$ = LEFT$(TELEFON$, LEN(TELEFON$) - 1): WEND 40093 IF LEN(Z1TELEFON$) = 0 THEN 40096 40094 WHILE LEFT$(Z1TELEFON$, 1) = CHR$(32): Z1TELEFON$ = RIGHT$(Z1TELEFON$, LEN(Z1TELEFON$) - 1): WEND 40095 WHILE RIGHT$(Z1TELEFON$, 1) = CHR$(32): Z1TELEFON$ = LEFT$(Z1TELEFON$, LEN(Z1TELEFON$) - 1): WEND 40096 IF LEN(Z2TELEFON$) = 0 THEN 40099 40097 WHILE LEFT$(Z2TELEFON$, 1) = CHR$(32): Z2TELEFON$ = RIGHT$(Z2TELEFON$, LEN(Z2TELEFON$) - 1): WEND 40098 WHILE RIGHT$(Z2TELEFON$, 1) = CHR$(32): Z2TELEFON$ = LEFT$(Z2TELEFON$, LEN(Z2TELEFON$) - 1): WEND 40099 IF LEN(TELEFAX$) = 0 THEN 40102 40100 WHILE LEFT$(TELEFAX$, 1) = CHR$(32): TELEFAX$ = RIGHT$(TELEFAX$, LEN(TELEFAX$) - 1): WEND 40101 WHILE RIGHT$(TELEFAX$, 1) = CHR$(32): TELEFAX$ = LEFT$(TELEFAX$, LEN(TELEFAX$) - 1): WEND 40102 IF LEN(Z1TELEFAX$) = 0 THEN 40105 40103 WHILE LEFT$(Z1TELEFAX$, 1) = CHR$(32): Z1TELEFAX$ = RIGHT$(Z1TELEFAX$, LEN(Z1TELEFAX$) - 1): WEND 40104 WHILE RIGHT$(Z1TELEFAX$, 1) = CHR$(32): Z1TELEFAX$ = LEFT$(Z1TELEFAX$, LEN(Z1TELEFAX$) - 1): WEND 40105 IF LEN(Z2TELEFAX$) = 0 THEN 40108 40106 WHILE LEFT$(Z2TELEFAX$, 1) = CHR$(32): Z2TELEFAX$ = RIGHT$(Z2TELEFAX$, LEN(Z2TELEFAX$) - 1): WEND 40107 WHILE RIGHT$(Z2TELEFAX$, 1) = CHR$(32): Z2TELEFAX$ = LEFT$(Z2TELEFAX$, LEN(Z2TELEFAX$) - 1): WEND 40108 KAMMER$ = "Hamm" 40109 WHILE LEFT$(DATUM$, 1) = CHR$(32): DATUM$ = RIGHT$(DATUM$, LEN(DATUM$) - 1): WEND 40110 WHILE RIGHT$(DATUM$, 1) = CHR$(32): DATUM$ = LEFT$(DATUM$, LEN(DATUM$) - 1): WEND 40111 WHILE LEFT$(NOMEN$, 1) = CHR$(32): NOMEN$ = RIGHT$(NOMEN$, LEN(NOMEN$) - 1): WEND 40112 WHILE RIGHT$(NOMEN$, 1) = CHR$(32): NOMEN$ = LEFT$(NOMEN$, LEN(NOMEN$) - 1): WEND 40113 S% = INSTR(BERUF$, ":"): IF S% THEN BERUF$ = RIGHT$(BERUF$, LEN(BERUF$) - S%) 40114 WHILE LEFT$(BERUF$, 1) = CHR$(32): BERUF$ = RIGHT$(BERUF$, LEN(BERUF$) - 1): WEND 40115 WHILE RIGHT$(BERUF$, 1) = CHR$(32): BERUF$ = LEFT$(BERUF$, LEN(BERUF$) - 1): WEND 40117 zweigstelle$ = RIGHT$(STR$(zweigstelle), LEN(STR$(zweigstelle)) - 1) 40123 RETURN 41000 daten$(1, 1) = VORNOMEN$ 41002 daten$(1, 2) = ZUNOMEN$ 41003 daten$(1, 3) = NOMEN$ 41004 daten$(1, 4) = TITEL$ 41005 daten$(1, 5) = BERUF$ 41006 daten$(1, 6) = FACHANWALT$ 41007 daten$(1, 7) = COFELD$ 41008 daten$(1, 8) = STRASSE$ 41009 daten$(1, 9) = PLZ$ 41010 daten$(1, 10) = ORT$ 41011 daten$(1, 11) = TELEFON$ 41012 daten$(1, 12) = TELEFAX$ 41013 daten$(1, 13) = EMAIL$ 41014 daten$(1, 14) = zweigstelle$: REM 0,1 oder 2 41015 daten$(1, 15) = Z1STRASSE$ 41016 daten$(1, 16) = Z1PLZ$ 41017 daten$(1, 17) = Z1ORT$ 41018 daten$(1, 18) = Z1TELEFON$ 41019 daten$(1, 19) = Z1TELEFAX$ 41020 daten$(1, 20) = Z2STRASSE$ 41021 daten$(1, 21) = Z2PLZ$ 41022 daten$(1, 22) = Z2ORT$ 41023 daten$(1, 23) = Z2TELEFON$ 41024 daten$(1, 24) = Z2TELEFAX$ 41025 daten$(1, 25) = KAMMER$ 41026 daten$(1, 26) = DATUM$ 41027 daten$(1, 27) = "Interessen" 41028 daten$(1, 28) = "Sortname" 41029 daten$(1,29)="DUMMY" 41100 SATZLEN = 0: FOR ppr = 1 TO feldanzahl%: 41101 IF LEN(daten$(1, ppr)) THEN PRINT #3, daten$(1, ppr): SATZLEN = SATZLEN + LEN(daten$(1, ppr)) 41102 : NEXT ppr: IF GESAMT < SATZLEN THEN GESAMT = SATZLEN 41103 PRINT #3, "**********************" 41104 REM 41105 REM 41110 xx$ = "": satz% = satz% + 1: FOR ppr% = 1 TO feldanzahl% 41120 feld$ = RIGHT$(STR$(ppr%), LEN(STR$(ppr%)) - 1): feld$ = CHR$(255) + feld$ + CHR$(255) 41130 xx$ = xx$ + feld$ + daten$(1, ppr%) 41150 NEXT ppr% 41170 feld$ = RIGHT$(STR$(feldanzahl% + 1), LEN(STR$(feldanzahl% + 1)) - 1): feld$ = CHR$(255) + feld$ + CHR$(255) 41180 xx$ = xx$ + feld$ 41200 LSET all$ = xx$: PUT #4, satz% + 3 41201 RETURN 42000 REM 43000 REM 43110 xx$ = "":FOR ppr% = 1 TO feldanzahl% 43120 feld$ = RIGHT$(STR$(ppr%), LEN(STR$(ppr%)) - 1): feld$ = CHR$(255) + feld$ + CHR$(255) 43130 xx$ = xx$ + feld$ + daten$(2, ppr%) 43150 NEXT ppr% 43170 feld$ = RIGHT$(STR$(feldanzahl% + 1), LEN(STR$(feldanzahl% + 1)) - 1): feld$ = CHR$(255) + feld$ + CHR$(255) 43180 xx$ = xx$ + feld$ 43200 lset all$=xx$:put #4,2: 43300 xx$=space$(1024):lset all$=xx$:put #4, 3 43400 close #4 44000 REM 45000 REM 50000 rem 51000 OPEN "data.all" FOR RANDOM AS #4 LEN = 1024: FIELD #4, 6 AS anzahl$, 6 AS felder$ 51100 anz$ = STR$(anzahl): feldz$ = STR$(feldanzahl%) 51200 LSET anzahl$ = anz$: LSET felder$ = feldz$ 51300 PUT #4, 1: CLOSE #4 51500 END |
0 a=timer: Datafile$="data.all":GOSUB 60300:DIM DATEN$(2,feldanzahl%): REM Einlesen PARAMETER ANZAHL (echter RECORDS) und FELDANZAHL%
|