1

私はプログラミングの初心者で、Learn Ruby The Hard Way に取り組んでいます。演習 15 では、テキスト ファイルを開いて読み取る方法と、それを画面に出力する方法を示します。次の演習では、冒頭で「.read」コマンドについて「ファイルの内容を読み取ります。結果を変数に割り当てることができます」と簡単に述べています。

私が知りたいのは、読み取りの結果を新しい変数に割り当てる方法だけです。演習 16 では、彼はそれを使用せず、書き続けます。数値を含むテキスト ファイルを読み取り、その数値を「.to_i」してブール値を返す短いスクリプトを作成しました。私は何かが欠けていることを知っています、そしてそれは私には合いません。

基本的に私が知る必要があるのは、txt.read 出力を新しい変数 (単に「変数」と呼ばれる) に割り当て、gets.chomp.to_i を使用してそれを整数に変換し、ブール比較が機能するようにすることだけです。どんな助けでも大歓迎です、ありがとう!

print "Enter the filename: "
filename = gets.chomp

txt = open(filename)
print txt.read
variable = txt.read.to_i ##Trying to assign the txt.read to a variable?

print { variable > 4 && false }
4

3 に答える 3

1

ファイルを開くと、読み込んだファイルのポイントにカーソルが作成されます。追加の引数なしで呼び出すreadと、ファイル全体が読み取られ、そのカーソルがファイルの末尾を指すため、後続のread呼び出しでは空の文字列 ( "") が返されます。あなたの場合、最初に割り当ててから他のことをする必要があります:

txt = open(filename)
content = txt.read
print content
variable = content.to_i

readこれは、読み取るバイト数を示す引数を指定して何度も呼び出すことと比較できます。毎回指定された長さのファイルの別のチャンクを取得します。

また、最終的な呼び出しにはおそらく問題があります.printはブロックを取得せず、それがあなたが渡しているものです. する必要があるprint(variable > 4)か、似たようなものです。

于 2015-05-10T08:28:34.927 に答える
0
print "Enter the filename: "
filename = gets.chomp

file = open(filename)
variable = file.read
file.close
number = variable.to_i
于 2015-05-10T10:04:16.603 に答える
0

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 }

この行も私には意味がありません。

そこの数字に基づいてチェックしたいようですね?

于 2015-05-10T10:44:12.260 に答える