[#48044] Re: ruby 1.9.2とRails3 へのアップグレード — "Endo Akira" <endo4917@...>

アスカルさん

12 messages 2011/05/04
[#48045] Re: ruby 1.9.2とRails3 へのアップグレード — "Y. NOBUOKA" <nobuoka@...> 2011/05/04

GyRCJSIlOSUrJWskNSRzGyhCCgobJEI/LjIsJEckOSEjGyhCCgo+IBskQjFzRiMkRyQ5ISMbKEIK

[#48062] 小数点つき時刻情報とTime#parse — Mitsuo KASAHARA <m.kasahara13@...>

笠原ともうします。

18 messages 2011/05/09
[#48068] Re: 小数点つき時刻情報とTime#parse — Tanaka Akira <akr@...> 2011/05/09

2011年5月9日10:29 Mitsuo KASAHARA <m.kasahara13@gmail.com>:

[#48070] Re: 小数点つき時刻情報とTime#parse — EGUCHI Osamu <eguchi@...> 2011/05/09

えぐち@エスアンドイーです

[#48072] Re: 小数点つき時刻情報とTime#parse — Tanaka Akira <akr@...> 2011/05/09

2011年5月9日13:43 EGUCHI Osamu <eguchi@sandeinc.com>:

[#48092] 後継者募集 — MoonWolf <moonwolf@...>

MoonWolfです。

22 messages 2011/05/22
[#48095] Re: 後継者募集 — Youhei SASAKI <uwabami@...> 2011/05/23

MoonWolf 様: 佐々木と申します.

[#48096] Re: 後継者募集 — MoonWolf <moonwolf@...> 2011/05/23

MoonWolfです。

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

From: rubikitch@...
Date: 2011-05-01 08:05:44 UTC
List: ruby-list #48027
From: askar k <tenzancode@gmail.com>
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

In This Thread