ファイルの 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;
end

char = $current_line[$pos]
$pos += 1

return 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. 文字数を数える