0

次のCSV行を解析しています。以下のような奇形の線を救出する必要があり"Malformed"ます。これを行うために使用できる正規表現とは何ですか?どのような考慮が必要ですか?

body = %(
"Sensitive",2416,159,"Test "Malformed" Failure",2789,111,7-24-11,1800,0600,"R2","12323","",""
"Sensitive",2742,107,"Test",2791,112,7-24-11,1800,0600,"R1","","",""
"Sensitive",2700,135,"Test",2792,113,7-24-11,1800,0600,"R1","12110","","")

rows = []
body.each_line do |line|
  begin
    rows << FasterCSV.parse_line(line)
  rescue FasterCSV::MalformedCSVError => e
    rows << line if rescue_from_malformed_line(line)
  rescue => e
    Rails.logger.error(e.to_s)
    Rails.logger.info(line)
  end
end
4

2 に答える 2

2

あなたのデータがどのように不正な形式であるかはわかりませんが、ここにその行の1つのアプローチがあります。

> puts line
"Sensitive",2416,159,"Test "Malformed" Failure",2789,111,7-24-11,1800,0600,"R2","12323","",""
>
> puts line.scan /[\d.-]+|(?:"[^"]*"[^",]*)+/
"Sensitive"
2416
159
"Test "Malformed" Failure"
2789
111
7-24-11
1800
0600
"R2"
"12323"
""
""

:ruby1.9.2p290でテスト済み

于 2011-08-23T01:42:41.240 に答える
0

正規表現を使用して、ネストされた二重引用符を一重引用符に置き換えてから、パーサーに渡すことができます。

何かのようなもの

.gsub(/(?<!^|,)"(?!,|$)/,"'")
于 2013-01-30T18:14:56.473 に答える