ruby .split ('\ n') no se divide en la nueva línea


82

¿Por qué esta cadena no se divide en cada "\ n"? (RUBÍ)

"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"]

Respuestas:


172

Necesitas .split("\n"). La interpolación de cadenas es necesaria para interpretar correctamente la nueva línea, y las comillas dobles son una forma de hacerlo.


39

En Ruby, las comillas simples alrededor de una cadena significan que los caracteres de escape no se interpretan. A diferencia de C, donde las comillas simples denotan un solo carácter. En este caso '\n'es realmente equivalente a"\\n" .

Entonces, si desea dividir \n, debe cambiar su código para usar comillas dobles.

.split("\n")


22

Ruby tiene los métodos String#each_lineyString#lines

devuelve una enumeración: http://www.ruby-doc.org/core-1.9.3/String.html#method-i-each_line

devuelve una matriz: http://www.ruby-doc.org/core-2.1.2/String.html#method-i-lines

No lo probé contra su escenario, pero apuesto a que funcionará mejor que elegir manualmente los caracteres de nueva línea.


Pero tenga en cuenta que #linesno eliminará el carácter de nueva línea, mientras que #splitlo hará: "a\nb".lines => ["a\n", "b"]while"a\nb".split("\n") => ["a", "b"]
tanius

Además, para archivos leídos en modo texto (el predeterminado), las secuencias de nueva línea se traducen a "\n"( ver ). Así que no es necesario elegirlos manualmente. Úselo en "\n"todas las plataformas.
tanius


3

No puede usar comillas simples para esto:

"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")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.