Excelで出力したTSV(CSV)をhtmlテーブルに変換する

Excelで「ファイルを保存」をして保存したTSV(CSV)ファイルを対象とする。
その場合、次のような仕様になるらしい。
・改行コード(レコードの区切り)はCRLF
・セル内に「"」か改行を含む場合はフィールドが""で囲まれる。
・セル内の「"」は「""」になり、改行はLFになる。
Excelで範囲選択してコピーしてテキストエディタにペーストするとタブ区切りになるが、こちらは「"」の扱いが微妙に異なるので、対象外とする。

#!/usr/bin/env ruby
#
# Excelのtsvをhtmlテーブルに変換するスクリプト
#

SEPARATOR = "\t"

def escapeHTML(str)
  str.gsub!("&", "&")
  str.gsub!("\"", """)
  str.gsub!("<", "&lt;")
  str.gsub!(">", "&gt;")
  return str
end

csv = open(ARGV[0], "rb").read()

puts <<EOF
<style>
.resultTable {
  border:1px solid #cccccc;
  border-collapse:collapse;
}

.resultTable th,td {
  border:1px solid #cccccc;
}

</style>
EOF

puts '<table class="resultTable">'

lines = csv.split("\r\n")
lines.each do |line|
  puts "<tr>"
  fields = line.split(SEPARATOR)
  fields.each do |f|
    if f.length > 0 && f[0].chr == '"' && f[-1].chr == '"'
      f = f[1...-1].gsub('""', '"')
    end
    puts "<td>" + escapeHTML(f).gsub("\n", "<br>") + "</td>"
  end
  puts "</tr>"
end

puts "</table>"