Perl - porównywanie wartości z dwóch plików

(klisza) #1

Witam,

jestem baardzo początkujący w perlu, a mam następujące zadanie.

Są dwa pliki - jeden, to lista numerów i nazw oddzielona tabami, po jednym takim zestawie w linii. Drugi, to pewien log w postaci XML’a, który zawiera w jednej z gałęzi numer (znajdujący się w pierwszej kolumnie pierwszego pliku).

Potrzebuję napisać skrypt, który będzie porównywał oba pliki, i jeśli w XML’u znajdzie numerek, ma przypisać do niego nazwę z pierwszego pliku.

Problem w tym, że nie wiem, w jaki sposób się za to zabrać - czy przypisać pierwszy plik do tabeli, następnie ją porównywać z drugim, czy linijka po linijce?

Założenie początkowe jest takie, że w XML’u wystąpi ten numer tylko raz, w gałęzi np. xxx.

Pierwszy plik ma mniej więcej taką postać:

001 nazwa1

002 nazwa2

003 nazwa3

Czyli muszę na podstawie numerka z XML’a wypisać nazwę.

(Sawyer47) #2

Co do realizacji to zależy od wielkości pierwszego pliku, jeżeli jet mały to wczytałbym go do hasha. Możesz tez użyć jakiegoś parsera XML z CPAN, na pewno jest to pewniejsze rozwiązanie niż ręczna zabawa regexpami.

(klisza) #3

Pierwszy plik nie jest duży, max 99 linii.

Nie zmienia to fakty, że nie mam pojęcia, jak to zrobić. :confused:

Na CPAN szukałem rozwiązań, ale nie mogłem (umiałem?) znaleźć konkretnego.

Z perlem mam do czynienia od wczoraj dopiero, więc to dla mnie czarna magia…

(Sawyer47) #4

Aaa jak masz do czynienia od wczoraj to lepiej poświęć więcej czasu na naukę Perla. Jak poduczysz się Perla to nie będziesz miał problemów z napisaniem takiego skryptu, proste i brutalne.

(klisza) #5

Heh, uczę się, uczę, ale jutro właściwie powinienem mieć takie coś chodzące:/ I jak na razie, to udało mi się porównywać podobne pliki na zasadzie linii, a to 2 różne formaty:/

No trudno, ale dzięki.

(Sawyer47) #6

Ja zrobiłbym to tak, że pierwszy plik wczytuje do hasha. Drugi plik możesz potraktować XML::Simple, no ewentualnie możesz ręcznie regexpami, żeby skrypt był bardziej przenośny (bez zależności). Reszta jest prosta o ile zna się Perla.

(klisza) #7

XML::Simple nie wchodzi w rachubę, to ma latać między różnymi serwerkami, więc ręcznie. Dzięki, poczytam trochę jak to zrobić.