プロが教える店舗&オフィスのセキュリティ対策術

各項目がダブルクォーテーションで囲まれたカンマ区切りのCSVを作る方法を
実は、↓ここで質問していたところ、、、
https://oshiete.goo.ne.jp/qa/11512940.html

以下の非常に有用な情報を得られました。(回答者の方、ありがとうございました。)

秀丸で正規表現にて下記の条件で置換すると、ダブルクォーテーションで囲むことができます。

検索
^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),((.?)*)$
置換
"\1","\2","\3","\4","\5"
※これで、改行以外のすべての項目に「"」が付きます。

ただし一点、私の特殊な場合のみですが、不都合が起きました。

分かりやすいように具体的に1レコードだけサンプルを挙げますと、
↓こんな感じのレコードで途中に税率の項目があります。
aaa,bbb,8%,ddd,2019/10/01

これを上記の方法で置換すると、こんな結果になりました。
"aaa","bbb,8%","ddd","2019/10/01"

↑分かりますでしょうか?8%の前部分にダブルクォーテーションが付かないのです。
これは"%"パーセントが特殊な意味を持つので邪魔していると大方推測してますが、

↓正しくこのように一発で置換させる方法はありませんか?
"aaa","bbb","8%","ddd","2019/10/01"

「,8%」→「","8%」にと、2回目の置換をすれば目的の結果は得られるので何とかなりはするのですが、せっかくなので追及してみたいと思いました。

詳しい方、よろしくお願いいたします。

質問者からの補足コメント

  • へこむわー

    いや、私の方法でもダメでした。失礼しました。

    途中に、
    ,0,0,0,0,0,0,0,1,0,
    のように0と1が続く列があるのですが、そこに全く異なる値が入り込んでしまい、
    めちゃめちゃな結果になりましたので、

    今回は結局、いつもの通り、
    , を "," に置換
    ¥nを”¥n”に置換してからファイル先頭に”を入れて、ファイル最後の"を消す手作業となってしまいました。
    良い方法ないでしょうか?

    No.2の回答に寄せられた補足コメントです。 補足日時:2020/03/12 15:20

A 回答 (3件)

> 途中に、


> ,0,0,0,0,0,0,0,1,0,
> のように0と1が続く列があるのですが、そこに全く異なる値が入り込んでしまい、
> めちゃめちゃな結果になりましたので、
この様な例も含めて、結局
> No.1 回答者の artoo さんの仰る
> > 普通のやり方では、正規表現 ([^,]+) をすべて "\1" に置換です。
で駄目なケースがあったのでしょうか?
「,」を含まないケースは、このシンプルな置換で列数に関係なく問題なくできると思うのですが…

> ,0,0,0,0,0,0,0,1,0,
の様にデータの一部でなく、上手くいかない具体的かつ再現する最小限の例が示されないと、これ以上のことは助言しようありません
    • good
    • 0

> 検索


> ^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),((.?)*)$
> 置換
> "\1","\2","\3","\4","\5"
<snip>
> ↓こんな感じのレコードで途中に税率の項目があります。
> aaa,bbb,8%,ddd,2019/10/01
を秀丸エディタ Ver.8.86 で確認したのですが、ご希望の
> "aaa","bbb","8%","ddd","2019/10/01"
になりましたよ???
うまくいかないのはデータに「,」「"」が含まれるケースではないでしょうか?

なお
・列数に関係なく
・データに「,」「"」が含まれない
という CSV に限れば No.1 回答者の artoo さんの仰る
> 普通のやり方では、正規表現 ([^,]+) をすべて "\1" に置換です。
が手っ取り早く、今回の方法でも有効なのはその通りなので、通常はこの方法を使えば十分かと思います

もし列数を限る場合でも検索文字列は、投稿のように複雑である必要はなく
^([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)$
で十分です
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとうございます。
今回、実際に行った作業は、43列もあるCSVの整形でした。。。

これで十分との事でしたので、 → ^([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)$
以下の様な条件で秀丸で置換してみました。

検索
^([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*),([^,]*)$

置換
"\1","\2","\3","\4","\5","\6","\7","\8","\9","\10","\11","\12","\13","\14","\15","\16","\17","\18","\19","\20","\21","\22","\23","\24","\25","\26","\27","\28","\29","\30","\31","\32","\33","\34","\35","\36","\37","\38","\39","\40","\41","\42","\43"

結果は、何故か偶数行が削除されてしまったのです。
つまり10万行あったものが5万行になってしまいました。

それで最初に私が書いた方法でやり直したところ、うまくいきました。
原因が分かると幸いです。

お礼日時:2020/03/12 15:13

その正規表現と置換は間違っていると思って、前の質問を見ると、秀丸特有の方言なんですかね。


普通の言語の置換だと、その正規表現だと、置換文字列は"\1","\3","\5","\7","\9" です。

おそらく、% も、正規表現がどうのというより、秀丸の固有の問題かと思います。

普通のやり方では、正規表現 ([^,]+) をすべて "\1" に置換です。
ただし、空欄(カンマ連続)は引用符で囲まれずそのままです。
秀丸で、% がうまくいくかどうかはわかりませんが。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています