Hallo!
Es gibt im Prinzip zwei Möglichkeiten, die zwar gundsätzlich gleich sind, aber sich darin unterscheiden, ob die Text-Datenbank sehr groß ist/wird.
a) Du lädst die komplette Datei ein und bearbeitest das ganze im Speicher um dann die Daten wieder geändert in die Datei zu speichern.
b) Du bearbeitest die Datei zeilenweise (jede Zeile einzeln einlesen und ebarbeiten) und speicherst die bearbeiteten Daten erst in eine temp. Datei und kopierst diese dann um.
Wenn möglich, empfehle ich a) !
Hier die eigentliche Bearbeitung mit Möglichkeit a). Bei b) mußt du das ganze entsprechend anpassen und ändern.
Code:
my $DBName = "file.tdb";
my @DBData = ();
# MAIN
######
# erst mal Datanbank einlesen...
&LoadDB;
# Hier jetzt User add oder delete...
&AddUser(12, "Dieter Müller");
&DeleteUser(53);
&SaveDB;
exit 0;
# Funktionen
############
sub LoadDB()
{
if (open(TDBFILE,"<$DBName")
{
my @TextDB = ();
my $DBEntry;
@TextDB = <TDBFILE>;
close(TDBFILE);
foreach $DBEntry (@TextDB)
{
my ($PEntry,$UserName) = split(/:/, $DBEntry);
# Ich gehe davon aus, das die Einträge durchgehend sind...
push(@DBData, $UserName);
}
}
else
{
# Hier Fehlerbehandlung...
}
}
sub SaveDB()
{
if (open(TDBFILE,"<$DBName")
{
my $i;
for(i = 0; $i < $#DBData; $i++)
{
print TDBFILE "$i:$DBData[$i]\n";
}
close(TDBFILE);
}
else
{
# Fehlerbehandlung...
}
}
# Hier kommen jetzt Funktionen zum hinzufügen oder entfernen eines Users
sub AddUser($Entry, $User)
{
my ($Entry, $User) = @_;
$DBData[$Entry] = $User;
}
sub DelUser($Entry)
{
my ($Entry) = @_;
$DBData[$Entry] = "";
}
Falls die Einträge in der Text-Datenbank nicht durchgehend ihrer Nummer sind, solltest du für @DBData eine Hash-Table (%DBData) benutzen.
Gruß
Robert
[Diese Nachricht wurde von robert am 22. Februar 2000 editiert.]
Lesezeichen