Mit Perl eine zeile aus einer *.txt (GB) löschen

Fragen oder Probleme mit HTML, PHP oder CSS?

Mit Perl eine zeile aus einer *.txt (GB) löschen

Beitragvon dragonl am 29.06.2005, 15:09

ich habe mir da ein GB in Perl geprogt, im grunde funktioniert auch alles (was bis jetzt da ist :)), es hat nur eien schönheitsfehler !
im admin bereich hat man die möglichkeit einen eintrag zu löschen, das funktionier auch. aber NUR wenn ich den letzten eintrag (der erstellt wurde) lösche, wir ein zeilen umbruch mehr erzeugt !?
wenn ich den letzten eintrag (3) lösche, wird aus
datum1|zeit1|name1|email1|homep1|text1|ip1
datum2|zeit2|name2|email2|homep2|text2|ip2
datum3|zeit3|name3|email3|homep3|text3|ip3

dieses hier
datum1|zeit1|name1|email1|homep1|text1|ip1
datum2|zeit2|name2|email2|homep2|text2|ip2

sieht ganz normal aus, habe es nach dem lösche auch kontroliert !
die letzte zeile ended direkt hinter der "ip", so wie es seien soll.
und wenn nun ein neuer eintrag gespeichert wird (der neue wird mit print DABA "\n".$eintrag; in die txt geschrieben) macht sich das sehr bemerkbar, dan sieht das so aus
datum1|zeit1|name1|email1|homep1|text1|ip1
datum2|zeit2|name2|email2|homep2|text2|ip2

datum4|zeit4|name4|email4|homep4|text4|ip4

was logischerweise einen komplett lerren eintrag im gb anzeigen lässt.
wenn ich einen eintrag aus der mitte oder den ersten lösche, funktioniert alles wunderbar.

ich habe schon versucht mit einer if zu überprüfen ob die einzelnen array eintrage leer o.ä.sind aber das hatnicht funktioniert. :evil:

hier habt ihr mal den code den ich bis jetzt habe
Code: Alles auswählen
   elsif($FormularPost{'action'} eq "Loeschen"){
         my @eintraege = &ReadEintraege;
         my $geloescht = delete @eintraege[($FormularPost{'eintrag'}-1)];
             #in $FormularPost{'eintrag'} wird die nummer des eintrages übergeben
         my @rest;
         foreach(@eintraege){
                 if($_ == "\n" or $_ == "%0D%0A" or $_ == ""){
                    }
                    else{ push(@rest, $_); }
                 }
         open(DABA, ">daba.txt") || die("Fehler beim öffnen der Datanbank");
         print DABA @rest;
         close(DABA);
   
         #... unwichtiger code ...
        }

############################################
sub ReadEintraege{
    open(DABA,"<daba.txt") || die("Fehler beim lesen der vorhandenen Gaestebucheintraege");
    my @eintraege = <DABA>;
    close(DABA);
    return @eintraege;
    }


ich hoffe ihr könnt damit was anfangen und mir helfen, den ich schnall einfach nicht wo dieser extr zeilen umbruch her kommt :lol:

MFG
dragonl

achja..
wenn ich zB: die letzten drei eintraege lösche, werden keine drei zeilenumbrüche erzeugt, sondern immer nur dieser eine ...der mich noch um meinen verstand bringen wird :shock:
dragonl
 
Beiträge: 372
Registriert: 14.09.2004, 14:10
Wohnort: Bremen


Beitragvon scorbio am 29.06.2005, 15:21

würde es funktionieren wenn du nachdem eintragen eines GB-Eintrages einfach abfragst, ist zeile drüber leer wenn ja DELETE?
scorbio
 
Beiträge: 159
Registriert: 07.06.2005, 10:07
Wohnort: Erlangen

Beitragvon CoolCasimir am 29.06.2005, 15:26

Ich habe das immer mir Arrays gelöst, alle Zeilen in ein Arry und die entsprechende(n) beim Zurückschreiben einfach ausgelassen.
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Beitragvon dragonl am 29.06.2005, 15:40

