Schrift
[thread]237[/thread]

file lesen und als html ausgeben



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
oerbb
 2004-04-16 20:46
#2113 #2113
User since
2004-04-16
7 Artikel
BenutzerIn
[default_avatar]
ich möchte aus einem file host namen auslesen und diese im dem file auflisten (html), in welchem ich dieses file lese. ist das möglich? wie kann ich das realisieren?
esskar
 2004-04-16 20:57
#2114 #2114
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es ist bestimmt möglich!
wie sieht denn so ein file aus?
oerbb
 2004-04-16 22:44
#2115 #2115
User since
2004-04-16
7 Artikel
BenutzerIn
[default_avatar]
ein selbst gemachtes datenfile mit drei kategorien, zu diesen je 50 hostnamen.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
IOC
psaf01
psaf02
psaf03
psaf04
psaf05
KB
psrs01
psrs02
psrs03
psrs04
psrs05

SDC
pssd01
pssd02
pssd03
pssd04
pssd05
x-man
 2004-04-16 23:53
#2116 #2116
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Meinst Du sowas?

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
my (@ioc, @kb, @sdc);
open(FH,"<$file") || die $!;
while(<FH>){
chomp;
push @ioc, $_ if($_ =~ /^psaf/);
push @kb, $_ if($_ =~ /^psrs/);
push @sdc, $_ if(_ =~ /^pssd/); #<- Fehler hier _ anstatt $_
close(FH);
#<- Fehler gefunden { fehlt
print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "<table width=100% cellpadding=5 cellspacing=1 bgcolor=black>\n";
foreach(@ioc){
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
foreach(@ikb){#<- Fehler gefunden @ikb anstatt @kb
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
foreach(@sdc){
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
print "</table>\n";
print "</body>\n";
print "</html>\n";
\n\n

<!--EDIT|x-man|1082210379-->
oerbb
 2004-04-17 01:08
#2117 #2117
User since
2004-04-16
7 Artikel
BenutzerIn
[default_avatar]
erst mal vielen dank!
hätte da noch zwei fragen:

1. was macht dieser ausdruck?
Code: (dl )
push @ioc, $_ if($_ =~ /^psaf/);

2. muss/kann ich für die variablen $_ einen namen setzen?
pktm
 2004-04-17 01:48
#2118 #2118
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
$_ steht hier für die aktuelle Zeile in der Datei.
Das kommt von der while-Schleife (while(<FH>) ).
Du könntest das auch so schreiben:
while( my $zeile = <FH> ){}
Dann wäre der Inhalt der Zeile nicht in $_ sondern in $zeile.

Der Ausdruck fügt die Zeile übrigens dem Array @ioc hinzu, wenn die Zeile mit psaf anfängt.
http://www.intergastro-service.de (mein erstes CMS :) )
oerbb
 2004-04-17 02:06
#2119 #2119
User since
2004-04-16
7 Artikel
BenutzerIn
[default_avatar]
Hmm, wo liegt denn der fehler? beim ausführen kommt zwar kein fehler aber nur dieser output:
Code: (dl )
1
2
3
4
5
6
<html>
<body>
<table width=100% cellpadding=5 cellspacing=1 bgcolor=black>
</table>
</body>
</html>
x-man
 2004-04-17 02:37
#2120 #2120
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
my $file = "meinedatei.txt"; # Die zu lesende Datei
my (@ioc, @kb, @sdc); # 3 Arrays für 3 Datentypen
open(FH,"<$file") || die $!; # Datei $file öffnen
while(<FH>){ # Schleife
chomp;
push @ioc, $_ if($_ =~ /^psaf/); # Wenn Zeile mit psaf anfängt, rein ins @ioc. $_ ist eine vordefinierte Varialble
push @kb, $_ if($_ =~ /^psrs/); # Wie oben
push @sdc, $_ if(_ =~ /^pssd/); # Wie oben
close(FH);

print "Content-type: text/html\n\n";
print "<html>\n";
print "<body>\n";
print "<table width=100% cellpadding=5 cellspacing=1 bgcolor=black>\n";
foreach(@ioc){
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
foreach(@ikb){
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
foreach(@sdc){
print "<tr>\n";
print "<td bgcolor=white>$_</td>\n";
print "</tr>\n";
}
print "</table>\n";
print "</body>\n";
print "</html>\n";


Möglicherweise ist die zu lesende Datei leer oder anders als das Beispiel oben. Die Zeilen müssen mit "psaf", "psrs" oder mit "pssd" anfangen. Ändere diese Ausdrücke im Code.
DS
 2004-04-17 02:59
#2121 #2121
User since
2003-08-04
247 Artikel
BenutzerIn
[default_avatar]
Vielleicht ist es einfacher die Kategorien zu erkennen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;

open (DATEI,'test.txt');
  chomp (my @zeilen = <DATEI>);
close (DATEI);

my %eintr;
my $kategorie;
foreach my $zeile (@zeilen) {
  next unless $zeile;
  if ( $zeile eq uc($zeile) ) { $kategorie = $zeile; next }
  push @{$eintr{$kategorie}}, $zeile;
}

my @egal = map {'<b>'.$_.'</b><ul>'.join('',map { "<li>$_</li>" } @{$eintr{$_}}).'</ul>'} keys %eintr;
my $html = '<html><head></head><body>'.join('',@egal).'</body></html>';
print $html;

Hier würden z.B. alle großgeschriebenen Zeilen als neue Kategorien gewertet werden.

@x-man: Du übertreibst es a bisserl mit den prints, ha? ;)

Edit: Der zeigt die Tab's hier eh ned an, dann lass ma des mit da Formatierung gleich bleiben...\n\n

<!--EDIT|DS|1082156641-->
x-man
 2004-04-17 03:43
#2122 #2122
User since
2003-09-11
67 Artikel
BenutzerIn
[default_avatar]
[quote=DS,17.04.2004, 00:59]@x-man: Du übertreibst es a bisserl mit den prints, ha? ;)[/quote]
:-) Ich wollte es oerbb nur deutlicher zeigen :-) Natürlich kann man es auch so schreiben:

print qq~
<html>
<body>
<table>
~;

foreach{
....
}

print qq~
</table>
</body>
</html>
~;

Jetze geh isch ins Bettchen. Gute N8!
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2004-04-16 20:46.