plik 1 - 25tys pozycji
plik 2 - 60tys pozycji
potrzebuje kodu w perlu ktory sprawdzi po kolei (w petli)czy pozycja z pliku1 znajduje sie w pilku2
w bashu prościzna ale perla nie znam dobrze i nie moge wykombinowac
plik 1 - 25tys pozycji
plik 2 - 60tys pozycji
potrzebuje kodu w perlu ktory sprawdzi po kolei (w petli)czy pozycja z pliku1 znajduje sie w pilku2
w bashu prościzna ale perla nie znam dobrze i nie moge wykombinowac
Nie bede pisal gotowca ale podam Ci wskazowki:
1. Wczytac dowolny z tych plikow do tablicy
2. dla kazdej linii z drugiego pliku sprawdzic czy jest w tablicy ktora juz zaladowalismy (perldoc grep)
3. zadanie zaliczone
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)
[QUOTE=TQM;62480]Nie bede pisal gotowca ale podam Ci wskazowki:
1. Wczytac dowolny z tych plikow do tablicy
2. dla kazdej linii z drugiego pliku sprawdzic czy jest w tablicy ktora juz zaladowalismy (perldoc grep)
3. zadanie zaliczone
wlasnie mam problem z pkt2
wczytuje plik2 większy do tablicy a z pliku1 chce sprawdzic po pierwszej kolumnie
nie wiem jak przekazac argument do grepa (jakby byl konkretny wzorzec do sprawdzenia to zadziala bo tak robilem), ale jak ma podstawiac kolene wiersze w FILE1 to nie dziala...Kod:open FILE2, "sciezka do pliku"; open FILE1, "sciezka do pliku"; while (<FILE1>) { my @file2 = split(/;/,$_); my @linia =$file2[0]; } my @list=<FILE2>; my $string=<@linia> my @wynik=grep /$string/,@list; print "@wynik"; close FILE1; close FILE2;
Zacznijmy od tego co robisz zle...
Omowienie:Kod:while (<FILE1>) { my @file2 = split(/;/,$_); my @linia = $file2[0]; # (1) } my @list=<FILE2>; my $string=<@linia> # (2) my @wynik=grep /$string/,@list; # nonsens... wynika z 1 i 2
(1) Po pierwsze zmienna jest okreslona jako 'my' wewnatrz petli, wiec nie istnieje poza nia... ba, nawet w kolejnych obrotach petli na poczatku ma wartoc undef a pozniej nadajesz jej wartosc i idziesz dalej - otrzymujesz undef.
Po drugie w kazdym obrocie petli przypisujesz tablicy wartosc w pierwszym elemencie i nigdy nie dodajesz kolejnych elementow - nawet gdybys okresli zakres zmiennej poza petla to i tak mialbys na koncu jedna wartosc a nie tablice wartosci.
(2) Czyzbys probowal wczytac do stringu kolejne linie z tablicy?! taka konstrukcja nie ma prawa dzialac - tzn Perl pewnie przyjmie i sprobuje zrobic to o czym Ty myslales (DWIM - Do What I Mean) bo z tego jest znany ale zapewniam Cie ze to co osiagniesz nie bezie tym co chciales osiagnac...
Proste rozwiazanie:
Polowe kodu masz, rusz glowa, to nie jest trudne - nie musisz uzywac grep() mozesz uzyc regex'ow - jak wolisz... Typowe dla Perla TIMTOWTDI (There Is More Than One Way To Do It). Pokaz co potrafisz, czekam na kod.Kod:#!/usr/bin/perl use strict; use warnings; my @mac; open (IN, 'pierwszy_plik.txt'); while (<IN>) { s/^(.*?);/$1/; #zastap kazda linie tym co jest od poczatku linii do pierwszego srednika push @mac, $_; } close (IN); # c.d.n.
ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)