Nowe posty

Autor Wątek: [Perl] Porownywanie elementow tablicy  (Przeczytany 4774 razy)

Gosik

  • Gość
[Perl] Porownywanie elementow tablicy
« dnia: 2013-01-19, 18:24:09 »
Witam!

 Mam dwie tablice:
date1:
13:26:10
13:26:11
13:26:12
13:26:13
13:26:14

date2:
 13:26:07.1
 13:26:08.1
 13:26:09.1
 13:26:10.1
 13:26:11.1
 13:26:12.1
 13:26:13.1

Chcialabym sprawdzic, te wiersze i gdy sie powtarzaja, to je wyswietlic.
Napisalam nastepujacy kod:
#!/usr/bin/perl
use strict;
use warnings;

my @date1;
my @date2;
open (K, 'plik1.txt'); while () {
open (P, 'plik2.txt'); while (

) {

chomp(@date1 = );
chomp(@date2 =

);

 }
}

close(K);
close(P);

my @pasuje;

  foreach (@date1) {
  @pasuje = grep(/^$_/, @date2);
  }
  print @pasuje;

Czy ktos z Was moze mi wyjasnic dlaczego moj kod nie porownuje wierszy tablicy date1 i date2, lecz wyswietla wszystkie elementy tablicy date2?

Bede bardzo wdzieczna za pomoc.

xavery

  • Gość
[Perl] Porownywanie elementow tablicy
« Odpowiedź #1 dnia: 2013-01-22, 09:55:28 »
Może dlatego, że nadużywasz zmiennej $_. Grep ustawia tę zmienną lokalnie na kolejną wartość listy. Jak napiszesz coś takiego:

perl -e 'grep {print $_} qw/raz dwa trzy/;'
to wynikiem będzie: "razdwatrzy". Pętla "foreach" powinna więc posługiwać się dedykowaną zmienną, np:

foreach my $i (@date2)...
Ponadto w ciele pętli za każdą iteracją przypisujesz nową wartośc tablicy @pasuje. Po skończeni pętli będzie ona miała wartość ostatniej iteracji.
A tak w ogóle to nie do końca rozumiem zadanie:) Być może wystarczyłoby zwykłe shellowe grep -f.