ja, habt beide recht !

@CoolCasimir
ich habe meine einträge doch auch in einem Array (zeile 1) und überprüfen tu ich sie auch (zeile 5-9), oder habe ich da irgend wo einen gedanken fehler drinn ?
Code: Alles auswählen
         my @eintraege = &ReadEintraege;
         my $geloescht = delete @eintraege[($FormularPost{'eintrag'}-1)];
             #in $FormularPost{'eintrag'} wird die nummer des eintrages übergeben
         my @rest;
         foreach(@eintraege){
                 if($_ == "\n" or $_ == "%0D%0A" or $_ == ""){
                    }
                    else{ push(@rest, $_); }
                 }
dragonl
 
Beiträge: 372
Registriert: 14.09.2004, 14:10
Wohnort: Bremen

Beitragvon scorbio am 29.06.2005, 21:39

mhm wenn er das über sieht denn ist evlt ein NULL-wert irgendwo?

kenn mich da net so aus, schreibe nix in Dateien. (schreibe nur Dateien, lese aber nix mehr aus dennen Raus.)
scorbio
 
Beiträge: 159
Registriert: 07.06.2005, 10:07
Wohnort: Erlangen

Beitragvon dragonl am 29.06.2005, 23:23

habe mittlerweile das problem selber lösen können, war gar nicht so schwer !
da ich den zeilenumbruch immer VOR jedem neuen eintrag gesetzt habe
. . .("\n".$datum."|".$zeit.".......".$ip)
wird der zeilenumbruch immer in der zeile DAVOR gespeichert
. . .(29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n
. . . 29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n
. . . 29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx)
ist ja logisch, dass er text erst NACH dem zeilenumbruch umgrbrochen wird ! :lol:
und wenn ich nun den letzten lösche, bleibt der zeilen umbruch auf der vorherigen zeile.
. . .(29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n
. . . 29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n)
was mir mittlerweile auch logisch finde ! :lol:
wenn nun eine neuer eintrag erstellt (gespeichert) wird
. . .("\n".$datum."|".$zeit."......".$ip)
habe ich zwei zeilenumbrüche hintereinander
. . .(29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n
. . . 29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx\n
. . . \n
. . . 29.05.2005|13:06|dragonl|....|xxx.xxx.xxx.xxx)
ist ja klar, das dann in der *.txt.-datei eine leerzeile entsteht ! :lol:

OMG... und dafür habe ich fast 5 Tage gebraucht :shock: :roll:

habe es nun so geändert, das der zeilenumbruch HINTER dem eintrag steht
. . .($datum."|".$zeit."......".$ip."\n")
und schon funktioniert alles so wie es soll :mrgreen:

Ich danke für eure hilfe

MFG
dragonl
dragonl
 
Beiträge: 372
Registriert: 14.09.2004, 14:10
Wohnort: Bremen

Beitragvon CoolCasimir am 29.06.2005, 23:25

Ja, manchmal sieht man den Wald vor lauter Bäumen nicht, ich kenne das. :wink:
Kann ich dicht machen?
CoolCasimir
Moderator
 
Beiträge: 2194
Registriert: 14.01.2004, 14:07
Wohnort: Hansestadt Hamburg

Beitragvon dragonl am 29.06.2005, 23:35

joa, meinet wegen kannst hier abschließen (ist ja auch schon spät 23:33 uhr - FEIERABEND) :lol:

sorry, weil vergessen zu sagen das dicht gemacht weden kann :oops:

MFG
dragonl
dragonl
 
Beiträge: 372
Registriert: 14.09.2004, 14:10
Wohnort: Bremen

Beitragvon scorbio am 30.06.2005, 00:42

:lol:

kann passieren. aber wir haben es ja auch net gleich gesehn :oops:
scorbio
 
Beiträge: 159
Registriert: 07.06.2005, 10:07
Wohnort: Erlangen


Zurück zu HTML, PHP & Co.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste