Question

Existe-t-il un moyen de diviser un Bitstring chargé à partir d'un fichier sur Newlines? J'ai quelque chose comme ça:

A line of text
Additional line of text
And another line

Et je veux un tableau comme ceci:

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

Existe-t-il une fonction pour diviser le texte sur Newlines pour produire quelque chose comme ce tableau?

Merci d'avance.

Était-ce utile?

La solution

En plus de la réponse Roberts.

Dans Elixir, vous pouvez utiliser: String.split(string, "\n")Regarder Chaîne de caractères module.

Autres conseils

Regarder binary:split/2/3 dans le module binaire. Par exemple avec 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)}.

Alors que Mark a raison sur les problèmes de portabilité, le regex qu'il a fourni a une faute de frappe et en conséquence ne fonctionne pas pour \r\n séquences. Voici une version plus simple qui gère les 3 cas:

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

J'ai récemment rencontré une situation où La solution dans mon autre réponse Et fondamentalement, toute autre solution en fonction des expressions régulières était dans certaines situations beaucoup plus lentement que la division binaire, en particulier lors de la limitation de la quantité de pièces dans laquelle la chaîne est divisée. Tu peux voir https://github.com/crowdhailer/server_sent_event.ex/pull/11 Pour une analyse plus détaillée et une référence.

Vous pouvez utiliser :binary.split/3 Même lorsque vous ciblez différents types de nouveaux caractères de ligne:

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

Comme vous pouvez le voir dans l'exemple ci-dessus, le match est gourmand et \r\n prend la priorité au-dessus de la division \r D'abord et puis \n.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top