So eine Art 'Datenbank' in Pascal

Hallo zusammen,

Ich schreibe zur Zeit gerade ein Programm, welches TANs für einen FTP-Zugang generiert. Um eine Textdatei mit TANs zu erstellen muss man dabei den Benutzernamen und eine ID eingeben. Das hatte bis Dato noch keinen Sinn …

aber jetzt geht es darum, den Benutzernamen und die dazugehörige ID in eine (Text-)Datei zu schreiben. Wenn man das nächste mal eine bereits vergebene ID benutzen will, soll eine Meldung kommen, dass die ID bereits für den-und-den Benutzer verwendet wird. Außerdem soll man sich anzeigen lassen können, welche Benutzer welche ID haben, usw.

Ich weiß nicht so recht, wie ich das realisieren soll … ich will von euch jetzt keinen kompletten Code sondern einfach einen Lösungsansatz.

Danke schonmal für eure Hilfe!

Hallo,

du erstellst einen Record-Typ, der die Daten der Benuzter enthält.

Zu diesem Record definierst du eine Dateivariable (file of MyRecord).
Außerdem ein Array, dieses Typs von ausreichender Länge (in Delphi kann das auch ein dynamisches Array sein).

Dann liest du aus der Textdatei die Records in das Array und vergleichst sie mit der Eingabe.

WICHTIG: diese Vorgehensweise macht nur Sinn, wenn die Anzahl an Benutzern überschaubar ist (ein paar hundert bis tausend). Sinst wird das sequentielle Durchlaufen des Arrays zu langsam. Dann müsstest du noch einen Sortier- und Suchalgorithmus einbauen oder gleich eine Datenbank verwenden.

Gruß, Niels

Danke schonmal!

Jetzt hab ich aber das Problem, wenn ich den Datensatz schreiben will, kommt vom Compiler die Meldung „Invalid file type“. Woran kann das liegen? Hier hab ich mal die wesentliche Teile meines Quellcodes:

Hier erst die Erstellung des Recordtyps:

TYPE struktur=RECORD
name:STRING;
ID:INTEGER;
END;

Und hier der Teil, wo die Dateien geschrieben werden sollten …

ASSIGN(benutzer,pfadb);
RESET(benutzer);
WRITELN(benutzer,satz[i]);
CLOSE(benutzer);

Die Variable „benutzer“ ist als File of struktur deklariert und „satz“ als ARRAY [1…50] OF struktur.

Woran liegt das? Ich komme nicht dahinter, tut mir leid …

Hallo,

RESET(benutzer);

versuchs mal mit

REWRITE(benutzer);

Gruß, Niels

Ich habs hinbekommen. Allerdings ergab sich jetzt schonwieder die nächste Frage … und zwar: Darf ich die Variablen „name“ und „ID“, die ich oben im Record-Typ deklariert hab auch als normale Variablen verwenden im restlichen Programm? Weil die ID wird z.B. später nochmal in die eigentliche TAN-Datei mitreingeschrieben. An der Stelle meckert er jezt aber rum, dass er die Variable „ID“ nicht kennt …

Tut mit leid wenn ich ein wenig nerve.

Darf ich die Variablen „name“
und „ID“, die ich oben im Record-Typ deklariert hab auch als
normale Variablen verwenden im restlichen Programm?

du musst immer mit Satz[i].name (bzw Satz[i].ID) darauf zugreifen.
Du kannst natürlich zusätzlich eine allgemeine Variable „name“ oder „ID“ deklarieren. Die hat dann aber nichts mit „Satz“ zu tun.

Wenn du auf „Satz“ außerhalb der Prozedur/Funktion zugreifen willst, in der „Satz“ deklariert ist, bekommst du die gleiche Fehlermeldung. Die Deklaration muss dann außerhalb der Prozedur deklariert werden zB direkt hinter der „implementation“-Direktive oder sogar im „interface“-Abschnitt der Unit.