配列の各要素を出力するには
添付ファイルを見ました.ファイルを行ごとに読み出して,行末を取り除きながら配列に格納したのち,動作確認用に中身を出力している処理について,
for item in array print item + "\n" end
と書いていますが,Rubyらしくありません.
これは
puts array
としてください.putsメソッドには,配列や,複数の要素を引数に与えることができます.引数に応じた改行処理も行ってくれますので,「\n」は不要です.
ファイルに出力するには
ファイル出力のコードも見ました.コメントアウトが多数あって,苦心の跡もうかがえますが,以下のように書くのが基本です.
open(file_name, "w") do |f_out| f_out.puts array end
Cのfor/whileループ,Rubyでは
Cの繰り返し処理はforまたはwhileを使用しますが,Rubyでは必ずしもそれらの制御構造を使いません.以下のコード例を知っておくといいでしょう.
/* 0から9まで */ int i; for (i = 0; i < 10; i++) { printf("%d\n", i); }
# 0から9まで(その1) 10.times do |i| puts i end # 0から9まで(その2) 0.upto(9) do |i| puts i end # 0から9まで(その3) puts (0...10).to_a
/* ファイルを開いて1文字単位で読み出す */ FILE *fp; int c; if ((fp = fopen("input.txt", "r")) == NULL) { printf("error: fopen\n"); exit(1); } while ((c = fgetc(fp)) != EOF) { printf("%c", c); } fclose(fp);
# ファイルを開いて1行単位で読み出す.改行も保持される array = [] open("input.txt") do |f_in| f_in.each_line do |line| array << line end end # ファイルを開いて読み出し,行ごとの配列にする.改行は除去される array = open("input.txt").read.split(/\n/)
/* 文字列配列の各要素(文字列)およびバイトサイズを出力する */ /* %zuについて: https://qiita.com/7of9/items/ca5ebf9b7861acbcf656 */ char *array[50]; /* arrayの各要素に文字列を参照させる */ int i; for (i = 0; i < 50; i++) { printf("%s (%zu)\n", array[i], strlen(array[i])); }
# 文字列配列の各要素(文字列)およびバイトサイズを出力する array = [] # arrayに値を格納する puts array.map { |s| "%s (%d)" % [s, s.bytesize] }
なにこれ
夏休み期間中に学生から来たメールに対する返信を,アレンジしたものです.