Domanda

C'è un modo per dividere una corda bit caricata da un file sulle nuove linee? Ho qualcosa di simile:

A line of text
Additional line of text
And another line

E voglio un array come questo:

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

Esiste una funzione per dividere il testo sulle nuove linee per produrre qualcosa di simile a questo array?

Grazie in anticipo.

È stato utile?

Soluzione

Oltre alla risposta di Roberts.

In elisir puoi usare: String.split(string, "\n")Guarda a Corda modulo.

Altri suggerimenti

Guarda a binary:split/2/3 nel modulo binario. Per esempio con binary:split(String, <<"\n">>).

If you simply split a string on \n, there are some serious portability problems. This is because many systems use \n, a few such as older macs use \r and Windows uses \r\n to delimit new lines.

The safer way to do it would be to use a regex to match any of the three above possibilities:String.split(str, ~r{(\r\n|\r|\n)}.

Mentre Mark ha ragione sui problemi di portabilità, il regex che ha fornito ha un errore di battitura e di conseguenza non funziona \r\n sequenze. Ecco una versione più semplice che gestisce tutti e 3 i casi:

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

Di recente mi imbatto in una situazione in cui La soluzione nell'altra mia risposta E fondamentalmente qualsiasi altra soluzione a seconda delle espressioni regolari era in alcune situazioni molto più lente rispetto a quella della divisione binaria, soprattutto quando limita la quantità di parti in cui la stringa viene divisa. Puoi vedere https://github.com/crowdhailer/server_sent_event.ex/pull/11 Per un'analisi più dettagliata e un punto di riferimento.

Puoi usare :binary.split/3 Anche quando si prendono di mira diversi tipi di caratteri di nuove righe:

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

Come puoi vedere nell'esempio sopra, la partita è avida e \r\n ha la precedenza sopra la divisione di \r Prima e poi \n.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top