Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Rozwiązany: Perl i regex dla znaku nowej linii

Polecane posty

Witajcie. Nie wiem czy ktokolwiek zna się tutaj na Perlu, gdyz nigdy nie widziałem tematu o nim, ale zaryzykuję wink_prosty.gif Otóż napisałem sobie skrypt, który przegląda mi rekurencyjnie katalogi od startowego, znajduje pliki z rozrzerzeniem .html lub .php, filtruje wyrzucając znaczniki i pozostawiając sam tekst, po czym zapisuje przefiltrowaną wiadomośc do jednego pliku tekstowego. I teraz mam problem. Bo wszystko działa ok, ale znaki nowej linii (po wycięciu znaczników) tez są do pliku tekstowego zapisywane. A że wiadomo, znaczników jest dużo więcej niz samego tekstu, to trzeba ostro przewijac żeby do tekstu sie dokopać. Przykładowy regex na zamianę znaku '\n' na ' ' nie działa. Oto fragment kodu coby to lepiej wszystko zobrazować:


while (<FILE>)
{
$_ =~ s/<.*>|<\/.*>//g;
$_ =~ s/\/\*.*//g;
$_ =~ s/\/\/.*//g;
print FILE2 "$_";
}

Przykładowo coś takiego (jeszcze tych filtrów nie ma wszystkich ale to już najmniejszy problem). I teraz mamy powiedzmy kod html:


<html>
<head<<title>Tytul</title></head>
<body>
tralalalala
</body>
</html>

Po przefiltrowaniu będe miał:


\n
Tytul
\n
tralalalala
\n
\n

A jak zrobić żeby tych pustych linii (tutaj oznaczyłem je znakiem "\n") nie było? Z góry dzięki za pomoc.

Link do komentarza
Udostępnij na innych stronach

W zasadzie znalazłem troszkę inne rozwiązanie, ale oparłem się na tym przykładzie, dzięki ;) Tutaj kod, może komuś się przyda (jeszcze filtry nie działają do końca dobrze, ale to już najmniejszy problem):


#filtrujemy każdą linię wyrzucając kod html
$_ =~ s/<.*>|<\/.*>//g;
$_ =~ s/\/\*.*//g;
$_ =~ s/\/\/.*//g;
$_ =~ s/.*&.*//g;
#$_ =~ s/\n\s*/ /g;
if($_ =~ m/^\s*\s$/)
{
}

else
{
open FILE2, ">>korpus.txt" or die ("Nie ma pliku o nazwie \"korpus.txt\"");
print FILE2 "$_";
close FILE2;
}

Link do komentarza
Udostępnij na innych stronach

Gość
Temat jest zablokowany i nie można w nim pisać.


  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...