Einzelnen Beitrag anzeigen

Benutzerbild von Coder
Coder

Registriert seit: 27. Feb 2004
Ort: Bochum
203 Beiträge
 
Delphi 3 Professional
 
#1

welches Datei-Speicherformat/Datei-Modus

  Alt 2. Jun 2004, 18:20
(Verzeiht, eigentlich ist das ein VB Projekt, aber ich finde, die Lösung des Problems kann in delphi od VB gleich umgesetzt werden. Wenn VBler eine konkrete Idee haben: => gerne)

Ich muß eine kleine, textbasierte Datenbank. (ca. max 500 Rezepte/Datensätze) erstellen.
D.h. man muß sie mit notepad editieren können..

mhh, nun ja, vielleicht ist "Datenbank" nicht das richtige Wort..

eher "Speicherformat".

Rezepte sollen später (bei nächster Verordnung) wieder geladen und abgeändert werden können.

Theoretisch könnte man (wie es vorher war) weiterhin die Rezepte separat in einer Datei speichern.
(für jedes 1 Datei)
Nur dachte ich hat man bei solchen Dateigrößen von ca. 400 BYTE pro Rezept (incl. PatDaten+aller Tees) eine ziemliche Platzverschwendung und ein Durcheinander, weil der der MS OpenDialog ja nicht gerade die Übersicht bietet - mit seinen 6x3(oder weniger je nach Name) angezeigten Dateien.
Und dann ist die Frage: wie unterscheide ich die Rezepte? Anhand des PatNamens, Datums (=> Dateinamenlänge wird unübersichtlich)
Das Problem hätten die gerne gelöst.
und das man dann nicht doppelt speichert (kam vor)

Da dachte ich, ich speichere alles in einer (1) Datei. (max. 200 KB)
Dann kann man in einem Rutsch alles lesen/scannen und dann per append wieder abspeichern (weil Hash und RP-Nummer das jeweilige Rezept identifizieren).

Alte Rezepte "ab einem bestimmten Datum" werden aus der Datei entsorgt (nur die letzten 3 pro Pat) und notfalls extern gesichert.
Somit bleibt die Datei schön klein und bei - ich denke max 500 (in der Praxis pro Jahr 300 Rezepten) (ca 400 Byte * 300 Pat = 120 KB)
Das sollte handhabbar sein.

Nun war eben nur meine Frage, mit welchem Modus ich die zum lesen/schreiben öffne und möglichst schnell lese.
ein direktes Suchen in den Datensätzen nach Einzelheiten wie in einer richtigen Datenbank ist nicht notwendig.
Nur die Rezepte sollten den PatNamen zuordbar sein.
-----------

Mein vorgeschlagenes Format (Reihenfolge) und relevante Daten


Format/Daten: (für zwei aufeinanderfolgende gesp. Datensätze)
Nr 1,RezCRC, PatCRC, Nachname, Vorname, Geschlecht, Adresse, Plz, Ort, Gebdat, RezDatum, Tee1, tee2, tee3..
Nr 2,RezCRC2, PatCRC2, Nachname2, Vorname2, Geschlecht, Adresse2, Plz2, Ort2, Gebdat2, RezDatum2, Tee1a, tee2a, tee3a..


Legende:
-Tee1= TeeNummer(aus Liste)+TeeName+Gramm(verordnete)
-Geschlecht= 1 od. 2; (= m/w) ;für Anrede
-PatCRC - muß nicht, - aber dann kann man die Pat besser auseinander halten
(CRC= CRC32 Summe)
-eigentlich könnte man die Daten der Patienten (Name Addr, Geb) durch eine Nummer (od. Hash) ersetzen - doch mir ist lieber, daß die Daten vollständig zum Rezept zugeordnet werden können.
-----------

Wichtig ist eben die volle Einsehbarkeit und Editierbarkeit mit Notepad (denken wir mal die 64k Grenze weg).

So, -
Was meint Ihr - ist das Format in Ordnung?
- Evtl könnte ich die PatientenDaten zusätzlich in einer ExtraDatei speichern und nachfolgend die neugespeicherten RezeptNummern dort für jeden speichern+ einlesen.
- jmd hatt die Idee, das im XML-Stil zu speichern... doch damit kenne mich mich nicht aus und jmd anders meinte, dies sei auch zu umständlich

Dann die zweite entscheidende Frage:
Wie speichere ich das ganze:
a) "sequentiell" mit:
öfnnen zum Lesen, ob RezCRC/Pat-CRC vorhanden, - dann
Speichern:
Print #1, PatDaten, ... , Datum, Teedaten, "ENDE_Rp": ' (Datei) pro Datensatz

_____
und lese (zum LADEN) das ganze ab einer gefundenen RezCRC/Pat/Datum jeweils bis "ENDE_Rp" (Pro Datensatz wieder aus)

b) im "Pseudo"-Binary/Random Modus:
(erst nach vorh./doppelter CRC in Datei scannen), dann SPEICHERN:
Strg$="?"+PatDaten+ ... + Datum+"?"Teedaten+"?" '(Pro Datensatz)
Print #1, Strg$
____
und dann zum Lesen wieder:
Line input, #1, Zeile$
und dann - entweder:
1) Sign1=instr(1,Zeile,i): Sign2=instr(1,Zeile,i+Sign1): A=MID$(Zeile,Sign,Sign2), :
oder:
2) oder for x.... : A=MID$(Zeile,x,1), If A='(?)' then: extract_Name_wenn_B_auch-so_ermittelt

UND Welche Trennzeichen verwende ich?
z.B. "«®»░▒▓█@ø♀♫"
die müßten eindeutig sein.. (in den Daten kommen eigentlich nur Zahlen und Normale Buchstaben, ok, evtl. mal ein 'á' oder vielleicht ein türk. 'Ç' (SEEEEHR selten)) aber an sonsten nichts außergewöhnliches.
und es wäre gut, wenn man sie mit Notepad/Word und einer SystemSchrift (Terminal/Verdana/TimesNR o.ä. erkennen und mit ALT+64) einsetzen könnte.
- Evlt kann ich auch nach 2 aufeinanderfolgenden Zeichen SUCHEN, sollten sich keine eindeutigen, leichten finden lassen.


Ach ja: ich weiß das VB wunderbare und effizientere Datenbanken mitbringt..
u.a. auch eine textbasierte DAO(?) Verwaltung.
aber die wollen wenig Müll und Veränderungen auf ihrem System.
Daher bitte ich, nur auf die oben genannten Daten einzugehen.


Ich hoffe, Ihr habt verstanden, was ich meine und habt Ideen:
1. Format ok?
2. welches Format Schreiben/Lesen / welcher Datei-Modus (Sequ/String m. Lineinput)
3. Trennzeichen zum Parsen des Strings
  Mit Zitat antworten Zitat