Rubyのchompで改行を削除する方法とは?削除以外の改行指定も解説
- システム
エンジニア - Rubyで文字列の途中で改行したり、改行コードをはどうやって削除するのですか。
- プロジェクト
マネージャー - Windowsでは改行コードは とします。削除するにはchomp!やchopなどで削除します。
Rubyでの改行コードの扱い方とは?
今回は、Rubyでの改行コードの扱い方について説明します。
文字列の途中で改行する方法や改行コードの削除方法について紹介します。
改行コードはOSによって異なります。改行コードの統一方法についても紹介します。
Rubyでの改行コードの扱い方に興味のある方はぜひご覧ください。
Rubyでの改行の出力
Rubyで文字列の途中で改行する方法を紹介します。
実際のソースコードを見てみましょう。
1
|
puts "line1\r\nline2\r\nline3"
|
実行結果は以下のようになります。
1
2
3
|
line1
line2
line3
|
Windowsの場合、改行コードは\r\nです。
文字列の途中に改行コードを記述すると、文字列の途中で改行できます。
Rubyのchompで改行を削除する方法4つ
Rubyのchompを使い改行を削除する方法について、以下4つを紹介します。
1. chompで改行コード削除
2. chomp!で改行コード削除
3. each_lineとchompの併用
4. readlinesによる読み込み文字列とchomp
1:chompで改行コード削除
Rubyでは、chompメソッドを利用して行末の改行コードを削除できます。
実際のソースコードを見てみましょう。
1
2
3
|
string = "line1\r\nline2\r\n"
p string
p string.chomp
|
実行結果は以下のようになります。
1
2
|
"line1\r\nline2\r\n"
"line1\r\nline2"
|
行末の改行コードが削除されていることが分かります。
chompメソッドは行末が改行コードでなければ削除されません。
実際のソースコードを見てみましょう。
1
2
3
4
|
string = "line1\r\nline2"
p string
p string.chomp
|
実行結果は以下のようになります。
1
2
|
"line1\r\nline2"
"line1\r\nline2"
|
行末が改行コードでないので、何も削除されていないことが分かります。
このように、Rubyではchompメソッドを利用して行末の改行コードを削除できます。
2:chomp!で改行コード削除
chompメソッドに”!”を付与すると、文字列を直接変更できます。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
|
string1 = "line1\r\n"
string2 = "line2\r\n"
p string1
p string1.chomp
p string1
p "-----"
p string2
p string2.chomp!
p string2
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
|
"line1\r\n"
"line1"
"line1\r\n"
"-----"
"line2\r\n"
"line2"
"line2"
|
chompメソッドの実行後にstring1を表示しても”line1\r\n”のままですが、chomp!メソッドの実行後にstring2を表示すると”line2″となっています。
chompメソッドに”!”を付与すると、文字列を直接変更していることが分かります。
このようなメソッドを「破壊的メソッド」といいます。
改行コードが無い場合は以下のようになります。
1
2
3
4
5
|
string = "line1"
p string
p string.chomp!
p string
|
実行結果は以下のようになります。
1
2
3
|
"line1"
nil
"line1"
|
このように、Rubyではchompメソッドに”!”を付与すると、文字列を直接変更できます。
3:each_lineとchompの併用
Rubyのeach_lineメソッドで改行コードで区切られた複数行の文字列を1行ずつ処理することができます。
各行の文字列の末尾に改行コード付け、各行の改行コードをchompメソッドで削除します。
実際のソースコードを見てみましょう。
1
2
3
4
|
strings = "line1\r\nline2\r\nline3\r\n"
strings.each_line do |str|
p str.chomp
end
|
実行結果は以下のようになります。
1
2
3
|
"line1"
"line2"
"line3"
|
このように、複数行の改行がある文字列をeach_lineで1行ずつ処理し、chompメソッドで改行を削除することができます。
4:readlinesによる読み込み文字列とchomp
File.readlinesメソッドはファイルからデータを文字列の配列として読み込むことができます。
Rubyにおける、readliesによりテキストファイルを読み込み文字列の配列にして、文字列の配列の各要素である、各行の文字列末尾の改行コードをchompメソッドで削除してみましょう。
以下のファイルを用意してください。
サンプルテキストファイル: example.txt
1
2
3
|
line1
line2
line3
|
実際のソースコードを見てみましょう。
1
2
3
|
File.readlines("example.txt").each do |line|
p line.chomp
end
|
実行結果は以下のようになります。
1
2
3
|
line1
line2
line3
|
このようにFile.readliesメソッドでテキストファイルを読み込み、各行の文字列の末尾の改行コードをchompメソッドで削除できます。
Rubyのchompとchomp!の比較
Rubyのchompメソッドは改行コードがなければ文字列をそのまま返しましたが、chomp!メソッドはnilを返す点が違います。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
|
string1 = "chomp"
string2 = "chomp!"
p string1.chomp
p "-----"
p string2.chomp!
|
実行結果は以下のようになります。
1
2
3
|
"chomp"
"-----"
nil
|
このような違いがあるので、後続で処理したい内容を踏まえて使い分けましょう。
Rubyでchomp以外で改行を削除する方法3つ
文字列から改行コードを削除するメソッドは、chomp以外にchop、strip、gsubなどがあります。今回は以下3つを紹介します。
1. chopで改行コード削除
2. stripで改行コード削除
3. gsubで改行コード削除
どのような違いがあるかを見ていきましょう。
1:chopで改行コード削除
Rubyのchopメソッドは行末の1文字を削除します。つまり、改行コードでなくても削除します。
また、!を付与すれば破壊的メソッドになります。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
string1 = "line1\r\n"
string2 = "line2"
string3 = "line3\r\n"
string4 = "line4"
p string1
p string1.chop
p string1
p "-----"
p string2
p string2.chop
p string2
p "-----"
p string3
p string3.chop!
p string3
p "-----"
p string4
p string4.chop!
p string4
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
"line1\r\n"
"line1"
"line1\r\n"
"-----"
"line2"
"line"
"line2"
"-----"
"line3\r\n"
"line3"
"line3"
"-----"
"line4"
"line"
"line"
|
このように、Rubyではchopメソッドを利用しても行末の改行コードを削除できます。
しかし、行末が改行コードでない場合は意図しない削除となってしまうので注意が必要です。
2:stripで改行コード削除
Rubyのstripメソッドは文字列の前後の改行コード、半角スペース、タブを削除します。また、!を付与すれば破壊的メソッドになります。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
string1 = "line1\r\n"
string2 = "line2"
string3 = "line3\r\n"
string4 = "line4"
p string1
p string1.strip
p string1
p "-----"
p string2
p string2.strip
p string2
p "-----"
p string3
p string3.strip!
p string3
p "-----"
p string4
p string4.strip!
p string4
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
"line1\r\n"
"line1"
"line1\r\n"
"-----"
"line2"
"line2"
"line2"
"-----"
"line3\r\n"
"line3"
"line3"
"-----"
"line4"
nil
"line4"
|
このように、Rubyのstripメソッドを利用すれば、改行コードを削除できます。
3:gsubで改行コード削除
Rubyのgsubメソッドは文字列を置換でき、また改行コードを空文字に置換することで改行コードを削除できます。!を付与すれば破壊的メソッドになります。
実際のソースコードを見てみましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
string1 = "line1\r\n"
string2 = "line2"
string3 = "line3\r\n"
string4 = "line4"
p string1
p string1.gsub(/(\r\n|\n)/,"")
p string1
p "-----"
p string2
p string2.gsub(/(\r\n|\n)/,"")
p string2
p "-----"
p string3
p string3.gsub!(/(\r\n|\n)/,"")
p string3
p "-----"
p string4
p string4.gsub!(/(\r\n|\n)/,"")
p string4
|
実行結果は以下のようになります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
"line1\r\n"
"line1"
"line1\r\n"
"-----"
"line2"
"line2"
"line2"
"-----"
"line3\r\n"
"line3"
"line3"
"-----"
"line4"
nil
"line4"
|
このように、Rubyのgsubメソッドを利用すれば、改行コードを削除できます。
Rubyでの削除以外の改行指定
これまでは削除について紹介しましたが、削除以外の改行指定についても以下2つを紹介します。
1. 改行コードの統一
2. 改行でsplit
改行コードの統一
改行コードはOSによって異なりますので、改行コードを統一する方法を紹介します。ここでは、\r\n, \r, \n をすべて \n に統一します。
実際のソースコードを見てみましょう。
1
2
3
4
|
string = "line1\r\nline2\rline3\nline4"
p string
p string.gsub!(/\R/, "\n")
|
実行結果は以下のようになります。
1
2
|
"line1\r\nline2\rline3\nline4"
"line1\nline2\nline3\nline4"
|
\r\n, \r, \n がすべて \n に統一されていることが分かります。
このように、Rubyのgsubメソッドを利用すれば、改行コードを統一できます。
改行でsplit
改行コードを統一し、splitする例を紹介します。
実際のソースコードを見てみましょう。
1
2
3
4
5
|
string = "line1\r\nline2\rline3\nline4"
p string
p string.gsub!(/\R/, "\n")
p string.split(/\n/)
|
実行結果は以下のようになります。
1
2
3
|
"line1\r\nline2\rline3\nline4"
"line1\nline2\nline3\nline4"
["line1", "line2", "line3", "line4"]
|
\nでsplitすることで配列に格納されていることが分かります。
このように、改行できます。
- システム
エンジニア - 改行コードの削除の仕方はいろいろあるのですね。
- プロジェクト
マネージャー - ただ、改行コードはOSによって異なりますので、 , , はすべて に統一するようにしましょう。
Rubyで改行コードを使ってみよう
いかがでしたでしょうか。今回は、Rubyでの改行コードの扱い方について説明しました。
文字列の途中で改行する方法や改行コードの削除方法について紹介しましたが、改行コードはOSによって異なります。そこで改行コードの統一方法や、改行でsplitする方法についても紹介しました。
実際にご自身でRubyのソースコードを書いて、理解を深めてください。
FEnet.NETナビ・.NETコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。
-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。
Ruby新着案件New Job
-
RedmineプラグインおよびWEB開発/Ruby/東京都中央区/【WEB面談可】/在宅勤務
月給65万~65万円東京都中央区(新富町駅) -
Webアプリケーション運用保守/Ruby/東京都江東区/【WEB面談可】
月給50万~60万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)のテスター/Ruby/東京都江東区/【WEB面談可】
月給25万~35万円東京都江東区(亀戸駅) -
Webアプリケーション開発(既存機能改修)/Ruby/東京都江東区/【WEB面談可】
月給45万~60万円東京都江東区(亀戸駅) -
Ansibelの自動構築/Ruby/東京都台東区/【WEB面談可】/テレワーク
月給46万~48万円東京都台東区(浅草駅) -
会計ワークフローの開発/Ruby/東京都新宿区/【WEB面談可】/フルリモート
月給46万~48万円東京都新宿区(新宿駅)