ロバーツの答えに加えて。
Elixirで使用できます。 String.split(string, "\n")
見る 弦 モジュール。
質問
Newlines上のファイルからロードされたビットストリングを分割する方法はありますか?私はこのようなものを持っています:
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
新しい行を区切ります。
より安全な方法は、上記の3つの可能性のいずれかに一致するために正規表現を使用することです。String.split(str, ~r{(\r\n|\r|\n)}
.
マークは携帯性の問題について正しいですが、彼が提供したregexにはタイプミスがあり、その結果、うまくいきません \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
.