2011-11-10 19 views
6

Mam kod, który wykonuje pętle przez linie w pliku i próbuje wydrukować każdą linię z czymś dodanym na początku i na końcu.Dane wyjściowe Perla nadpisują się

Jednak otrzymuję dane wyjściowe w następujący sposób: "krowy nominalne".

Zasadniczo bit po linii (nominalny) nadpisuje jego początek. Wiem, że usunięcie linii chomp i regex zatrzymuje ten efekt, ale potrzebuję go w jednej linii bez spacji. Gdzie się mylę?

while ($line = <INPUT>) { 

     chomp $line; 
     $line =~ s/ //g; 
     printf "\@attribute %s nominal\n", $line; 
} 
+3

Jakie są elementy '@ atrybut'? –

+1

Przepraszam, brakowało char znaku escape, miał być tekstem jawnym (\ @att ...) – blitzen

Odpowiedz

10

Twój plik wejściowy prawdopodobnie pochodzi z systemu MS Windows z końcem linii zakodowanej jako CR-LF. Możesz także po prostu s/\r// usunąć CR.

+1

Świetnie! Dokładnie to było nie tak, zapamiętam to w przyszłości :) (użyłem $ line = ~ s/\ r // g; w moim rozwiązaniu). Twoje zdrowie! – blitzen

6

Możesz mieć \r w swojej zmiennej. Spróbuj użyć \s:

$line =~ s/\s//g; 

Zobacz perlre sensu \s.

+0

Myślę, że odpowiedzi na pytania ogólne powinny być niezależne. Dlaczego nie po prostu wyjaśnić znaczenie '\ s' wraz z linkiem, aby uzyskać więcej informacji? – Sparky

+0

dlaczego miałbyś usunąć wszystkie białe znaki, aby pozbyć się '\ r' (powraca karetka)? '$ Line = ~ s/\ r // g'; To powiedziawszy, odpowiedź choroby prawdopodobnie jest główną przyczyną (samo rozwiązanie). –

+1

Świetnie! Dokładnie to było nie tak, zapamiętam to w przyszłości :) (użyłem $ line = ~ s/\ r // g; w moim rozwiązaniu). Twoje zdrowie! – blitzen

Powiązane problemy