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