Pregunta

¿Hay alguna forma de dividir una bitstring cargada de un archivo en nuevas líneas? Tengo algo como esto:

A line of text
Additional line of text
And another line

Y quiero una matriz como esta:

["A line of text",
"Additional line of text",
"And another line"]

¿Existe una función para dividir el texto en nuevas líneas para producir algo como esta matriz?

Gracias por adelantado.

¿Fue útil?

Solución

Además de la respuesta de Roberts.

En Elixir puedes usar: String.split(string, "\n")Mirar Cuerda módulo.

Otros consejos

Mirar binary:split/2/3 en el módulo binario. Por ejemplo con binary:split(String, <<"\n">>).

Si simplemente divide una cadena en \n, hay algunos problemas de portabilidad graves. Esto se debe a que muchos sistemas usan \n, algunos como Macs más antiguos usan \r y Windows usa \r\n para delimitar nuevas líneas.

La forma más segura de hacerlo sería usar una regex para que coincida con cualquiera de las tres posibilidades anteriores:String.split(str, ~r{(\r\n|\r|\n)}.

Si bien Mark tiene razón sobre los problemas de portabilidad, el Regex que proporcionó tiene un error tipográfico y, como resultado, no funciona para \r\n secuencias. Aquí hay una versión más simple que maneja los 3 casos:

iex(13)> String.split("foo\nbar", ~r/\R/)
["foo", "bar"]
iex(14)> String.split("foo\rbar", ~r/\R/)
["foo", "bar"]
iex(15)> String.split("foo\r\nbar", ~r/\R/)
["foo", "bar"]

Recientemente me encontré con una situación en la que La solución en mi otra respuesta y básicamente cualquier otra solución que depende de las expresiones regulares fue en algunas situaciones mucho más lenta que dependiendo de la división binaria, especialmente cuando limita la cantidad de partes en las que se divide la cadena. Puedes ver https://github.com/crowdhailer/server_sent_event.ex/pull/11 para un análisis más detallado y un punto de referencia.

Puedes usar :binary.split/3 Incluso cuando se dirige a diferentes tipos de nuevos caracteres de línea:

iex(1)> "aaa\rbbb\nccc\r\nddd" |> :binary.split(["\r", "\n", "\r\n"], [:global])     
["aaa", "bbb", "ccc", "ddd"]

Como puede ver en el ejemplo anterior, el partido es codicioso y \r\n tiene prioridad por encima de la división por \r Primero y luego \n.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top