Just do IT

思うは招く

2019-12-01から1ヶ月間の記事一覧

Sinatraでルートに正規表現を指定して数値を取得する

get %r{/users/([0-9]*)} do "user_id = #{params[:captures][0]}" end %rでルートに正規表現を書ける ここでは「0〜9までの連続する値」を取得。()で囲めばキャプチャできる キャプチャしたものはparams[:captures]配列に入っている 数値以外を入力してもエ…

テキストファイルのエンコーディングを変換して出力 Ruby基礎#27

お題 Shift_JISで「こんにちは」と書かれたテキストファイルを作り、そのテキストファイルを読み込んでUTF-8で出力するスクリプトを作れ。 「たのしいRuby 第6版 P.426」より 回答 File.write("bar.txt", "こんにちは", encoding: "Shift_JIS") text = File.…

Debian に PostgreSQL をインストールする方法

やりたいこと Linux(Debian)にPostgreSQLをインストールする手順 リポジトリの追加 クライアント証明書をインストール PostgreSQLをインストール ユーザー追加 感謝の参照 やりたいこと LinuxにPostgreSQLをインストールしたい Debian10系(buster)を使用 Pos…

文字列を異なるエンコーディングに変えて連結して返す Ruby基礎#26

お題 EUC-JPの文字列と、Shift-JISの文字列を連結してUTF-8の文字列を返すメソッドを定義せよ。 回答 str_euc = "マッスル".encode("EUC-JP") str_sjis = "北村".encode("Shift_JIS") def to_utf8(str_euc, str_sjis) str_euc.encode("UTF-8") + str_sjis.en…

Rubyのライブラリの名前だけを取り出す Ruby基礎#25

お題 変数$:にはRubyが利用するライブラリが置かれているディレクトリの名前が配列の形で格納されている この変数を使い、RUbyが利用できるライブラリのファイル名を順に出力せよ 「たのしいRuby 第6版 P.410」より 回答 (カンニングしてしまった...) $:.e…

[Ruby] ファイルをコピーする基本

Rubyでファイルをコピーする方法。 Fileクラスを使う。 open("bar.txt") do |input| open("foo.txt", "w") do |output| output.write(input.read) end end まずはopen.txtというファイルを開き、データをinputとして引数にとる。 その後、書き込みたいファイ…

テキストファイルからデータを読み込み、いろんな処理をして書き込む Ruby基礎#24

お題 テキストファイルからデータを読み込み、次の条件に従って上書きをするスクリプトを作成せよ。 ファイル中の行を逆順に並べ替える ファイル中の最初の1行だけ残して他は削除 ファイル中の最後の1行だけ残して他は削除 回答 # ファイル中の行を逆順に並…

Kyoto.rbにRuby初心者が参加した感想

2019年12月21日、Kyoto.rbに参加した。 人生で初めてのプログラミングコミュニティに出たので感想などをメモしておく。 感想 テックエキスパートで学んでエンジニアになった人がいてリアルな仕事の話を聞けた プログラミングよりもインフラ周りで苦しんだか…

lsコマンドの結果を自作wcコマンドでカウント Ruby基礎#23

やりたいこと ターミナルのls -lコマンドの結果を自分で作ったwcコマンドにかけて行数・単語数・容量を表示させたい。 つまり以下の処理をしたい。 ls -l | wc コード # 標準入力を受け取る input = $stdin.read # 行数を取得 def load_lines(str) str.count…

[Ruby] __FILE__や__dir__って何?

Rubyで見かけるアンダーバーふたつで囲まれた奴ら。 __FILE__ __dir__ き、きみたちは一体何?どこからきたの? __FILE__:現在実行しているファイル ruby_basic.rbというファイルに以下のコードを書いて実行してみる。 puts "__FILE__: #{__FILE__}" => __F…

Ruby基礎問題100本ノック#22 テキストの行数・単語数・文字数を数える

お題 テキストファイルからデータを読み込んで、次の数を数える処理を行うスクリプトを作成せよ。 行数 単語数 文字数 サンプルテキストファイル foo.txt 山田孝之 鬼束ちひろ マッスル北村 arnold schwarzenegger 回答 # ファイルの文字列を読み込む str = …

Ruby基礎問題100本ノック#21 正規表現と文字列とcapitalize

