ファイルの COPY
1.1. ファイルの COPY
1行ずつ読んで、1行ずつ書く
lesson001.rb
STDIN.each do |line|
puts line
end
実行結果
C:\>ruby "C:\study\SoftwareTools\1_1_ファイルのCOPY\lesson001.rb" < "C:\study\So
ftwareTools\1_1_ファイルのCOPY\test.txt"
1. 手はじめに1.1. ファイルの COPY
1.2. 文字数を数える
1文字ずつ読んで、1文字ずつ書く
lesson002.rb
STDIN.each do |line|
line.split(//s).each do |char|
puts char
end
end
実行結果
C:\>ruby "C:\study\SoftwareTools\1_1_ファイルのCOPY\lesson002.rb" < "C:\study\So
ftwareTools\1_1_ファイルのCOPY\test.txt"1
.手
は
じ
め
に
1
.
1
.フ
ァ
イ
ル
のC
O
P
Y
1
.
2
.文
字
数
を
数
え
る
1文字ずつ読んで、1文字ずつ書く
lesson004.rb
#******************************************************************************
# 1文字ずつ読んで、1文字ずつ書く
#******************************************************************************#==============================================================================
# 1文字 取得
#==============================================================================
$current_line = []
$pos = -1
$NEWLINE = "\n"
$EOF = "\0";def get_char
# まだ読んでなかったら
if $current_line.size == 0
# 1行読む
line = $stdin.gets# ファイルの終わりなら 終了
return $EOF unless line# 改行コードを取り除く
line.chomp!;# 文字の配列に分解
$current_line = line.split(//s)# 現在位置 クリア
$pos = 0;
end# 行の終わりに達したら
if $pos >= $current_line.size
# 現在行 クリア
$current_line = []# 行の終わりを 知らせる
return $NEWLINE;
endchar = $current_line[$pos]
$pos += 1return char
end#==============================================================================
# 1文字 出力
#==============================================================================
$buffer = ""def put_char(char)
if char == $NEWLINE
# 行の終わりなら 出力
puts $buffer
$buffer = ""
else
# 行の終わりでなければ、バッファにためる
$buffer << char
end
end#==============================================================================
# 1文字ずつ読んで、1文字ずつ書く
#==============================================================================
c = ""
put_char c while (c = get_char) != $EOF
実行結果
C:\>ruby "C:\study\SoftwareTools\1_1_ファイルのCOPY\lesson004.rb" < "C:\study\So
ftwareTools\1_1_ファイルのCOPY\test.txt"
1. 手はじめに1.1. ファイルの COPY
1.2. 文字数を数える