ruby .split ('\ n') nie dzieli się w nowej linii


82

Dlaczego ten ciąg nie dzieli się na każdy „\ n”? (RUBIN)

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split('\n')
>> ["ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t"]

Odpowiedzi:


174

Potrzebujesz .split("\n"). Aby poprawnie zinterpretować nowy wiersz, potrzebna jest interpolacja ciągów znaków, a podwójne cudzysłowy są jednym ze sposobów, aby to zrobić.


39

W Rubim pojedyncze cudzysłowy wokół łańcucha oznaczają, że znaki ucieczki nie są interpretowane. W przeciwieństwie do C, gdzie pojedyncze cudzysłowy oznaczają pojedynczy znak. W tym przypadku '\n'jest faktycznie równoważne "\\n".

Więc jeśli chcesz podzielić się \n, musisz zmienić kod, aby używać podwójnych cudzysłowów.

.split("\n")


22

Ruby ma metody String#each_lineiString#lines

zwraca wyliczenie: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

zwraca tablicę: http://www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

Nie testowałem tego w twoim scenariuszu, ale założę się, że będzie działać lepiej niż ręczne wybieranie znaków nowej linii.


Ale zauważ, że #linesnie usunie to znaku nowej linii, a #splitzrobi to: "a\nb".lines => ["a\n", "b"]podczas"a\nb".split("\n") => ["a", "b"]
tanius

Ponadto, dla plików czytanych w trybie tekstowym (domyślnie), sekwencje nowej linii są tłumaczone na "\n"( zobacz ). Nie trzeba więc wybierać ich ręcznie. Używaj na "\n"różnych platformach.
tanius


3

Nie możesz do tego używać pojedynczych cudzysłowów:

"ADVERTISING [7310]\n\t\tIRS NUMBER:\t\t\t\t061340408\n\t\tSTATE OF INCORPORATION:\t\t\tDE\n\t\tFISCAL YEAR END:\t\t\t0331\n\n\tFILING VALUES:\n\t\tFORM TYPE:\t\t10-Q\n\t\tSEC ACT:\t\t1934 Act\n\t".split("\n")
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.