Schrift
[thread]7530[/thread]

elemente filtern?



<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten
miki280
 2005-12-07 13:55
#60754 #60754
User since
2005-12-07
18 Artikel
BenutzerIn
[default_avatar]
hallo leute,
hab mich grad hier registriert und habe schon ein frage an euch! ;)
wenn ich ein .txt datei habe wo vollgendes drinnsteht:
id| path
3 | 1853 1239 293 293 293 293 293 293 292
5 | 1853 1239 293 293 293 293 293 293 3428
usw.

wie kann ich in path die doppelten einträge nur einmal anzeigen lassen? so sollte das aussehen!?
3 | 1853 1239 293 292
5 | 1853 1239 293 3428

ich kann zwar ein wenig c programmieren aber ich kenne leider den Perl syntax nicht und tu mich etwas schwer damit!?

ich hoffe jemand kann mir hier weiterhelfen, wäre wirklich wichtig  für mich!! Vielen Dank!!
esskar
 2005-12-07 14:09
#60755 #60755
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nehmen wir an, du hast die datei schon in ein array eingelesen...

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

my @lines = (
'3 | 1853 1239 293 293 293 293 293 293 292',
'5 | 1853 1239 293 293 293 293 293 293 3428'
);

foreach my $line ( @lines ) {
  my ( $id, $path ) = split /\s+\|\s+/, $line, 2;
 
  $path = join ' ', unique( split / /, $path );
  print "$id | $path\n";
}

sub unique {
   my %h = ();
   return grep { !$h{$_}++ } @_;
}
\n\n

<!--EDIT|esskar|1133957430-->
miki280
 2005-12-07 14:15
#60756 #60756
User since
2005-12-07
18 Artikel
BenutzerIn
[default_avatar]
na das geht ja schnell!! vielen Dank!

aber wie kann ich das in ein array einlesen? ich meine die datei hat hunderte von diesen zeilen!
esskar
 2005-12-07 14:23
#60757 #60757
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
such mal ein wenig hier im forum...
pq
 2005-12-07 15:30
#60758 #60758
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=miki280,07.12.2005, 13:15]aber wie kann ich das in ein array einlesen?[/quote]
Wiki:perldoc perlintro solltest du auf jeden fall gelesen haben.
Quote
ich meine die datei hat hunderte von diesen zeilen!

also, hundert ist natürlich schon eine ganze menge... da musst du mal
gucken, ob dein RAM damit klarkommt. SCNR
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
Dubu
 2005-12-07 18:11
#60759 #60759
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Du brauchst nicht die ganze Datei in ein Array einzulesen. Da du sowieso nur jeweils eine Zeile verarbeitest, kannst du auch Zeile fuer Zeile einlesen, verarbeiten, herausschreiben. Das spart RAM. (Sorry, pq ;))
miki280
 2005-12-08 10:50
#60760 #60760
User since
2005-12-07
18 Artikel
BenutzerIn
[default_avatar]
vielen dank für eure hilfe! werde versuchen was zu basteln! ;)
Taulmarill
 2005-12-08 12:29
#60761 #60761
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
wenn die datei gross ist, macht es sinn, sie nicht komplett einzulesen, sondern zeilenweise abzuarbeiten. das würde in etwa so aussehen
Code: (dl )
1
2
3
4
5
6
7
8
9
open FILE, "</path/to/file.txt" or die "can't open file: $!";

while ( my $line = <FILE> ) {
#
# füge hier code ein
#
}

close FILE;
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
miki280
 2005-12-12 12:10
#60762 #60762
User since
2005-12-07
18 Artikel
BenutzerIn
[default_avatar]
@esskar:
kannst mir bitte diese zeile genauer erklären? wie wird da getrennt? heißt \s+ leerzeichen??
split /\s+\|\s+/, $line, 2;

was ist wenn ich statt |,einen tabulator hätte?

danke!
Taulmarill
 2005-12-12 12:20
#60763 #60763
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
\s ist ein "whitespace character" und repräsentiert eine zeichengruppe die leerzeichen, tabulatoren, zeilenumbrüche und form feeds endhält. das angehängte + bedeutet, dass hier eine gruppe aus einem oder mehreren zeichen erwartet wird.
wenn du anstatt eines | einen tabulator hast, matcht der regex nicht mehr, da halt ein | erwartet wird.\n\n

<!--EDIT|Taulmarill|1134382840-->
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
<< |< 1 2 3 >| >> 22 Einträge, 3 Seiten



View all threads created 2005-12-07 13:55.