ファイルの編集で、ダブルクォーテーションが失われてしまう問題について調べ、それを復活させる方法を検討します。開かれますが、そのときは注意が必要です。形式が勝手にいろいろ変更されてしまうからです。その一つに今回取り上げる「ダブルクォーテーションが消えてしまう問題」があります。保存するだけで失われ、フィールドがハダカにされてしまうのです。外部とデータをやり取りするときにはこれがトラブルの原因になることがあります。CSVを保存しなければいいだけの話なのですが、業務的に避けられないこともあります。ダブルクォーテーションを復活させることは出来ないのでしょうか。それぐらい簡単にできてよさそうなものですが、調べてもそのような機能はありません。責められた事でもないのです。形式の「方言」にあります。いっても、システムによっていろいろ微妙な形式の違い(つまり方言)があり、解釈が異なるのです。形式の違いには何種類もありますが、今回のダブルクォーテーションの扱いについて言えば、大まかに次の4つのポリシーに分けられます。データ区切りを混乱させる文字がある場合を指します。タイプ2は、このようなフィールド値があったときのみ、データの境界を明確にする目的で、ダブルクォーテーション囲みをします。(ちなみに、フィールドテキスト内に元々「"」が含まれる場合、それを2重の「""」に変更することでクォート囲みと区別されるようにします)ただ、そのようなフィールドデータはそう多くはないので、タイプ2で保存されたCSVは、ぱっと見ではクォートなしのタイプ1と変わりません。形式を含め、全てのタイプ問題なく開くことができるのですが、元にあったダブルクォーテーションはすっぱりと捨て去られてしまうことになります。失われたものを取り戻すのは難しいです。いいなら、つまり全てのフィールドをダブルクォーテーションで囲み直すだけでいいなら、テキスト置換を使って何とか復旧させることができます。テキストエディタの置換機能を使うテキストエディタの「置換」機能をうまく使うと、一括でダブルクォーテーションを挿入することができますテキスト置換は普段から活用されている方も多いかと思います。置換ダイアログで、「検索」文字列と「置換」文字列を指定して「すべて置換」を実行すると、該当文字列が一括で置換されます。操作自体は難しいものではありません。その代り、ちょっとした頭の体操が必要です。¥¥=¥」をチェックEmEditor:「エスケープシーケンスを使用する」をチェックメモ帳:使えません!「検索」に「,」を、「置換」に「","」を入力して「全て置換」を実行しますこれですべての「,」が「"」で挟まれます。結果として「,aaa,」のように挟まれたデータ部分が「","aaa","」のように「"」で囲まれることになりますこの時点で、各行の先頭と終端のみ「"」が欠けている状態になります。結果として「aaa","bbb","ccc」のような行の先頭と終端に「"」が挿入され「"aaa","bbb","ccc"」となります。【注意】サクラエディタなど一部のテキストエディタでは、「¥n」では余分な改行で行数が増えてしまうことがあります。ファイルの最終行に追加されている余分な「"」を削除しますこれで、すべてのフィールド値がダブルクォートされています。置換ができたら間違いがないか結果のテキストをよく見て確認してください。CSVの最初と最後が変なことになっていないか念入りに確認します。間違った置換でCSVが壊れたら、「元に戻す」(Ctrl+Z)で戻せます。通常の文字では表せない文字コードを指定するための特別な表現です。「¥n」や「¥r」は改行を表しています。TAB(タブ)を表す「¥t」というのもあります。本来はプログラマなど技術者向けの用途ですが、一般の業務でも知っておくと役に立つことがあります。これで全てのフィールド値をクォート囲みすることができました。手順がちょっと煩雑ですね。1・2回ならいいですが、3回もやるともう飽きます。定型作業となれば、せめて1ステップの手順でできてくれないと、余計な仕事感に耐えられないでしょう。エディタによってはマクロなどで自動化できるのかもしれませんが、それはちょっと敷居が高い感じです。ご使用のエディタの置換ダイアログに「正規表現」という機能があるなら、それを活用して負担を軽減する方法もあります。テキストエディタの正規表現置換を使う「正規表現」を使うと、一括置換操作がほぼ1ステップで済みます。その代り、頭の体操がバク転なみになります。"\1"\2「全て置換」を実行します。全てのフィールドが「"」で囲まれますCSVが壊れていないかよく確認しますファイルの先頭と最後をよく確認してください。ファイルの最後に「"」の過不足がありがちなので、適宜修正してください正規表現とは単語など文字の並びを「パターンの式」として表現したものです。手順の「(.*?)(,|¥n)」というのが、正規表現によるパターンです。呪文にしか見えませんが、これで「カンマか改行で終わる0個以上の文字の並び」を表しています。(上記手順では円マーク(¥)がバックスラッシュ(\)で表示されていますが、コピー&ペーストすれば¥で入力されるはずです)これも本来は技術者向けの高度な機能ですので、全てのテキストエディタでサポートされているわけではありません。本ブログでは正規表現の書き方までは解説できませんが、初歩的な記号や規則を知っておくだけでもテキスト編集の作業効率が格段に上がりますので、興味のある方は調べてみてください。変換することができました。クォートが一切無いタイプ1の時だけに限られます。タイプ2では、一部のテキストデータなど「必要に迫られた」フィールド値のために、すでにダブルクォーテーションが使用されている可能性があります。これまで紹介した単純な置換では、すでにあるクォート囲みを壊してしまいます。テキスト置換でそれを避けたり直したりするのは簡単そうに見えて実はかなりやっかいな事です。それでも正規表現とやらを使えば、なんとかできるんじゃないかって?えぇ、できますよ、できますとも、頭の体操が「前方2回半ひねり」レベルになりますが・・・、それとはそれとして、どうも気が乗りませんね。いうのも、テキストエディタによって正規表現の文法や解釈に微妙な違いがあるのです。言ってみれば、呪文にも「方言」があるのです。複雑な正規表現パターンになると、方言に惑わされて、やってみないと分からないという理屈の通用しない泥沼の世界に陥ります。このブログでは、さすがにエディタの方言まで研究するわけにはいきません。自体も独自の正規表現機能(エンジン)があるようなのです。それが標準的に使えれば、方言の違いに捕らわれることも無くなり、好都合です。変換するバッチを作成しました。(タイプ4)に変換されたファイルが出力されます。元からあるダブルクォーテーションはそのままで、壊される心配はありません。ファイルとして保存しますバッチスクリプトを先頭行からきっちり貼り付ける必要があります。先頭に行を空けないように注意してください。バッチファイルのエンコーディングはシフトJIS(SJIS)にしてください。ファイルにも対応していて、そのままドラッグ&ドロップしで大丈夫です。サポートされているものです。ついては以下の記事を参考にしてください。ファイルアイコンを右クリックして「送る」メニューから実行できるようになります。「SendTo」フォルダは、適当なフォルダを開きアドレスバーに「sendto」と入力すると直接開くことができます。ファイルやデータ内容によっては処理に時間がかかったりエラーなるかもしれません。目視によるチェックが可能なデータサイズの範囲での使用にとどめてください。ファイルは、変換に失敗しているところがないか必ず自分の目で確認してください。変換に失敗するケースを見つけたら、コメント等にお知らせください。本ブログ掲載のバッチは、その処理結果の正確性・正当性を保証するものはありません。万一、本バッチの不具合や誤操作により損害や損失が発生した場合も、本ブログの著者は一切の責任を負いかねますのであらかじめご了承ください。リンクや共有フォルダからダウンロードできるようにしないでください。ファイルも、内容を確認せずに実行してはいけません。ダブルクォーテーションを復活させる方法を調査しました。そのような機能はありませんが、全てクォートを付け直すタイプ4なら、単純なテキスト置換で復旧させることができました。よって仕様がバラバラなので、汎用的な対応方法はなく、個別に考えるしかなさそうです。いえもし需要があるようなら、完全でなくてもタイプ3で使えるうまい方法がないか考えて別記事にします。形式を保護するとか、保存時に指定できる機能があればいいわけで、将来のバージョンでサポートされることを期待したいところです。正規表現について、興味を持たれた方は一度調べてみてください。パズルの好きな方なら得意になれると思います。難しいようなら、身近なエンジニアに頼む方が早いでしょう。試験にも出てくる基本スキルですし、頭の体操も大好きな人たちなので、きっと喜んで手伝ってくれると思います。本記事の内容は以下の環境で検証しました。ファイルを「0落ち」や「文字化け」なしで開きたいデータ-CSV広告はてなブログをはじめよう!shegoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。