Rubyによるchrメソッドの利用方法について現役エンジニアが解説【初心者向け】
初心者向けにRubyによるchrメソッドの利用方法について解説しています。chrメソッドを使うことで文字コードから文字を出力することができます。基本の書き方と使い方の例を見ていきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
Rubyによるchrメソッドの利用方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。
Rubyによるchrメソッドを利用することで数値を文字に変換することができます。
実務でも数値を文字に変換する際に活用することが可能です。
目次
そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。
今回は、Rubyに関する内容だね!
どういう内容でしょうか?
chrメソッドの利用方法について詳しく説明していくね!
お願いします!
chrメソッドとは
chrメソッドは、ASCIIコードで表示された数値等を文字列に変換するメソッドです。
変換する際にどんな文字コードで変換するかという、変換のためのエンコーディングの種類を指定することもできます。
chrメソッドの記述方法
基本の使い方
chrメソッドは、数値に対して呼び出します。戻り値は文字列です。
数値.chr
サンプルコード
例えば、49という10進数を変換したい場合は、
puts 49.chr
と書きます。49を変換すると、戻り値は、文字列 “1” です。
表示結果
1
16進数を指定する
16進数にも使えます。
サンプルコード
puts 0x45.chr
と書きます。0x45を変換すると、戻り値は、文字列 “E” です。
表示結果
E
エンコーディングを指定する
エンコーディングを指定して呼び出すには、chrの後にエンコーディングを指定します。
サンプルコード
puts 0x3042.chr(Encoding::UTF_8)
と書きます。0x3042をUTF-8でエンコードすると、戻り値は、全角文字列 “あ” です。
表示結果
あ
エンコーディング表記には、「UTF_8」の部分に、「US_ASCII」「 EUC_JP」「 SHIFT_JIS」どを使うことができます。
その他のエンコーディング表記は、”class Encoding ( Ruby 3.0.0 リファレンスマニュアル)“をご覧ください。
chrメソッドと数値データを利用して文字列を出力してみよう
それでは実際にchrメソッドを利用してみましょう。
文字コード表を出力する
半角文字の一部の文字コード表を表示してみます。
サンプルコード
#横軸のラベル表示
puts " |0123456789ABCDEF"
puts "-------------------"
#0x20から0x7fまでを表示
(2..7).each do |roop|
subset = 0x10*roop
#縦軸のラベル表示
print subset.to_s(16) + "|"
(0x00..0x0f).each do |num|
print (subset + num).chr
end
puts
end
表示結果
解説
puts ” |0123456789ABCDEF”では、|0123456789ABCDEFという文字列を表示しています。
この文字列が表示結果の1行目になります。
puts “——————-“では、1行目と3行目の間に表の罫線を表す波線を2行目に表示しています。
(2..7).each do |roop|では、each do 処理を利用して、2から7までの数値を、変数roopに代入し続ける繰り返し処理です。
each do のdoは省略可能でが、省略すると実装コードも若干変わります。
詳しくは、繰り返し処理!Rubyでeachを使う方法 を参考にしてみてください。
subset = 0x10*roopでは、変数roopに入った数値を10進数の16で掛け算して、変数subsetに代入します。
0xから始まるため、この0x10が16進数であることがわかります。
16進数の0x10は、10進数の16を意味します。
例えば、0x10*2では、最初の変数roopに入っている2を、0x10と掛けることで32という数値を導き出しています。
今回、0x10と2から7までの数値を掛けることで、それぞれ次のような数値が導き出されます。
0x10*2の結果は 32
0x10*3の結果は 48
0x10*4の結果は 64
0x10*5の結果は 80
0x10*6の結果は 96
0x10*7の結果は 112
これらの数値を繰り返し処理の中で変数subsetに代入しています。
print subset.to_s(16) + “|”では、to_sを利用して、変数subsetの値を、16を基数とした文字列に変換しています。
その後、列部分の罫線を表す|を表示しています。
たとえば、最初に表示される値は、subsetに32が代入されているため、32.to_s(16)の結果である20が表示されます。
to_sメソッドについては、Rubyのto_sメソッドの使い方の記事を参考にしてみてください。
表示結果で言うと、次のような3行目以降の各列の最初の表示の部分になります。
20|
30|
40|
50|
60|
70|
(0x00..0x0f).each do |num|では、each do を利用して変数numに、 0x00から0x0fまでの値を繰り返し代入しています。
0x00は0xで始まる16進数で、10進数の0を意味します。
print (subset + num).chrでは、変数subsetと変数numを加算し、.chrメソッドで
例えば、subsetが48で、numに0x00から0x0fまでの値を繰り返し代入し、加算した場合次のような結果になります。
これらの結果は、表示結果4行目にある、30の行の文字コード表で出力されます。
(48+0x00).chrの結果は 0
(48+0x01).chrの結果は 1
(48+0x02).chrの結果は 2
(48+0x03).chrの結果は 3
(48+0x04).chrの結果は 4
(48+0x05).chrの結果は 5
(48+0x06).chrの結果は 6
(48+0x07).chrの結果は 7
(48+0x08).chrの結果は 8
(48+0x09).chrの結果は 9
(48+0x0a).chrの結果は :
(48+0x0b).chrの結果は ;
(48+0x0c).chrの結果は <
(48+0x0d).chrの結果は =
(48+0x0e).chrの結果は >
(48+0x0f).chrの結果は ?
endでは、(0x00..0x0f).each do |num|の繰り返し処理を終了しています。
putsでは、改行を出力しています。
endでは、(2..7).each do |roop|の繰り返し処理を終了しています。
実行すると、以下のように文字コード表を出力します。
|0123456789ABCDEF
-------------------
20| !"#$%&'()*+,-./
30|0123456789:;<=>?
40|@ABCDEFGHIJKLMNO
50|PQRSTUVWXYZ[]^_
60|`abcdefghijklmno
70|pqrstuvwxyz{|}~
まとめ
chrを使うと、数値を文字に変換できます。文字コードの数値から文字を出力したいときに使ってみてください。
この記事を監修してくれた方
中本賢吾(なかもとけんご) アジマッチ有限会社 代表取締役社長開発実績:PHPフレームワークによるフランチャイズ企業向け会員制SNS。Shopifyによる海外進出用大規模ネットショップ構築。Vue.jsによる金融機関向け内部アプリ。AWSやLinuxハウジングサーバーでの環境構築。人工知能を利用した画像判別システム。小売チェーン店舗用スマホアプリ。Wordpressによる不動産チェーン店向け賃貸・売買仲介システム。基幹システム移管用データコンバートシステム。ボランティア活動:小学生がオリジナルAndroidアプリをGooglePlayでリリース、NHK Whyプログラミング入賞、全国Programing Festival入賞、中学生がSNS型PWAアプリリリースする市クラブ講座活動を行っている。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。
挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。