Schrift
[thread]8301[/thread]

zeilen aus datei sortiert ausgeben

Leser: 1


<< >> 7 Einträge, 1 Seite
Gast Gast
 2006-09-07 13:08
#69546 #69546
Ist es in Perl möglich die Zeilen eine datei alphabetisch sortiert auszugeben?
renee
 2006-09-07 13:15
#69547 #69547
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Klar. Dafür gibt es sort

Einfache (Speicherintensive) Variante:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use strict;
use warnings;

# Dateiname
my $file = '/path/to/file.txt';

# öffne Datei zum lesen
# bei Fehler, gib die Fehlermeldung aus
open(my $fh,"<",$file) or die $!;

# lies die Zeilen ein
my @lines = <$fh>;

close $fh;

# sortiere die Zeilen aufsteigend (a-z)
@lines = sort{$a cmp $b}@lines;

# gib die Zeilen aus
print $_,"\n" for(@lines);


Das mit
Code: (dl )
1
2
my @lines =<$fh>;
@lines = sort{$a cmp $b}@lines;
kann auch kürzer geschrieben werden:
Code: (dl )
my @lines = sort{$a cmp $b}<$fh>;



Die Variante ist weniger speicherintensiv (sortiert aber die Zeilen direkt in der Datei):
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $file = '/path/to/file.txt';

tie my @array,'Tie::File',$file or die $!;
@array = sort{$a cmp $b}@array;
print $_,"\n" for(@array);
untie @array;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
vayu
 2006-09-07 13:16
#69548 #69548
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
4
5
6
open(FILE, "<", $filename) or die $!;

foreach my $line (sort <FILE>) {
print $line;
}
close FILE;


oder wo wir schon beim kurzschreiben sind ...

Code: (dl )
1
2
3
open(FILE, "<", $filename) or die $!;
print foreach (sort <FILE>);
close FILE;
\n\n

<!--EDIT|vayu|1157623859-->
pq
 2006-09-07 13:51
#69549 #69549
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=renee,07.09.2006, 11:15]Das mit
Code: (dl )
1
2
my @lines =<$fh>;
@lines = sort{$a cmp $b}@lines;
kann auch kürzer geschrieben werden:
Code: (dl )
my @lines = sort{$a cmp $b}<$fh>;
[/quote]
my @lines = sort <$fh>;\n\n

<!--EDIT|pq|1157622728-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
renee
 2006-09-07 14:11
#69550 #69550
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du hast recht. Ich habe mir mal angewöhnt, immer die ausführliche sort-Variante zu nehmen...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Dubu
 2006-09-08 01:51
#69551 #69551
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=vayu,07.09.2006, 11:16]oder wo wir schon beim kurzschreiben sind ...

Code: (dl )
1
2
3
open(FILE, "<", $filename) or die $!;
print foreach (sort <FILE>);
close FILE;
[/quote]
Wozu überhaupt eine Schleife?
Code: (dl )
print sort <FILE>;



Ergänzung: Wenn's nur darum geht, auf der Kommandozeile mal eine Datei sortieren zu lassen, und man bedauerlicherweise kein unixoides Betriebssystem mit wunderbar passenden Tools wie dem sort(1)-Befehl hat, dann geht's auch ganz kurz in Perl:
Code: (dl )
C:\> perl -e "print sort <>" datei.txt > datei_sortiert.txt
\n\n

<!--EDIT|Dubu|1157666376-->
vayu
 2006-09-08 10:39
#69552 #69552
User since
2005-01-13
782 Artikel
BenutzerIn
[default_avatar]
ich glaub Dubu hat gewonnen ^^
<< >> 7 Einträge, 1 Seite



View all threads created 2006-09-07 13:08.