[#18233] [book] blade.nagaokaut.ac.jp/ruby/ruby-list/ — Shin-ichiro Hara <sinara@...>

原です。

21 messages 1999/11/01
[#18239] [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — keiju@... (石塚圭樹) 1999/11/01

けいじゅ@日本ラショナルソフトウェアです.

[#18244] Re: [book] csv_split2 [Re: blade.nagaokaut.ac.jp/ruby/ruby-list/] — Shin-ichiro Hara <sinara@...> 1999/11/01

原です。

[#18289] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18291] Re: [book] csv_split2 — keiju@... (石塚圭樹) 1999/11/02

けいじゅ@日本ラショナルソフトウェアです.

[#18311] Re: [book] csv_split2 — Koretsugu Daigoro <tmmcross@...> 1999/11/02

これつぐです。

[#18338] オブジェクトの非同一性判定 — Ayanosuke <aya@...>

 綾乃介です。

13 messages 1999/11/03

[#18539] [book] $*, etc. — Yasuhiro Fukuma <yasuf@...>

福間@福岡 です。

44 messages 1999/11/11

[#18580] — tokoma@... (中川 誠)

中川です。

44 messages 1999/11/14
[#18619] build on alpha — Go Nakagawa <nakagawa@...> 1999/11/15

もとの質問のかたとは別の中川です。

[#18737] Re: build on alpha — tokoma@... (中川 誠) 1999/11/18

中川です。

[#19144] Re: build on alpha — tokoma@... (中川 誠) 1999/12/04

中川です。長文で失礼します。

[#19341] Re: build on alpha — tokoma@... (中川 誠) 1999/12/09

中川です。

[#19344] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/09

まつもと ゆきひろです

[#19400] Re: build on alpha — tokoma@... (中川 誠) 1999/12/10

中川です。

[#19426] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/11

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

[#19459] Re: build on alpha — tokoma@... (中川 誠) 1999/12/13

中川です。

[#19461] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/13

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

[#19506] Re: build on alpha — tokoma@... (中川 誠) 1999/12/14

中川です。

[#19520] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

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

[#19522] Re: build on alpha — matz@... (Yukihiro Matsumoto) 1999/12/15

まつもと ゆきひろです

[#19543] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/15

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

[#19562] Re: build on alpha — tokoma@... (中川 誠) 1999/12/15

中川です。

[#19569] Re: build on alpha — EGUCHI Osamu <eguchi@...> 1999/12/16

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

[#19592] Re: build on alpha — tokoma@... (中川 誠) 1999/12/16

中川です。

[#18637] constant? — Kazuhiro Yoshida <moriq.kazuhiro@...>

もりきゅうです。

20 messages 1999/11/16
[#18640] Re: constant? — WATANABE Hirofumi <Hirofumi.Watanabe@...> 1999/11/16

わたなべです.

[#18650] Re: constant? — Kazuhiro Yoshida <moriq.kazuhiro@...> 1999/11/16

もりきゅうです。

[#18657] Re: constant? — matz@... (Yukihiro Matsumoto) 1999/11/16

まつもと ゆきひろです

[#18709] ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...>

塩田です。

18 messages 1999/11/18
[#18779] Re: ADO にて datetime 型の取得 — Masaki Suketa<CQN02273@...> 1999/11/20

助田です.

[#18802] Re: ADO にて datetime 型の取得 — Takashi SHIODA <tsio@...> 1999/11/21

オレンジソフト塩田です。

[#18712] Re: header output in eruby — TAKEUCHi Kahori <take-k@...>

たけうちです。

16 messages 1999/11/18
[#18716] Re: header output in eruby — "NAKAMURA, Hiroshi" <nakahiro@...> 1999/11/18

なひです.

[#18830] mod_ruby-0.1.4 — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

16 messages 1999/11/22

[#18853] initializer polymorphism? — Takeyuki Watadani <watadani@...>

渡谷といいます。

25 messages 1999/11/23

[#18911] Re: eRuby 変換後の無駄 (?) な改行 — TAKEUCHi Kahori <take-k@...>

たけうちです。

14 messages 1999/11/25

[#18914] Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...>

石橋秀仁です。

43 messages 1999/11/25
[#18975] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/11/27

[#19020] Re: Ruby standard GUI framework? — Hideto ISHIBASHI <s34204@...> 1999/11/29

石橋秀仁です。

[#19026] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/11/29

[#19081] Re: Ruby standard GUI framework? — "Hideaki Takata" <hideakit@...3.dion.ne.jp> 1999/12/01

たかたです。

[#19092] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/01

[#19112] Re: Ruby standard GUI framework? — 中村暁史 Nakamura Akifumi <BXQ04723@...> 1999/12/02

[#19131] Re: Ruby standard GUI framework? — Noritsugu Nakamura <nnakamur@...> 1999/12/03

[#18948] 他言語との比較 — とみたまさひろ <tommy@...>

とみたです。

18 messages 1999/11/26

[ruby-list:18483] Re: [book] csv_split

From: keiju@... (石塚圭樹)
Date: 1999-11-09 04:13:24 UTC
List: ruby-list #18483
けいじゅ@日本ラショナルソフトウェアです.

In [ruby-list :18477 ] the message: "[ruby-list:18477] [book]
csv_split ", on Nov/08 23:11(JST) Kazuhiro Nishiyama writes:

>こんばんは、ZnZです。

どもども.

>csv_split1は、列が「"」で終わる場合に
>例外(cannot decode CSV (RuntimeError))が発生します。

うーん.... 

こんな感じでしょうか... 正規表現がだんだん複雑になるのが気が重いけど...

# (アルゴリズムの本質を変えない)エレガントな解答求む.
--
###  csv_split

def csv_split(source, delimiter = ',')
  csv = []			 # splitした結果が入る.
  data = ""                      # 解析しているフィールドの文字列が入る.

  #(1)  文字列をデリミタで区切り, その区切られた文字列毎にeachで処理する.
  source.split(delimiter).each do |d|

    # (2) 継続フィールドの処理(フィールドが`"'で始まっている時のため)
    if data.empty?
      data = d
    else
      data += delimiter + d
    end

    if /^"/ =~ data
      # (3.1) 文字列が`"'で始まっている時の処理

      if /(^"|[^"])("")*"$/ =~ data 
	# (3.1.1) `"'で終了している時の処理

	# (A) "で始まるフィールドの処理
	csv << data.sub(/^"(.*)"$/, '\1').gsub(/""/, '"') 
	data = ''
      end
    else
      # (3.2) `"'で始まっていない時の処理
      csv << d
      data = ''
    end
  end
  raise "cannot decode CSV\n" unless data.empty?
  csv
end
--

>csv_split3は行が「"」で終わる場合に例外が発生します。
>./csv_split3.rb:41:in `concat': failed to convert nil into String (TypeError)
>        from ./csv_split3.rb:41:in `csv_split_for_quoted_field'
>        from ./csv_split3.rb:7:in `csv_split'
>
>また、のcsv_split3は最後の列が空の時に無視されるようです。
>
>
>p csv_split(',""""')   # =>どちらも例外
>p csv_split(',"""",')  # =>csv_split3だと["", "\""]になる。

うーん. うーん.

前者の問題は解決が楽だけど, 後者は.... csv_split2と同じく番兵(?)を置くこ
とにしました. 

# こちらもエレガントな解答求む
--
###  csv_split3

# (1) csv_splitの本体
def csv_split(source, delimiter = ',')
  chars = (source+",").split(//)              # (A) 文字列を1文字ずつに分解する
  csv = []
  while c = chars.shift			# 配列の先頭から1要素取り出し, その
                                        # 要素を配列から削除する
    case c
    when '"'
      # 配列csvにフィールドを追加.
      csv.push csv_split_for_quoted_field(chars, delimiter)
    else
      # 先ほど取り出した文字を戻す.
      chars.unshift c
      csv.push csv_split_for_normal_field(chars, delimiter)
    end
  end
  csv
end

# (2) 通常のフィールドの処理
def csv_split_for_normal_field(chars, delimiter)
  field = ""
  while c = chars.shift
    case c
    when delimiter
      return field
    else
      field.concat c			    # 文字列fieldの最後に文字列cを追加
    end
  end
  field
end
      
# (3) `"'で始まるフィールドの処理
def csv_split_for_quoted_field(chars, delimiter)
  field = ""
  while c = chars.shift
    case c
    when '"'
      c1 = chars.shift
      if c1 == delimiter or c1.nil?
	return field
      elsif c1 == '"'
	field.concat '"'
      else
	# (B-1) 不正フォーマット
	field.concat c
	field.concat c1
      end
    else
      field.concat c
    end
  end
  # (B-2) 不正フォーマット
  field
end



__
..............................石塚 圭樹@日本ラショナルソフトウェア...
----------------------------------->> e-mail: keiju@rational.com <<---

In This Thread

Prev Next