お題 アルファベットとハイフンからなる文字列を与えられると、ハイフンで区切られた部分をcapitalizeするようなメソッドword_capitalizeを定義せよ。 引用:「たのしいRuby 第6版」P.364より 回答 def word_capitalize(str) ary = str.split(/\-/) ary.map(…

Ruby基礎問題100本ノック#20 gsubメソッドを使う

お題 「正規表現は難しい!なんて難しいんだ!」という文字列を、gsubメソッドを使って「正規表現は簡単だ!なんて簡単なんだ!」という文字列に直せ。 引用:「たのしいRuby 第6版」P.364より 回答 str = "正規表現は難しい!なんて難しいんだ!" str.gsub(…

Ruby基礎問題100本ノック#19 正規表現1

お題 電子メールアドレス「ローカルパート@ドメイン名」の文字列から、ローカルパートを$1、ドメイン名を$2として取得する正規表現を作れ。 引用:「たのしいRuby 第6版」P.364より 回答 email = "test@domain.com" email.scan(/(\w+)@(\w+\.\w+)/) do |m| p…

Rubyの正規表現 超基本

正規表現は「パターン発見くん」 「正規表現」という表現がもはやとっつきにくそうなオーラを出しているが、ようは文字列とマッチングをする「パターン」の書き方のこと。最初はわかりにくいので「パターン発見くん」みたいな感じでとらえるといい。 たとえ…

Ruby基礎問題100本ノック#18 文字列をハッシュに入れる

お題 空白、タブ、改行で区切られた以下の文字列を、ハッシュに変換するメソッドstr_to_hashを定義せよ。 # こんな文字列を ”blue 青 white 白\nred 赤” # こんなふうにしてくれよぉ => {"blue"=>"青", "white"=>"白", "red"=>"赤"} なお、空白、タブ、改行…

Ruby基礎問題100本ノック#17 ハッシュの定義、eachメソッドを使う

お題 (1)曜日を表す英語と、日本語との対応を表すハッシュwdayを定義せよ (2)ハッシュのメソッドを使い、ハッシュwdayのペアの数を数えよ (3)eachメソッドと(1)のハッシュwdayを使って、以下のような文字列を出力せよ 「sunday」は日曜日のことです。 「mond…

[Ruby] printfメソッドの使い方と例

Rubyのprintfメソッドについて、簡単な使い方をまとめました。 printfメソッドとは 使い方 作成例1 作成例2 指示子の種類 他にもいろんな指定方法がある printfメソッドとは 文字列の整形に使えるメソッド フォーマットに従って文字列を出力する 使い方 prin…

Ruby基礎問題100本ノック#16 文字列をいじる

お題 (1) "Ruby is an object oriented programming language"という文字列に含まれる各単語を要素とする配列を作れ (1)の配列をアルファベット順にソートせよ (2)の配列を大文字と小文字の区別をせずにアルファベット順にソートせよ (1)の文字列の各文字(…

[Ruby] ヒアドキュメントの作り方

ヒアドキュメントとは 行指向文字列リテラルを使って文字列を作る方法 複数行の文字列はヒアドキュメントを使ったほうが書きやすい 作り方 <<識別子 行 行 行 識別子 先頭は<<で始める 識別子は最初と最後で同じ文字列を使う TEXT、EOF、EOBがよく使われる …

[Ruby] %記法で文字列を作る

Rubyでは、%q記法を使って文字列を簡単に作ることができる。 'や"などの特殊文字をエスケープするのが面倒なときによい。 %q: 'や"をエスケープなしで記述できる p moji = %q(He said, 'I want more muscle!') => "He said, 'I want more muscle!'" 用途によ…

Ruby基礎問題100本ノック#15 複数の配列に並行してアクセスする

お題 数値からなる配列num1とnum2にたいして、それらの個々の要素を足し合わせた要素からなる配列を返すメソッドsum_arrayを定義せよ こんな感じの結果にせよ。 p sum_array([1, 2, 3],[4, 6, 8]) => [5, 8, 11] (たのしいRubyに収録されている例題です) …

Ruby基礎問題100本ノック#14 条件に合った配列の複数の要素を取り出す

お題 1〜100の整数を含む配列aryから、1〜10、11〜20、21〜30、というように10個の要素を含む配列を10個取り出せ 回答 ary = (1..100).to_a result = [] 10.times do |i| result << ary[i*10, 10] end 説明 (1..100).to_aで「1〜100」の整数を格納した配列が…

[Ruby] モジュールの中にクラスを保持させる

モジュールの中にクラスを入れてみる。 module LS class File attr_reader :name def initialize(name) @name = name puts @name end end end LS::File.new('hoge').name => hoge この場合、使うときはモジュール名::クラス名.メソッドになる。

[Ruby] 引数に複数の値を持たせてハッシュに入れる

Rubyでは、引数にアスタリスク2つ**をつけると、ハッシュに格納できる。 これは見たほうがわかりやすい。 def hello_with_options(msg, **opts) name = opts[:name] name2 = opts[:name2] time = opts[:time] || Time.now puts "#{msg} #{name} and #{name2}…

Ruby基礎問題100本ノック#13 配列の要素に変更を加える

お題 1〜100までの整数が昇順に並ぶ配列aryを作れ 配列aryの各要素を100倍した配列ary2を作れ 回答 ary = (1..100).to_a ary2 = ary.map { |n| n * 100 } 説明 前回と似たような感じの問題。 k-koh.hatenablog.com mapメソッドにブロックを渡し、配列の各要…

Ruby基礎問題100本ノック#12 整数が昇順に並ぶ配列を作る

お題 1~100までの整数が昇順に並ぶ配列aを作れ a[0]は1、a[99]は100とする 回答 def make_ary(ary) 1.upto(100) { |n| ary.push(n) } end ary = [] make_ary(ary) p ary 説明 1.upto(100)で「1から100まで繰り返す」という意味になる。 ブロックの中でary.pu…

[Ruby] %記法で配列をカンタンに作る方法まとめ

共通事項 囲む文字(区切り文字)は!~!,(~),[~],%~%, &~&などいろんな記号が使える %の次に来る文字は小文字、大文字がある 大文字は式展開や改行文字などを含められる wは文字列、iはシンボルの配列を作る %w, %W 文字列の配列を作る %w(hoge foo bar baz) …

Rubyで素数かどうか確かめる

RubyではPrimeクラスで素数を扱える。 primeをrequireする。 require 'prime' Prime.prime?(i)で、iが素数ならtrue、素数じゃないならfalseが返る。 Prime.prime?(5) => true Prime.prime?(6) => false docs.ruby-lang.org

Ruby基礎問題100本ノック#11 サイコロを作る

お題 (1)サイコロを降って出た目を返すメソッドdiceを定義せよ サイコロには1〜6の数字がある (もちろん)サイコロなのでランダムに値が返る (2)10個のサイコロを振って出た目の合計を返すメソッドdice10も定義せよ 回答 (1)の回答 def dice(ary) puts ary.…