2011年5月 1日

[ruby-list:48027] Re: 2つのCSVファイルの結合方法についてご質問

From: askar k <tenzancode@xxxxx>
Subject: [ruby-list:48023] 2つのCSVファイルの結合方法についてご質問
Date: Sun, 1 May 2011 15:31:25 +0900

るびきちです。

# なんかめちゃ久しぶりの投稿なのだが…。

> コード:
> require "fileutils"
> FileUtils.cp("file1.csv", "file3.csv") #まずはひつ目のファイルをコピーしました
>
> File.open("file3.csv", "a+") #できた新しいファイルを追加モードに設定
> File.open("file2.csv", "r") do |file| #追加したいファイルをリードモードに設定
> file.each_line do |line|
> puts line #ここではfile3.csvにデータを追加して行きたいのですが、どうしたらよいか分かりません。
> end
> end

まず、根本的なことから。
「#」は全角になっているのでコメントになっていません。
また、#の前にも全角スペースが入っています。

そして本題。惜しい!もう少しでうまくいくところでしたね。

File.open("file3.csv", "a+") do |out|

end

でoutに書き込めば、file3.csvに追記されます。
そして、outに書き込むには out.puts を使います。

元のコードに忠実な形だと、こうですね。

# -*- coding: utf-8 -*-
require "fileutils"
FileUtils.cp("file1.csv", "file3.csv") #まずはひつ目のファイルをコピーしました

File.open("file3.csv", "a+") do |out|
File.open("file2.csv", "r") do |file|
file.each_line do |line|
out.puts line
end
end
end


もっと簡単にやるならば、こうやる。
File.read(ファイル名)でファイルの内容がまるごと文字列で得られるので、
それをout.putsします。
モードがwになっているのは新規作成です。

open("file3.csv", "w") do |out|
out.puts File.read("file1.csv")
out.puts File.read("file2.csv")
end

さらに、out.puts File.readが重複しているので、Array#eachで
「各々のファイルについて」と表現してあげることもできます。
こうすることで、追加するファイルがいくつになっても簡単に対応できるようになります。

open("file3.csv", "w") do |out|
["file1.csv", "file2.csv"].each do |file|
out.puts File.read(file)
end
end

> この問題を解決するにはどの方向で調べて行けばよいか教えて頂ければ幸いです。
> 手物とにある本はたのしいRUBY第3版です。

とりあえず、File、IO、Array、String、Enumerableのメソッドを地道に学んでいきましょう。
これらのクラスは頻出なので、しっかり学んでおく必要があります。
中には難しいメソッドも含まれるので、わからないものは飛ばしてOKです。

英語を学ぶには単語を学ばないといけないように、
Rubyを学ぶには、頻出メソッドを学ばないといけません。

地道な作業になりますが、必ず実を結ぶので、がんばってくださいね。

--
rubikitch
Blog: http://d.hatena.ne.jp/rubikitch/
Site: http://www.rubyist.net/~rubikitch/
Twit: http://twitter.com/rubikitch/
『Emacsテクニックバイブル』 http://d.hatena.ne.jp/rubikitch/20100713/emacsbook
『Ruby逆引きハンドブック』 http://d.hatena.ne.jp/rubikitch/20090525/rubybook


投稿者 xml-rpc : 2011年5月 1日 17:05
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/103541
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。