Letzte Zeile statt erster anzeigen (reverse?)
birdman
- cgi
Hallo zusammen,
ich lese mit nachfolgendem CGI-Skript mehrere Text-Dateien ein, die nach folgendem Schema aufgebaut sind:
wert11 | wert21 | wert31|
wert12 | wert22 | wert32|
wert13 | wert23 | wert33|
Ich gebe dann als HTML für jede Datei nur eine Zeile aus und zwar die jeweils erste Zeile je Datei, z.B. in der Art:
Datei1 wert11 xyz wert31
Datei2 wert11 xyz wert31
Mein Problem ist nun, daß ich gerne statt der ersten Zeile je Datei jweils die letzte Zeile ausgeben möchte. Es sollte wohl mit "reverse" funktionieren, allerdings probiere ich nun schon seit mehreren Wochen immer mal wieder daran herum und ich bekomme es einfach nicht hin. Meist "drehe" ich nur die einzelnen Werte, also erzeugt die Ausgabe statt "wert31" "13trew".
Ich weiß, dies ist ein Forum zum Selberlernen und nicht zum Abgreifen fertiger Lösungen. Aber ich komme beim besten Willen nicht weiter, also Danke schon mal für jeden Tip.
Gruß, Birdman
Das Skript:
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
my @DAT_Dateien = glob("???-????.dat");
print "Content-type: text/html\n\n";
print qq|
<html>
<head>
<title>Test-Ausgabe</title>
</head>
<body>
|;
foreach (@DAT_Dateien) {
open(DATEI,$_);
my $Spalten = <DATEI>;
my ($back, $datum, $tour, $action, $strecke, $profil, $schild, $esskont, $essziel, $dusch, $gesamt, $name, $komment) = split(/|/,$Spalten);
close(DATEI);
foreach ($_) {
print qq|
<table align="center" border="0" style="font-family: Arial, Helvetica, sans-serif; font-size:12;">
<tr>
<td width="320" align="left" style="font-size:10pt;font-family: Arial, Helvetica, sans-serif;">$tour</td>
<td width="80" align="center" style="font-size:10pt;font-family: Arial, Helvetica, sans-serif;">$datum</td>
</tr>
</TABLE><clear="all">
|;
}
}
print "</body></html>\n";
Guten Tag,
Mein Problem ist nun, daß ich gerne statt der ersten Zeile je Datei jweils die letzte Zeile ausgeben möchte.
Mal so gefragt, spricht etwas dagegen, die Daten gleich "reverse" in die Dateien zu schreiben?
my $Spalten = <DATEI>;
Wenn du die sämtliche Zeilen der Datei einlesen willst, müsstest du einen Arry statt eines Skalares nehmen.
Das wäre das, was mir so auf den ersten Blick aufgefallen ist.
mfg Torsten
Hallo Torsten,
Mal so gefragt, spricht etwas dagegen, die Daten gleich "reverse" in die Dateien zu schreiben?
leider ja, da die Dateien (ca. 50) schon existieren.
birdman
Hello again,
Mal so gefragt, spricht etwas dagegen, die Daten gleich "reverse" in die Dateien zu schreiben?
leider ja, da die Dateien (ca. 50) schon existieren.
Schade eigentlich ;-)
Dann musst du wohl oder übel den Weg über die reverse-Funktion gehen. Dazu musst du aber die Zeilen deiner Datei komplett in einen array einlesen und dann "umdrehen":
@zeilen = <DATEI>;
@zeilen = reverse(@zeilen);
Alternativ könntest du auch die letzte (wohl aktuellste) Zeile so ausgeben:
my $n = @zeilen;
print "$zeilen[$n]\n";
Damit müsstest du afaik das letzte Element des Arrays ausgeben können.
mfg Torsten
Hi Sechfried,
Danke erstmal für Deine Antworten. Ich weiß was Du meinst, theoretisch zumindest. Aber irgendwie hab ich ein Brett vor dem Kopf bzw. hab in meinem Skript vorab einige Dinge schon rausgeschmissen. Hab noch etwas getüftelt, bin aber der Lösung leider noch nicht sehr nahe. Werde es mal weiter probieren, außer Du hast noch einen direkten Tip wo in dem Skript anzusetzen ist.
Danke nochmal,
Birdman
Hi,
In Perl kann ich Elemente eines Arrays mit negativen Index herausgeben. Also einfach das ganze Array von hinten ausgeben. Die zahl der Elemente eines Arrays bekommst du, aus dem skalaren Kontext eines Arrays ($elemente = @Array). Danach das negative davon immer um eines erhöhen, dann war das das Problem
Grüße Andres Freund