Marcus Vieß: Array nach 2.tem Feld sortieren lassen

Meine txt datei ist so aufgebaut :

16|Nachtschatten|N|http:balbla
15|Vampyres|V|http:niknak
14|Vampire|V|http:zappzerapp

so sieht das script aus :

open(CAT,"linksdata.txt");
@kat = <CAT>;
close(CAT);
@kat = sort @kat;
foreach  $kateg (@kat) {
chomp(@kat);
($katnr,$kattitel,$katbuchstabe,$katlink) = split(/|/, $kateg);
}
if ($zahl == 1) {
print "<tr>\n<td width="50%">";
ukat();
print "</td>\n";
}
if ($zahl == 2) {
print "<td width="50%">";
ukat();
print "</td></tr>\n";
$zahl = 0;
}
}

if ($zahl == 1) {
print"<td width="50%"> </td>\n</tr>\n";
print "</table><br>\n";
}
if  ($zahl == 0) {
print "</table><br>\n";
}

sub ukat {
@katdesc = $katdesc;
@katdesc = split('---', $katdesc);
@katdesc = sort @katdesc;
$anzahl = @katdesc;
for ( $i = 0; $i+1 <= $anzahl; $i++ ) {
print " $zvu <a href="$katlink">$katdesc[$i]</a> ";
}
}

so, beim Sortieren sortiert mir das Teil aber nach der Nummer und nicht nach dem Titel (feld2) wie bekomme ich das hin ?

  1. Meine txt datei ist so aufgebaut :

    16|Nachtschatten|N|http:balbla
    15|Vampyres|V|http:niknak
    14|Vampire|V|http:zappzerapp

    so sieht das script aus :

    open(CAT,"linksdata.txt");
    @kat = <CAT>;
    close(CAT);
    @kat = sort @kat;
    foreach  $kateg (@kat) {
    chomp(@kat);
    ($katnr,$kattitel,$katbuchstabe,$katlink) = split(/|/, $kateg);
    }
    if ($zahl == 1) {
    print "<tr>\n<td width="50%">";
    ukat();
    print "</td>\n";
    }
    if ($zahl == 2) {
    print "<td width="50%">";
    ukat();
    print "</td></tr>\n";
    $zahl = 0;
    }
    }

    if ($zahl == 1) {
    print"<td width="50%"> </td>\n</tr>\n";
    print "</table><br>\n";
    }
    if  ($zahl == 0) {
    print "</table><br>\n";
    }

    sub ukat {
    @katdesc = $katdesc;
    @katdesc = split('---', $katdesc);
    @katdesc = sort @katdesc;
    $anzahl = @katdesc;
    for ( $i = 0; $i+1 <= $anzahl; $i++ ) {
    print " $zvu <a href="$katlink">$katdesc[$i]</a> ";
    }
    }

    so, beim Sortieren sortiert mir das Teil aber nach der Nummer und nicht nach dem Titel (feld2) wie bekomme ich das hin ?

    hmmm mir fällt nur folgendes ein:
    spliten und arrayteile neu zusammen setzen, dann sortieren...
    wieder spliten normal weiter arbeiten....
    viele grüße
    horst