From: rubikitch@... Date: 2011-05-01T16:51:31+09:00 Subject: [ruby-list:48026] Re: 2つのCSVファイルの結合方法についてご質問 From: askar k 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