Nowość w Perlu.Selektywne dzielenie ciągu znaków w języku Perl
muszę przeanalizować raport, który wygląda tak:
[email protected]@[email protected]@[email protected]
użyłem:
my @fields = split(/@/, $line, 6);
Większość czasu to działa dobrze, ale czasami komunikat o błędzie będzie zawierać adres e-mail i cały tekst po symbolu @ w tym e-mailu, aż koniec napisu zakończy się na moim identyfikatorze wiadomości.
Pomyślałem o sprawdzeniu ilości znaków @ i analizie warunkowej, ale czy jest lepszy sposób?
EDIT:
Pożądana wyjście jest listą ciągów, z komunikatem o błędzie zawierającego co przyszedł w nim (w tym okolicznościowy adres e-mail).
Ponieważ istnieją inne aplikacje korzystające z tego samego raportu, nie mogę zmienić separatora lub wyjść z wyjścia.
Przykładowe linie raportu:
[email protected]@[email protected]@440 4.4.1 Some error [email protected]
[email protected]@[email protected]@550 5.1.1 <[email protected]>... User [email protected]
[email protected]@[email protected]@550 5.1.1 [email protected] no such [email protected]
Oczekiwane zawartość @fields po parsowania linii 1:
2012-05-29
joedoe
example.com
AB99-5
440 4.4.1 Some error occurred
XYZ35
i po parsowania wiersz 2:
2012-05-29
foobar
invalid.com
ZZ88-6
550 5.1.1 <[email protected]>... User Unknow
GGH93
Czy możesz wyjaśnić, co żądane wyjście? Lista ciągów? – kevlar1818
to trochę trudny projekt, ponieważ twój separator ** może ** być częścią danych. Jeśli masz dostęp do generatora raportów, zastanawiałabym się, czy nie usunąć komunikatu o błędzie lub zmienić znak separatora ... – kratenko
Czy możesz podać przykład specjalnego komunikatu o błędzie z adresem e-mail? – simbabque