アカウント名:
パスワード:
神 Excelと違って、楽勝だね。
"❶","12,000㌕","32.1㌫"Ⅱ,1万kg,46
全部にダブルクォート付きくらいなら、除去するだけだから楽勝だが。下手にデータの方にもダブルクォートがある場合ってどうなるんだろ。
ダブルクォートの出力方法がそもそも複数ある。ダブルクォートが2個並ぶ形式(普通はこの形式)でエスケープ。バックスラッシュ(円記号)の後ろにダブルクォートでエスケープ。ダブルクォートを単なる通常文字として扱う(この場合フィールド内に区切り文字や改行文字は入力不能)。もしかすると、ダブルクォートで括った上で区切り文字に隣接しない場合はダブルクォート一文字、区切り文字に隣接する場合はダブルクォートを一文字増やすって実装もあり得るだろうか?
二重ダブルクォートだけサポートしとけば大概は大丈夫だろうけど、もし方言含めてパースするなら当該形式で矛盾が起きない形式のうち最も一般的な方式であると推定が行えてから読み込みだねぇ……区切り文字が破壊されればフィールド数の不揃いで検知できるが、全部不揃いなパターンや破壊が起きないパターンだと確定困難。
Excelじゃないですが、とある共有のデータベースで備考欄に半角カンマを入れるユーザがいたらしくて。担当者がCSVに落として一括処理しようとしたら、失敗して困ってたのを思い出した。
まともなCSVはそういうのはちゃんとダブルクォートで囲むなりする。
郵便番号データも、かなり変則的だってことで有名でしたね。なにしろ潜在的なユーザー数が膨大なのに、設計がヒドくて涙目。「ないよりはまし」だけどさあ。
https://srad.jp/comment/2123564 [srad.jp] https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]
https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]
郵便番号が7桁になったとき、全国の郵便番号一覧が配られましたが、飛び地等を表現できないからか京都市内だけは地図付きでした。通常の日本の住所が街区を基準にしているのに対して、京都市内は道路を基準にしています。にもかかわらず、住所表記は日本標準の街区基準にしようとしているためで、郵便番号を作った人の苦労が偲ばれます。あと、「618-0000 大阪府三島郡島本町, 京都府乙訓郡大山崎町」の都道府県が特定できない件ですが、現地に行くと一緒で良いのではないかと思えてきます。電話番号も両方とも、京都市と同じ075ですし・・。
郵便番号が悪いのではなく、行政区分や住所表記が悪いと思います。まあ、お役所のせいではあるのですが。
>お役所のせいだといえば納得する顧客が少なくないんですよね。
国民みんな諦めてますね。
改行コード入ってる場合もありますね。あれも苦労する・・・
「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。オレオレCSVで整合性考えてないのは解析しろと言われても困る。
>「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。?えっ
EXCELで保存したCSVファイルはEXCEL自身ですら同じ形でロードできないのに?01 2-1 をCSV保存-> 01,2-1CSVとしてEXCEL読込み-> 1 2月1日
何処が簡単なんだか教えてくれ、マジで。
それは「セルの内容が解析できる書式だった場合はそのデータ型にキャストして元データを破棄する」というゴミのような仕様の問題だろ
つまり、CSVを破壊するExcelがゴミ。
だから、拡張子を.txtとかに変更して(1) ファイルの「開く」または(2) データの「外部データの取り込み」→テキストファイル」ででテキストウィザードを開く必要がある、というのが「ロードは簡単」ではないだろ、って話だろ?噛みつくとこ間違えてんぞ?
例えばコードとしてEXCEL上で文字列として「0010」を入力しCSVファイルとして吐き出した。そのCSVファイルをEXCELで読み込むと数値の10となってしまう。
これありますね、数値じゃなくて文字列として扱ってれば良いんでしょうけど。データを出してくる方はそこまで気にしてないのが多いし。
なのでこういうのはVBAで元の文字列のまま取込できるようにしてます
読み込むときに指定できませんでしたっけ。
そりゃそうだよね、って感じなんだが。ExcelのCSV出力仕様は確定しているんだから、どう入力させてどう受け取るかは仕様化できるだろ、と。改行コード入ると解析不能になるなんてことは無いって話。
タブ区切りなら、テキストエディタで開いてコピーペースト→セルの書式を文字列→もう一回ペースト だけで割と楽にできるんだけど。カンマ区切りだと先にダミーで文字列分割しておくか、テキストエディタ上でカンマをタブに置換しておくか(カンマ入りデータがあると除外が面倒)する必要があってなんでわざわざこんなことしてるんだ…という気分になる。
セルを文字列指定していても関係ないです。EXCELは全てのセルを2重引用符つけて出力しないですし、仮に2重引用符で囲まれている項目でも、中身が数値のみならばファイル拡張子が.CSVの場合、読み込み時に無視して頭ゼロを削除しやがります。
何度も繰り返すのだったらマクロ化するけど一度だけとかだったら拡張子をTXTに変えてテキストファイルウィザード使ったりするかな
拡張子がCVSだとテキストファイルウィザードも開かれずにEXCELが勝手に変換してしまう。もっとも外部データの取り込みからCSVファイルを読み込めばテキストファイルウィザードが開かれてデータ型を指定できる。ただしそうするとCSVファイルを開くときに考慮してくれる""内の,(カンマ)や改行を考慮してくれなくなる。
ごめん× CVS○ CSV
「データはCVS(上に)にあるから。」「データはCSV(型式で)であるのか。」も昔はありそうな誤解だった。
それがわかってるから、非エンジニアには「CVS上にある」なんて言い方は絶対にしなかっただけで。そういう意味ではエンジニア同士の方がむしろ危険だったな。
できますよ。その列の中身が全部キチンと同じ型であればね。エクスポート時にやらかしてたら目も当てられない(しかも何万行のひとつふたつとか)。
そこにCustomerSerViceやConVenienceStoreが入ってきた日にゃあ……
同じソフトで保存しておいて欠落を起こすのは、流石にその仕様に問題があるでしょ。
拡張子がCSVの場合は指定できません。
そしてそれをExcelで開いて、先頭の0の欠落を起こすところまでがセット。
ついでに数値を日付に変更したりしなかったりして再起不能に。
csvなんて大抵何かのジャーナル出力でしかないだろ。それをExcelを前提として上手く読めないと「オレオレcsv」とか表現する方に驚きが。
どうしてもってのならマクロで読めば良いだろうに。
Mac の Excel と Windows の Excel でセル内改行のコード違うの、罠ですよね。
更に下記のようなCSVもあったり
1,2,=A1+B1
# 開くとC1は計算後の3と表示されます
普通タブ区切りのCSVにするでしょ
それはTSV(Tab-Separated Values)って言うんじゃないの。
違う。その呼び方トラブルの元だからマジで止めた方がいいよ。CSVはcharacter-separated values、何区切りのCSVか明記するのが推奨される書き方。
これだってTSVあああ🍅いいい🍅うう11🍅22🍅33
いやいやいや、念のためググったけど多くがComma-Separated Valuesで解説されてるじゃないか。
DSV(delimiter-separated values)と間違えてません?
IBMさんチッス
そうとも呼ぶけど、CSVはカンマ区切り限定ではない。多いのが;区切りのCSVとTAB区切りのCSV。
マジレスすると
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)、区切り文字は〇〇と表現するようになった。
それは TSV: Tab-Separated Values
それってTSVでは...
エクセルから産まれたというRFC4180は評価できる。#でも嫌われる模様
でもExcelはRFC 4180準拠じゃないんだよなぁ。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
CSVなら任せて安心 (スコア:0)
神 Excelと違って、楽勝だね。
"❶","12,000㌕","32.1㌫"
Ⅱ,1万kg,46
全部にダブルクォート付きくらいなら、除去するだけだから楽勝だが。
下手にデータの方にもダブルクォートがある場合ってどうなるんだろ。
Re: (スコア:0)
ダブルクォートの出力方法がそもそも複数ある。
ダブルクォートが2個並ぶ形式(普通はこの形式)でエスケープ。
バックスラッシュ(円記号)の後ろにダブルクォートでエスケープ。
ダブルクォートを単なる通常文字として扱う(この場合フィールド内に区切り文字や改行文字は入力不能)。
もしかすると、ダブルクォートで括った上で区切り文字に隣接しない場合はダブルクォート一文字、
区切り文字に隣接する場合はダブルクォートを一文字増やすって実装もあり得るだろうか?
二重ダブルクォートだけサポートしとけば大概は大丈夫だろうけど、
もし方言含めてパースするなら当該形式で矛盾が起きない形式のうち
最も一般的な方式であると推定が行えてから読み込みだねぇ……
区切り文字が破壊されればフィールド数の不揃いで検知できるが、
全部不揃いなパターンや破壊が起きないパターンだと確定困難。
Re:CSVなら任せて安心 (スコア:1)
Excelじゃないですが、とある共有のデータベースで備考欄に半角カンマを入れるユーザがいたらしくて。
担当者がCSVに落として一括処理しようとしたら、失敗して困ってたのを思い出した。
Re:CSVなら任せて安心 (スコア:1)
まともなCSVはそういうのはちゃんとダブルクォートで囲むなりする。
Re: (スコア:0)
郵便番号データも、かなり変則的だってことで有名でしたね。
なにしろ潜在的なユーザー数が膨大なのに、設計がヒドくて涙目。
「ないよりはまし」だけどさあ。
https://srad.jp/comment/2123564 [srad.jp]
https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]
Re:CSVなら任せて安心 (スコア:3)
https://qiita.com/nanasess/items/0f0aeaa1f72f599b9142 [qiita.com]
郵便番号が7桁になったとき、全国の郵便番号一覧が配られましたが、飛び地等を表現できないからか京都市内だけは地図付きでした。通常の日本の住所が街区を基準にしているのに対して、京都市内は道路を基準にしています。にもかかわらず、住所表記は日本標準の街区基準にしようとしているためで、郵便番号を作った人の苦労が偲ばれます。
あと、「618-0000 大阪府三島郡島本町, 京都府乙訓郡大山崎町」の都道府県が特定できない件ですが、現地に行くと一緒で良いのではないかと思えてきます。電話番号も両方とも、京都市と同じ075ですし・・。
郵便番号が悪いのではなく、行政区分や住所表記が悪いと思います。まあ、お役所のせいではあるのですが。
Re:CSVなら任せて安心 (スコア:1)
>お役所のせいだといえば納得する顧客が少なくないんですよね。
国民みんな諦めてますね。
Re: (スコア:0)
改行コード入ってる場合もありますね。
あれも苦労する・・・
Re: (スコア:0)
「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。
オレオレCSVで整合性考えてないのは解析しろと言われても困る。
Re:CSVなら任せて安心 (スコア:1)
>「Excelで保存したCSVファイル」という仕様であれば、ロードは簡単なんだけどな。
?えっ
EXCELで保存したCSVファイルはEXCEL自身ですら同じ形でロードできないのに?
01 2-1 をCSV保存-> 01,2-1
CSVとしてEXCEL読込み-> 1 2月1日
何処が簡単なんだか教えてくれ、マジで。
Re: (スコア:0)
それは「セルの内容が解析できる書式だった場合はそのデータ型にキャストして元データを破棄する」というゴミのような仕様の問題だろ
Re: (スコア:0)
つまり、CSVを破壊するExcelがゴミ。
Re: (スコア:0)
だから、
拡張子を.txtとかに変更して
(1) ファイルの「開く」
または
(2) データの「外部データの取り込み」→テキストファイル」
ででテキストウィザードを開く必要がある、というのが「ロードは簡単」ではないだろ、って話だろ?噛みつくとこ間違えてんぞ?
Re: (スコア:0)
例えばコードとしてEXCEL上で文字列として「0010」を入力しCSVファイルとして吐き出した。
そのCSVファイルをEXCELで読み込むと数値の10となってしまう。
Re:CSVなら任せて安心 (スコア:1)
例えばコードとしてEXCEL上で文字列として「0010」を入力しCSVファイルとして吐き出した。
そのCSVファイルをEXCELで読み込むと数値の10となってしまう。
これありますね、数値じゃなくて文字列として扱ってれば良いんでしょうけど。
データを出してくる方はそこまで気にしてないのが多いし。
Re: (スコア:0)
なのでこういうのはVBAで元の文字列のまま取込できるようにしてます
Re: (スコア:0)
読み込むときに指定できませんでしたっけ。
Re: (スコア:0)
そりゃそうだよね、って感じなんだが。
ExcelのCSV出力仕様は確定しているんだから、どう入力させてどう受け取るかは仕様化できるだろ、と。
改行コード入ると解析不能になるなんてことは無いって話。
Re: (スコア:0)
タブ区切りなら、テキストエディタで開いてコピーペースト→セルの書式を文字列→もう一回ペースト だけで割と楽にできるんだけど。
カンマ区切りだと先にダミーで文字列分割しておくか、テキストエディタ上でカンマをタブに置換しておくか(カンマ入りデータがあると除外が面倒)する必要があって
なんでわざわざこんなことしてるんだ…という気分になる。
Re: (スコア:0)
セルを文字列指定していても関係ないです。
EXCELは全てのセルを2重引用符つけて出力しないですし、仮に2重引用符で囲まれている項目でも、中
身が数値のみならばファイル拡張子が.CSVの場合、読み込み時に無視して頭ゼロを削除しやがります。
Re: (スコア:0)
何度も繰り返すのだったらマクロ化するけど一度だけとかだったら拡張子をTXTに変えてテキストファイルウィザード使ったりするかな
Re: (スコア:0)
拡張子がCVSだとテキストファイルウィザードも開かれずにEXCELが勝手に変換してしまう。
もっとも外部データの取り込みからCSVファイルを読み込めばテキストファイルウィザードが開かれてデータ型を指定できる。
ただしそうするとCSVファイルを開くときに考慮してくれる""内の,(カンマ)や改行を考慮してくれなくなる。
Re: (スコア:0)
ごめん
× CVS
○ CSV
CVSなら任せて安心 (スコア:0)
「データはCVS(上に)にあるから。」
「データはCSV(型式で)であるのか。」
も昔はありそうな誤解だった。
それがわかってるから、非エンジニアには「CVS上にある」なんて
言い方は絶対にしなかっただけで。
そういう意味ではエンジニア同士の方がむしろ危険だったな。
Re: (スコア:0)
できますよ。
その列の中身が全部キチンと同じ型であればね。
エクスポート時にやらかしてたら目も当てられない(しかも何万行のひとつふたつとか)。
Re: (スコア:0)
そこにCustomerSerViceやConVenienceStoreが入ってきた日にゃあ……
Re: (スコア:0)
同じソフトで保存しておいて欠落を起こすのは、流石にその仕様に問題があるでしょ。
Re: (スコア:0)
拡張子がCSVの場合は指定できません。
Re: (スコア:0)
そしてそれをExcelで開いて、先頭の0の欠落を起こすところまでがセット。
Re: (スコア:0)
ついでに数値を日付に変更したりしなかったりして再起不能に。
Re: (スコア:0)
csvなんて大抵何かのジャーナル出力でしかないだろ。
それをExcelを前提として上手く読めないと「オレオレcsv」とか表現する方に驚きが。
どうしてもってのならマクロで読めば良いだろうに。
Re: (スコア:0)
Mac の Excel と Windows の Excel でセル内改行のコード違うの、罠ですよね。
Re: (スコア:0)
Excelじゃないですが、とある共有のデータベースで備考欄に半角カンマを入れるユーザがいたらしくて。
担当者がCSVに落として一括処理しようとしたら、失敗して困ってたのを思い出した。
更に下記のようなCSVもあったり
1,2,=A1+B1
# 開くとC1は計算後の3と表示されます
Re: (スコア:0)
普通タブ区切りのCSVにするでしょ
Re: (スコア:0)
それはTSV(Tab-Separated Values)って言うんじゃないの。
Re: (スコア:0)
違う。その呼び方トラブルの元だからマジで止めた方がいいよ。
CSVはcharacter-separated values、何区切りのCSVか明記するのが推奨される書き方。
これだってTSV
あああ🍅いいい🍅うう
11🍅22🍅33
Re: (スコア:0)
いやいやいや、念のためググったけど多くがComma-Separated Valuesで解説されてるじゃないか。
Re: (スコア:0)
DSV(delimiter-separated values)と間違えてません?
Re: (スコア:0)
IBMさんチッス
Re: (スコア:0)
そうとも呼ぶけど、CSVはカンマ区切り限定ではない。多いのが;区切りのCSVとTAB区切りのCSV。
Re:CSVなら任せて安心 (スコア:1)
マジレスすると
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)、区切り文字は〇〇
と表現するようになった。
Re: (スコア:0)
それは TSV: Tab-Separated Values
Re: (スコア:0)
それってTSVでは...
Re: (スコア:0)
エクセルから産まれたというRFC4180は評価できる。
#でも嫌われる模様
Re: (スコア:0)
でもExcelはRFC 4180準拠じゃないんだよなぁ。