Schrift
[thread]2993[/thread]

Mit Perl Dateiinhalte sortieren: Scriptproblem

Leser: 1


<< >> 4 Einträge, 1 Seite
Ronnie
 2005-05-08 18:05
#28339 #28339
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Ja, das von dir gefundene Skript ist tatsächlich in Perl. Es sortiert aber Spalten zu Zeilen um. Wenn ich deine Frage richtig verstanden habe, möchtest du aber einfach nur nach der zweiten Spalte sortieren?! Etwas zeitgemäß überarbeitet sähe das so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

use strict;
use warnings;
use CGI;
use CGI::Carp qw/fatalsToBrowser/;

my $q = new CGI;

open (FILE, "<namensliste.dat") or die "Kann namensliste.dat nicht oeffnen $!\n";
my @table = map { chomp; [split(/\|/, $_)]; } (<FILE>);
close FILE;
my @sorted_table = sort {$a->[1] cmp $b->[1]} @table;

print $q->header, $q->start_html, "<table border='1'>\n";
print "<tr><td>$_</td></tr>\n" for (map {join "</td><td>", @$_} @sorted_table);
print "</table>\n", $q->end_html;
exit;


Um es verwenden zu können benötigst du die Möglichkeit auf deinem Webserver eigene CGIs einzusetzen.

Nach welchem Feld sortiert wird kann bei der sort-Funktion angepasst werden sort {$a->[1] cmp $b->[1]} @table, wobei die Ziffer in den eckigen Klammer angibt welches Feld zu sortieren ist und die Indizes mit Null begonnen werden zu zählen.\n\n

<!--EDIT|Ronnie|1115562347-->
Ronnie
 2005-05-08 19:08
#28340 #28340
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=Dubu,08.05.2005, 16:52]Wie kommst du darauf?
Es listet das Ergebnis nur zweispaltig.[/quote]
Habe die Beschreibung in dem angegebenen Link überflogen. Es war einfacher es neu zu schreiben, als den Code zu entwursten.
Gast Gast
 2005-05-08 16:31
#28341 #28341
Ich habe mal eine Frage zu einem fertigen Script, das vermutlich mit Perl geschrieben wurde... Auf der Suche nach einem Script, das Dateiinhalte (überwiegend .txt - Dateien) ausließt und anschließend alphabetisch sortiert, bin ich auf DIESES Script hier gestoßen :
http://www.inspire-world.de/tippdb/DB4/20040404123218.shtml

Allerdings habe ich jetzt ein Problem : Ich weiß nicht so recht, was für eine Programmiersprache dabei jetzt verwendet wurde, und ob das Script so schon fertig ist (dass man es gleich als Seite ins Netz stellen kann)


So eine "Mitgliederliste" soll nach der 2. Spalte sortiert werden :
Quote
1|Walter|Helmut|2004.02.02|Deutschland|M
2|Meyer|Lisa|2003.12.28|Deutschland|W
3|Müller|Maximilian|2002.05.22|Schweiz|M
4|Lehmann|Hubert|2002.11.01|Oesterreich|M
5|Schulze|Stefanie|2004.01.04|Deutschland|W
6|Wolter|Willy|2002.06.09|Oesterreich|M
7|Thomas|Eva-Maria|2004.01.17|Schweiz|W
8|Schneyder|Jean|2001.09.04|Frankreich|M
9|Clerc|Pascale|2002.11.17|Frankreich|M
10|Benguerel|Sebastian|2003.08.10|Spanien|M
11|Carl|Johanna|2002.10.01|Deutschland|W


Und so schaut dazu der Code aus :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
 #!/usr/bin/perl

#Fehlerausgabe an Browser
use CGI::Carp qw(fatalsToBrowser);

print "Content-type: text/html\n\n";

# Datei auslesen
open (DATEI, "<namensliste.dat") or die "Kann namensliste.dat nicht oeffnen $!\n";
flock (DATEI, 2);
my @namen = <DATEI>;
close DATEI;

# Dateiinhalt sortieren nach Nachnamen
my @sortiertes_array = sort sortabc(@namen);

# Zeilenzahl festellen
my $anzahl = scalar(@sortiertes_array);

# Teilen durch 2
my $halb = int($anzahl / 2);

# Wenn 2 mal die Hälfte nicht $anzahl, 1 addieren
if (2 * $halb < $anzahl) {
$halb += 1;
}
# Tabellenkopf
print qq~
<table cellspacing="2" cellpadding="2" border="1">
~;

# Zähler (optional)
my $halbcount1 = 0;
my $halbcount2 = $halb;

foreach my $z (0..$halb-1) {
# Gesamtarray in zu Teilarrays (@erste - @zweite) zuweisen
my @erste = @sortiertes_array[0...$halb-1];
my @erste_spalte = split(/\|/, $erste[$z]);

my @zweite = @sortiertes_array[$halb...$anzahl-1];
my @zweite_spalte = split(/\|/, $zweite[$z]);

$halbcount1++;
$halbcount2++;
# Ausgabe
if ($halbcount1 <= $halb && $zweite_spalte[1] ne '') {
print qq~<tr>
<td>$halbcount1</td>
<td><b>$erste_spalte[1]</b> $erste_spalte[2]</td>
<td>$halbcount2</td>
<td><b>$zweite_spalte[1]</b> $zweite_spalte[2]</td>
</tr>
~;
}

elsif ($zweite_spalte[1] eq '') {
print qq~<tr>
<td>$halbcount1</td>
<td><b>$erste_spalte[1]</b> $erste_spalte[2]</td>
<td> </td>
<td> </td>
</tr>
~;
}
}

print "</table>";


# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
# Sortiersubroutine
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - #
sub sortabc {

@atopkg = split(/\|/,$a);
@btopkg = split(/\|/,$b);
$atopkg[1] cmp $btopkg[1];
}


Oben im Script steht irgendwas von Perl ? Kann man das im Internet dazu anwenden ? Und wo definiere ich, nach welcher Spalte sortiert werden soll ?

_

Und wie kann man das Script jetzt im Internet einsetzen ?
Dubu
 2005-05-08 18:52
#28342 #28342
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Ronnie,08.05.2005, 16:05]Ja, das von dir gefundene Skript ist tatsächlich in Perl. Es sortiert aber Spalten zu Zeilen um.[/quote]
Wie kommst du darauf?
Es listet das Ergebnis nur zweispaltig.
<< >> 4 Einträge, 1 Seite



View all threads created 2005-05-08 18:05.