perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 22
Click for quality!




10.02.2012 / 08:29

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragEine Datei pro Hashkey anlegen
Seitenanfang
Hallo Forum,

ich habe eine Textdatei im Format
Timestamp:ID:Anzahl:Link:
Sieht so aus:
1128645152:269095:2:<ein Link>:

Diese Textdatei wird in ein HTML-File umgewandelt. Nun habe ich ein riesengroßes File, was unheimlich lang zum Übertragen braucht.

Daher war meine Idee, aus dem Timestamp in der Textdatei für jeden Tag eine HTML-Datei zu generieren. Also Timestamp == Montag, 12.12.2005 => HTML-File "Montag12122005.html" und so weiter. Wie krieg' ich das hin?

Die Subroutine, die das HTML generiert, sieht bisher so aus:

###########################################################
# HTML-Dateien generieren
sub MakeHTML() {

my $htmlzeile;
my $counter;
my %htmlhash;
my $filedatum;

print "HTML-Seite generieren...\n";
# Textfile einlesen
my @zeilen = &ReadBDNFile($config->{'textfile'});

# Counter für die Spalten mitführen
$counter = 1;
# Durch die Zeilen des Textfiles marschieren
foreach (@zeilen) {
# Zeilen splitten
my ($datum, $id, $anzahl, $link) = split(":",$_);
# HTML-Zeilen zusammenbauen
$htmlzeile .= "<td><a href=\"".$config->{'hrefurl'}. $id ."\" target=\"".$id."\"><img src=\"".$config->{'imgcache'}."/". $id .".jpg\" /></a><br />".localtime($datum)."<br />".$anzahl." mal gesehen</td>";
# Zeilenende bestimmen
if ($counter % $config->{'spalten'} == 0) {
# Spaltenzahl erreicht, Zeilenende
$htmlzeile .= '</tr><tr>';
}
$counter++;
}

# den HTML-Kopf basteln
my $htmlkopf = "<html><head><link rel=\"stylesheet\" type=\"text/css\" href=\"$config->{'stylesheet'}\"><title>$config->{'htmltitle'}</title></head><body>";
# blöd, aber ich muß oben mit 1 anfangen, der Modulofunktion wegen. Die muß ich hier wieder abziehen.
$htmlkopf .= "<h1>gesammelte Werke.</h1><br />".($counter-1)." Bilder<br><table><tr>";

# das HTML-Ende basteln
my $htmlende = "</tr></table></body></html>";

# Zusammenfügen
my @htmlseite = ($htmlkopf,$htmlzeile,$htmlende);

# Und das ganze einer Funktion übergeben, die einfach das Array in eine Datei schreibt.
&WriteBDNFile($config->{'htmlfile'},@htmlseite);
}

Nicht, daß ich nicht schon einen Haufen ausprobiert hätte. Entweder endete es damit, daß ich ein HTML-File mit mehreren hundert Megabyte hatte, oder ein File pro Tag, wo aber doch wieder alle Einträge der Textdatei drinwaren.

Datum: 14.10.2005-22:56

Beitragre: Eine Datei pro Hashkey anlegen
Seitenanfang
Ich nochmal.
Sorry für die irreführende Überschrift -- die kommt noch aus meinen Lösungsversuchen, die allesamt leider nicht geglückt sind.

Danke,

Hans

Datum: 14.10.2005-23:22

Beitragre: Eine Datei pro Hashkey anlegen
Seitenanfang
hier mal ein kleiner ansatz, das kannst du sicher entsprechend ausbauen.


my @days = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my %files;
while(my $line = <DATA>)
{
if(my ($time, $id, $anzahl, $link) = split(/:/, $line))
{
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
$year += 1900;
$mon++;
if($files{$mday . $mon . $year})
{
push @{$files{$mday . $mon . $year}->{'links'}}, $link;
}
else
{
$files{$mday . $mon . $year} = {'links' => [$link], 'jahr' => $year, 'monat' => $mon, 'tag' => $mday, 'wtag' => $days[$wday]};
}
}
}

for my $date (keys %files)
{
my $dref = $files{$date};
print $date . "=>" . $dref->{'wtag'} . "\t" . scalar @{$dref->{'links'}} . "\n";
}

__DATA__
1128645152:269095:2:<ein Link>:
1128645152:269095:2:<ein zweiter Link>:

Datum: 15.10.2005-13:43

Beitragre: Eine Datei pro Hashkey anlegen
Seitenanfang
Hey -- danke!
Nach kurzer Umarbeit funktioniert das jetzt wunderbar!

Datum: 26.10.2005-08:12

-






-
-