パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Excelのデータってありますか?」記事へのコメント

  • by Anonymous Coward on 2020年11月10日 21時14分 (#3921770)

    神 Excelと違って、楽勝だね。

    "❶","12,000㌕","32.1㌫"
    Ⅱ,1万kg,46

    全部にダブルクォート付きくらいなら、除去するだけだから楽勝だが。
    下手にデータの方にもダブルクォートがある場合ってどうなるんだろ。

    • by Anonymous Coward

      ダブルクォートの出力方法がそもそも複数ある。
      ダブルクォートが2個並ぶ形式(普通はこの形式)でエスケープ。
      バックスラッシュ(円記号)の後ろにダブルクォートでエスケープ。
      ダブルクォートを単なる通常文字として扱う(この場合フィールド内に区切り文字や改行文字は入力不能)。
      もしかすると、ダブルクォートで括った上で区切り文字に隣接しない場合はダブルクォート一文字、
      区切り文字に隣接する場合はダブルクォートを一文字増やすって実装もあり得るだろうか?

      二重ダブルクォートだけサポートしとけば大概は大丈夫だろうけど、
      もし方言含めてパースするなら当該形式で矛盾が起きない形式のうち
      最も一般的な方式であると推定が行えてから読み込みだねぇ……
      区切り文字が破壊されればフィールド数の不揃いで検知できるが、
      全部不揃いなパターンや破壊が起きないパターンだと確定困難。

      • by ikotom (20155) on 2020年11月12日 20時42分 (#3923144)

        > ダブルクォートの出力方法がそもそも複数ある

        他の方も言及されてますが
        RFC 4180 というデファクトスタンダードがあります。
        それによればエスケープ方法は二重引用符を重ねる形式:

        > "aaa","b""bb","ccc"

        の1パターンのみ許容されるということになりますね。
        つまり「RFC 準拠のCSVでお願いします!」と言っとけばOKってことです。

        http://www.kasai.fm/wiki/rfc4180jp [kasai.fm]

        親コメント
      • by nemui4 (20313) on 2020年11月11日 8時16分 (#3921906) 日記

        Excelじゃないですが、とある共有のデータベースで備考欄に半角カンマを入れるユーザがいたらしくて。
        担当者がCSVに落として一括処理しようとしたら、失敗して困ってたのを思い出した。

        親コメント
        • by Anonymous Coward on 2020年11月12日 15時28分 (#3922919)

          まともなCSVはそういうのはちゃんとダブルクォートで囲むなりする。

          親コメント
        • by Anonymous Coward

          郵便番号データも、かなり変則的だってことで有名でしたね。
          なにしろ潜在的なユーザー数が膨大なのに、設計がヒドくて涙目。
          「ないよりはまし」だけどさあ。

          https://srad.jp/comment/2123564 [srad.jp]
          https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]

          • by abies (39185) on 2020年11月12日 22時01分 (#3923190)

            https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]

            郵便番号が7桁になったとき、全国の郵便番号一覧が配られましたが、飛び地等を表現できないからか京都市内だけは地図付きでした。通常の日本の住所が街区を基準にしているのに対して、京都市内は道路を基準にしています。にもかかわらず、住所表記は日本標準の街区基準にしようとしているためで、郵便番号を作った人の苦労が偲ばれます。
            あと、「618-0000 大阪府三島郡島本町, 京都府乙訓郡大山崎町」の都道府県が特定できない件ですが、現地に行くと一緒で良いのではないかと思えてきます。電話番号も両方とも、京都市と同じ075ですし・・。

            郵便番号が悪いのではなく、行政区分や住所表記が悪いと思います。まあ、お役所のせいではあるのですが。

            親コメント
          • by nemui4 (20313) on 2020年11月12日 15時31分 (#3922925) 日記

            >お役所のせいだといえば納得する顧客が少なくないんですよね。

            国民みんな諦めてますね。

            親コメント
        • by Anonymous Coward

          改行コード入ってる場合もありますね。
          あれも苦労する・・・

          • by Anonymous Coward

            「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。
            オレオレCSVで整合性考えてないのは解析しろと言われても困る。

            • by Anonymous Coward on 2020年11月12日 15時38分 (#3922931)

              >「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。
              ?えっ

              EXCELで保存したCSVファイルはEXCEL自身ですら同じ形でロードできないのに?
              01 2-1 をCSV保存-> 01,2-1
              CSVとしてEXCEL読込み-> 1 2月1日

              何処が簡単なんだか教えてくれ、マジで。

              親コメント
              • by Anonymous Coward

                それは「セルの内容が解析できる書式だった場合はそのデータ型にキャストして元データを破棄する」というゴミのような仕様の問題だろ

              • by Anonymous Coward

                つまり、CSVを破壊するExcelがゴミ。

            • by Anonymous Coward

              例えばコードとしてEXCEL上で文字列として「0010」を入力しCSVファイルとして吐き出した。
              そのCSVファイルをEXCELで読み込むと数値の10となってしまう。

              • by nemui4 (20313) on 2020年11月12日 15時30分 (#3922921) 日記

                例えばコードとしてEXCEL上で文字列として「0010」を入力しCSVファイルとして吐き出した。
                そのCSVファイルをEXCELで読み込むと数値の10となってしまう。

                これありますね、数値じゃなくて文字列として扱ってれば良いんでしょうけど。
                データを出してくる方はそこまで気にしてないのが多いし。

                親コメント
              • by Anonymous Coward

                なのでこういうのはVBAで元の文字列のまま取込できるようにしてます

              • by Anonymous Coward

                読み込むときに指定できませんでしたっけ。

              • by Anonymous Coward

                そりゃそうだよね、って感じなんだが。
                ExcelのCSV出力仕様は確定しているんだから、どう入力させてどう受け取るかは仕様化できるだろ、と。
                改行コード入ると解析不能になるなんてことは無いって話。

              • by Anonymous Coward

                タブ区切りなら、テキストエディタで開いてコピーペースト→セルの書式を文字列→もう一回ペースト だけで割と楽にできるんだけど。
                カンマ区切りだと先にダミーで文字列分割しておくか、テキストエディタ上でカンマをタブに置換しておくか(カンマ入りデータがあると除外が面倒)する必要があって
                なんでわざわざこんなことしてるんだ…という気分になる。

              • by Anonymous Coward

                セルを文字列指定していても関係ないです。
                EXCELは全てのセルを2重引用符つけて出力しないですし、仮に2重引用符で囲まれている項目でも、中
                身が数値のみならばファイル拡張子が.CSVの場合、読み込み時に無視して頭ゼロを削除しやがります。

              • by Anonymous Coward

                何度も繰り返すのだったらマクロ化するけど一度だけとかだったら拡張子をTXTに変えてテキストファイルウィザード使ったりするかな

              • by Anonymous Coward

                拡張子がCVSだとテキストファイルウィザードも開かれずにEXCELが勝手に変換してしまう。
                もっとも外部データの取り込みからCSVファイルを読み込めばテキストファイルウィザードが開かれてデータ型を指定できる。
                ただしそうするとCSVファイルを開くときに考慮してくれる""内の,(カンマ)や改行を考慮してくれなくなる。

              • by Anonymous Coward

                ごめん
                × CVS
                ○ CSV

              • by Anonymous Coward

                「データはCVS(上に)にあるから。」
                「データはCSV(型式で)であるのか。」
                も昔はありそうな誤解だった。

                それがわかってるから、非エンジニアには「CVS上にある」なんて
                言い方は絶対にしなかっただけで。
                そういう意味ではエンジニア同士の方がむしろ危険だったな。

              • by Anonymous Coward

                できますよ。
                その列の中身が全部キチンと同じ型であればね。
                エクスポート時にやらかしてたら目も当てられない(しかも何万行のひとつふたつとか)。

              • by Anonymous Coward

                そこにCustomerSerViceやConVenienceStoreが入ってきた日にゃあ……

              • by Anonymous Coward

                同じソフトで保存しておいて欠落を起こすのは、流石にその仕様に問題があるでしょ。

            • by Anonymous Coward

              そしてそれをExcelで開いて、先頭の0の欠落を起こすところまでがセット。

          • by Anonymous Coward

            Mac の Excel と Windows の Excel でセル内改行のコード違うの、罠ですよね。

        • by Anonymous Coward

          Excelじゃないですが、とある共有のデータベースで備考欄に半角カンマを入れるユーザがいたらしくて。
          担当者がCSVに落として一括処理しようとしたら、失敗して困ってたのを思い出した。

          更に下記のようなCSVもあったり

          1,2,=A1+B1

          # 開くとC1は計算後の3と表示されます

        • by Anonymous Coward

          普通タブ区切りのCSVにするでしょ

          • by Anonymous Coward

            それはTSV(Tab-Separated Values)って言うんじゃないの。

            • by Anonymous Coward

              違う。その呼び方トラブルの元だからマジで止めた方がいいよ。
              CSVはcharacter-separated values、何区切りのCSVか明記するのが推奨される書き方。

              これだってTSV
              あああ🍅いいい🍅うう
              11🍅22🍅33

              • by Anonymous Coward

                いやいやいや、念のためググったけど多くがComma-Separated Valuesで解説されてるじゃないか。

              • by Anonymous Coward on 2020年11月13日 12時45分 (#3923469)

                マジレスすると

                comma-separated values(CSV)
                colon-separated values(CSV)
                space-separated values(SSV)
                slash-separated values(SSV)
                semicolon-separated values(SSV)
                tab-separated values(TSV)
                tomato-separated values(TSV)
                tamakin-separated values(TSV)
                vertical bar-separated values(VSV)

                と重複してしまうから総称して
                character-separated values(CSV)、区切り文字は〇〇
                と表現するようになった。

                親コメント
          • by Anonymous Coward

            それは TSV: Tab-Separated Values

          • by Anonymous Coward

            それってTSVでは...

        • by Anonymous Coward

          エクセルから産まれたというRFC4180は評価できる。
          #でも嫌われる模様

          • by Anonymous Coward

            でもExcelはRFC 4180準拠じゃないんだよなぁ。

    • by Anonymous Coward

      そもそもCSVって…JSONかXMLでください

      • by Anonymous Coward on 2020年11月12日 17時43分 (#3923028)

        わかりました。xmlをzipで固めて送りますね

        そして送られてくる xlsx ファイル

        親コメント
      • by Anonymous Coward

        仮にJSONにしたとしても、郵便番号データみたいな
        「不規則で処理しにくいデータ問題」は、あまり変わらない気がする。

        あちこち省略できたり選択可能だったりで、ムダに柔軟だったりな。
        書いた奴は「高度に柔軟なデータフォーマット」と自画自賛かもしれんがね。
        「おまえ、それ全部が条件分岐になるって分ってるの?」って問いたくなったわ。

      • by Anonymous Coward

        XML?じゃあExcelファイルでOKだね

    • by Anonymous Coward

      CSVは方言がありすぎてクソ。
      更にはExcelでCSVを開いてぶっ壊す奴までいて始末に負えない。
      データの提出はXMLかJSONで頼む。

      • by Anonymous Coward

        そもそも、元データをExcelで加工しているんだろうから、Excelでいいじゃん。CSVにしてもXMLにしてもExcel上でクソなら、それ以上に良くなることはない。

        • by Anonymous Coward

          元データを手作業で加工なんて余地があるから問題が起きる。
          データベースからプログラムでダンプするだけになるのが良い。

    • by Anonymous Coward

      と思ってたら、文字コードがEXCELで四苦八苦

ソースを見ろ -- ある4桁UID

処理中...