В дополнение к ответу Робертса.
В Elixir вы можете использовать: String.split(string, "\n")
смотреть на Нить модуль.
Вопрос
Есть ли способ разделить битстроп, загруженный из файла на новичках? У меня есть что -то вроде этого:
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
.