Вопрос

Есть ли способ разделить битстроп, загруженный из файла на новичках? У меня есть что -то вроде этого:

A line of text
Additional line of text
And another line

И я хочу такого массива:

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

Есть ли функция для разделения текста на новичках, чтобы создать что -то вроде этого массива?

Заранее спасибо.

Это было полезно?

Решение

В дополнение к ответу Робертса.

В Elixir вы можете использовать: String.split(string, "\n")смотреть на Нить модуль.

Другие советы

смотреть на binary:split/2/3 в модуле бинарный. Анкет Например binary:split(String, <<"\n">>).

Если вы просто разделили строку на \n, Есть некоторые серьезные проблемы с портативностью. Это потому, что многие системы используют \n, некоторые, такие как более старые Mac, используют \r и Windows использует \r\n разграничить новые линии.

Более безопасным способом сделать это было бы использовать регулярность, чтобы соответствовать любой из трех вышеупомянутых возможностей:String.split(str, ~r{(\r\n|\r|\n)}.

Несмотря на то, что Марк прав в отношении проблем с переносимостью, предоставленная им резьба имеет опечатка, и в результате не работает для \r\n последовательности. Вот более простая версия, которая обрабатывает все 3 случая:

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

Я недавно сталкивался с ситуацией, когда решение в моем другом ответе И в основном любое другое решение в зависимости от регулярных выражений было в некоторых ситуациях намного медленнее, чем в зависимости от бинарного разделения, особенно при ограничении количества частей, на которые строка разделяется. Ты можешь видеть https://github.com/crowdhailer/server_sent_event.ex/pull/11 Для более подробного анализа и эталона.

Вы можете использовать :binary.split/3 Даже при нацеливании на различные типы новых линейных символов:

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

Как вы можете видеть в приведенном выше примере, матч жадный и \r\n имеет приоритет выше расщепления \r сначала, а затем \n.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top