Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140817190653_ruby_IO |
|
ruby_IO
ファイルを1行ずつ読んで何かするならこれで十分だ。 csv2tsv.rb
#! /usr/bin/ruby
# coding: utf-8
while line = gets
puts line.gsub(/,/, "\t")
end
読み込むファイル、書き出すファイルはシェルのコマンドラインでコントロールすれば良い。 % csv2tsv.rb sample.csv id name price currency 1 item-A 2980 JPY 2 item-B 900 JPY 3 item-C 3980 JPY 4 item-D 1980 JPY % csv2tsv.rb sample.csv > sample.tsv % cat sample.tsv id name price currency 1 item-A 2980 JPY 2 item-B 900 JPY 3 item-C 3980 JPY 4 item-D 1980 JPY
ちなみに puts の動作としては、文字列の最後に改行が「なければ」加える。 そもそも改行文字で終わる文字列なら新たに改行文字は付け足されない。 [57] pry(main)> puts "aaa" aaa => nil [58] pry(main)> puts "aaa\n" aaa => nil
ファイルを一気読みするなら IO.read, IO.readlines が便利だ。
# string
IO.read("sample.csv")
# => "id,name,price,currency\n1,item-A,2980,JPY\n2,item-B,900,JPY\n3,item-C,3980,JPY\n4,item-D,1980,JPY\n"
# Array
IO.readlines("sample.csv")
# => ["id,name,price,currency\n", "1,item-A,2980,JPY\n",
"2,item-B,900,JPY\n", "3,item-C,3980,JPY\n",
"4,item-D,1980,JPY\n"]
文字列ストリーム stringIO.rb
#! /usr/bin/ruby
# coding: utf-8
require 'stringio'
str = "aaa\nbbb\nccc"
input = StringIO.new(str)
output = StringIO.new("", "w")
input.each_line do |line|
output.puts line.upcase
end
print output.string
# % stringIO.rb
# AAA
# BBB
# CCC
|
| © Shin Nakamura/BasicWerk 2014 |