Datensatz umsortieren
Birdman
- cgi
Hallo zusammen,
ich arbeite mit einem kleinen Perl-Skript, bei dem aus einem html-Eingabeformular Daten in eine Datei (.dat) mit den entsprechenden Eingaben geschrieben werden. Die Datei ist nach dem Muster
wert1 | wert2 | wert3 |
etc. aufgebaut. Mit einem weiteren Skript werden die Daten dann als html angezeigt (Cheatah: entschuldige die wahrscheinlich nicht ganz korrekte Bezeichnung ;-))). Dabei erfolgt die Anzeige in chronologischer Reihenfolge vom ersten Datensatz (=erste Zeile) bis zum letzten.
Diese Ausgabe würde ich gerne umdrehen, sprich der zuletzt eingegebene Beitrag wird ganz oben angezeigt usw. Ich bin auf den "sort"-Befehl gestoßen, allerdings haben meine Einbauversuche in das Skript nicht gefruchtet. Entweder tut sich gar nix oder das Skript läuft nicht. Ich wäre für einen Hinweis dankbar.
Birdman
Hier ein Extrakt des Skript, ohne die html-"Formatierungen":
#!/usr/bin/perl
use CGI;
$foo = new CGI;
$zeigen = $foo->param('zeigen');
$zeig = ('.htm');
$dat = ('.dat');
$zeigdat = $zeigen . $dat;
$ziel = $zeigen . $zeig;
{
{
print qq|
<html>USW.
|;
}
print qq|
</body>
</html>
|;
}
{
open(FILE, $zeigdat);
while(<FILE>) {
print qq|
<html>USW:
|;
($back, $datum, $tour, $action, $strecke, $profil, $schild, $esskont, $essziel, $dusch, $gesamt, $name, $komment) = split /|/;
$komment =~ s/(.{800})/$1<br>/g;
$komment =~ s/\n*//g;
print qq|
<table USW:
|;
}
close(FILE);
print qq|
</body>
</html>
|;
}
Diese Ausgabe würde ich gerne umdrehen, sprich der zuletzt eingegebene Beitrag wird ganz oben angezeigt usw.
Servus!
Du solltest _bevor_ du die HTML-Datei ausgibst, die Daten in ein Array einlesen.
(Stichwort push, shift). Und dann bei der Ausgabe dieses ja schon in eine Richtung
sortierte Array Stück für Stück auslesen und ausgeben (Stichwort pop, unshift).
Gruß, sokie
Diese Ausgabe würde ich gerne umdrehen, sprich der zuletzt eingegebene Beitrag wird ganz oben angezeigt usw. Ich bin auf den "sort"-Befehl gestoßen, allerdings haben meine Einbauversuche in das Skript nicht gefruchtet. Entweder tut sich gar nix oder das Skript läuft nicht. Ich wäre für einen Hinweis dankbar.
Wenn du schon auf den Befehl sort "gestoßen" bist (ich gehe mal davon aus, du meinst damit "ich habe die Dokumentation gelesen", warum bist du nicht auf reverse gestoßen?
(Du kennst die Dokumentation auf deiner Festplatte?)
Birdman
Hier ein Extrakt des Skript, ohne die html-"Formatierungen":
und ohne Warnungen und use strict :-(
Ohne diese Werkzeuge ist ein sinnvolles Debugging kaum möglich, gerade als Anfänger solltest du das nutzen.
#!/usr/bin/perl
#!/usr/bin/perl -w
use strict;
use CGI;
$foo = new CGI;
$zeigen = $foo->param('zeigen');
$zeig = ('.htm');
$dat = ('.dat');
Warum weist du den Variabeln hier Listen zu?
my $foo = new CGI;
my $zeigen = $foo->param('zeigen');
my $zeig = '.htm';
my $dat = '.dat';
$zeigdat = $zeigen . $dat;
$ziel = $zeigen . $zeig;
my $zeigdat = "$zeigen$dat";
my $ziel = "$zeigen$zeig";
open(FILE, $zeigdat);
Arggggllll, wohger weist du das open klappt?
open(FILE, $zeigdat) || die "Kann $zeigdat nicht öffnen weil:$!";
while(<FILE>) {
while(reverse <FILE>) {
Du solltest unbedingt die Hinweise der mini-FAQ für die newsgroup de.comp.lang.perl.misc
http://www.worldmusic.de/perl/ beachten.
Struppi.
Hi Struppi,
erstmal Danke für Dein "Eingreifen". Hab eigentlich gar keine Erfahrung mit Perl und habe mir einige frei verfügbare und sehr einfache Skripte angesehen, und dann mit viel Probieren für meine Zwecke adaptiert.
use strict;
Das mag das Skript (oder der Server) überhaupt nicht. Leider läuft es dann nicht mehr.
Warum weist du den Variabeln hier Listen zu?
Gute Frage, s.oben. Ehrlich gesagt, weil es so funktioniert hat, habe aber Deinen Hinweis übernommen.
while(reverse <FILE>) {
Da bin ich auch schon drauf gestoßen, leider war mir nicht ganz klar, wo es zu plazieren wäre. Leider bringt der Befehl aber gar nichts, die Ausgabe erfolgt in der alten Reihenfolge.
Birdman
Hi Struppi,
erstmal Danke für Dein "Eingreifen". Hab eigentlich gar keine Erfahrung mit Perl und habe mir einige frei verfügbare und sehr einfache Skripte angesehen, und dann mit viel Probieren für meine Zwecke adaptiert.
use strict;
Das mag das Skript (oder der Server) überhaupt nicht. Leider läuft es dann nicht mehr.
Das heißt es ist Fehlerhaft.
Ich hatte übersehen, dass du (vermutlich) ein CGI Skript verwendest, von daher solltest du noch:
use CGI::Carp qw(fatalsToBrowser);
einbauen, dann siehst du die Fehler in deinem Skript.
Nur kurz: use strict verlangt, dass alle Variabeln mit my deklariert werden, das ist für dich vobn grossen Vorteil, da z.b. Tippfehler dadurch minimiert werden.
while(reverse <FILE>) {
Da bin ich auch schon drauf gestoßen, leider war mir nicht ganz klar, wo es zu plazieren wäre. Leider bringt der Befehl aber gar nichts, die Ausgabe erfolgt in der alten Reihenfolge.
Argggl, mein Fehler, reverse gibt eine Liste zurück, von daher funktioniert while nicht mehr, nimm foreach!
Struppi.
Hi Struppi,
Danke nochmal. Jetzt hat es funktioniert. Von hier aus kann ich jetzt weitertüfteln, werde meine Skripte entsprechend Deinen Hinweisen umändern, immer schön Schritt für Schritt. Damit ich auch sehe, warum was nicht geht.
Grüße, Birdman