From: askar k Date: 2011-05-01T17:10:12+09:00 Subject: [ruby-list:48028] Re: 2つのCSVファイルの結合方法についてご質問 るびきち様 ありがとうございます。 詳細な解説でした。 注意事項も気をつけます。 ますます面白くなって来ています。 頑張ります。 今後も宜しくお願いします、 アスカル 2011/5/1 : > 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 > >