Learn Ruby The Hard Way に取り組んでいます。
この本には注意してください。この本は、Ruby コードよりも Python コードを多く書く人によって書かれています。
これは、Ruby で何かを行う慣用的な方法に影響を与えることは避けられません。
演習 15 では、テキスト ファイルを開いて読み取る方法を示します。
一般に、これは簡単です。
data = File.readlines('foo.txt')
data = File.read('foo.txt')
また、次のことを行うこともお勧めします。
if File.exist? 'foo.txt'
そうしないと、上記が失敗する可能性があるため、その前に確認してください。
そしてそれを画面に印刷する方法
また、シンプルです。変数を介してハンドルを取得したら、それを出力できます。
デバッグしたい場合は、pp を使用することをお勧めします。
require 'pp'
pp data # From the above variable name.
次の演習では、冒頭で「.read」コマンドについて「ファイルの内容を読み取ります。結果を変数に割り当てることができます」と簡単に述べています。
はい、そうです。.read() は、ファイルで使用できるメソッドですが、IO 関連のオブジェクトでも使用できます。
私が知りたいのは、読み取りの結果を新しい変数に割り当てる方法だけです。
いつものように、代入には = 文字を使用します。
上記の場合、配列または文字列になるメソッドの戻り値にも割り当てることができます。
配列を使用すると、操作が簡単になる場合がありますが、文字列から配列に変換して元に戻すのは簡単です。File.readlines() を実行するとファイル全体がメモリに読み込まれるため、大きなファイルはわずかな速度低下を引き起こす可能性があることに注意してください。
演習 16 では、彼はそれを使用せず、書き続けます。
良いチュートリアルだとは誰も言いません。:)
私は古い Chris Pine のものを好みますが、2015 年に合わせて更新する必要があります。
数値を含むテキスト ファイルを読み取り、その数値を「.to_i」してブール値を返す短いスクリプトを作成しました。私は何かが欠けていることを知っています。
.to_i を使用して整数を取得します。
お気に入り:
"5".to_i # 5
「5」ではなく、5 が返されます。
ルビーにはtrueとfalseの2つの「ブール値」しかないため、「ブール値を返す」というあなたの声明はあまり意味がないようです。if/else チェックには、nil などの他の変数も使用できます。これは、false と多少似ています (ただし同一ではありません)。
unless nil
puts 'Hello World!'
end
基本的に私が知る必要があるのは、txt.read 出力を新しい変数 (単に「変数」と呼ばれる) に割り当て、gets.chomp.to_i を使用してそれを整数に変換し、ブール比較が機能するようにすることだけです。どんな助けでも大歓迎です、ありがとう!
はい、割り当てるだけです。
ファイル名 = gets.chomp
^^^ ここで、filename と呼ばれる変数に入力があります。
txt = 開く (ファイル名)
^^;これはダメです。代わりに File.open() を使用しないのはなぜですか?
print txt.read
私はこれが好きではありません。上記のメソッドで .read() を次のように使用する必要があります。
txt = File.read(filename)
.open() は必要ありません。
variable = txt.read.to_i ## txt.read を変数に代入しようとしていますか?
これは意味がありません。なぜ .to_i を使用するのですか?
そこに Integer/Fixnum は必要ありません。文字列が必要です。
print { 変数 > 4 && false }
この行も私には意味がありません。
そこの数字に基づいてチェックしたいようですね?