削除するファイルはCSV(カンマ区切り)のセル中にある 「@」「=」「*」「*」「"」「,」 上記を一括で削除したい。 ※Excelマクロはでは500MBのファイルや 20万行など処理できないため不可です。 一括で削除できるマクロでも良いですので 方法があればご教授いただけると幸いです。
ログインして回答する
回答はまだありません
これ以上回答リクエストを送信することはできません。制限について
コメント(14件)
Excelでは、「@」「=」「*」「*」はそのままカンマ区切りのようですが、「"」「,」を含むセルは「"」で囲まれるようです。(セル内の「"」は2文字連続になります。)
秀丸での動作は未確認ですが、ファイルのバックアップコピーを作成してから以下を試してみてください。
検索文字列
@|=|*|*|""|(")(.*)?,(.*)?(")
置換文字列
\1\2\3\4
※「HmJre.dll」を利用している場合の例です。
「JRE32.DLL」等別のDLLを利用している場合は、次のページを参考にしてください。
・秀丸エディタの紹介(Ver7.00対応版)(強力な正規表現検索機能)
http://hide.maruo.co.jp/software/hidemaru7/reg.html
検索文字列
@|=|¥*|*|""|(")(.*)?,(.*)?(")
置換文字列
¥1¥2¥3¥4
セル内に「複数のカンマ」や「改行」がある場合は、正規表現だけでは手に負えない。
おそらく区切り文字としてのカンマは無視されるので、削除対象の文字列をそのまま正規表現で記述するだけで済みます。
検索文字列
@|=|¥*|*|""|,
※置換文字列は空欄のまま
秀丸のCSVモードは利用しております。
ご教授頂きました
@|¥*|*|""| を使わせて頂きテストをしております。
ただ置換え(空白に設定しております)が妙に多いような気が致します。
3000件程度の置換えで3分放置しても終わっておりません。
MIFESは「巨大なファイル」「数多くのファイル」でも超高速で安定して置換できるので、おもに検索・置換用として常用しています。
MIFESの体験版はインストールから30日間の試用ができます。MIFESで置換が可能かどうか、実験なさるのも手でしょう。
MIFESの[検索・置換・ジャンプ(S)]の中に以下のメニューがあります。
[置換(R)...]
[複数置換(L)...]
[グローバル置換(V)...]
[グローバル複数置換(W)...]
【(1)】ファイルを開き、ファイル内の文字について複数置換を行う場合には[複数置換(L)...]を選択します。
【(2)】置換対象ファイル(1つ以上)を特定のフォルダに開き、置換対象ファイルぜんぶに対して複数置換を行う場合には[グローバル複数置換(W)...]を選択します。
※[置換対象]として、フォルダを指定し、下位フォルダまで置換するか否かをチェックボックスで指定します。
【(3)】(1)(2)いずれについても[通常検索:英大・小文字区別]または[通常検索:英大・小文字同一視]を使い、正規表現を使わずに置換したほうがいいと思います。
各正規表現によって「方言」があるようですので、秀丸で指定している正規表現ライブラリ(dll)の仕様を調べる必要があります。
実務的には、正規表現を使わずに、通常置換で複数の置換ペア(置換対象の文字列 → 置換後の文字列)を指定するやり方のほうが手堅く、手っ取り早いと思います。
窓の杜などにあるフリーウェアも試してみましたけれども、結局、MIFESを買いました。有料ソフトは安定で高機能であり、信頼できます。
※MIFESの正規表現では、正規表現の表現に用いる文字そのものを置換したい場合には、\(円)=バックスラッシュでエスケープします。
※MIFESの正規表現の用例は、Googleで検索すれば豊富に出てきます。
※CSVファイルとしてデータを取り出す場合、カンマ区切りではなく、タブ(\t)区切りで取り出す点にも注意が必要と思われます。
※具体的には、CSVファイルを表計算ソフト、例えばExcelやCalc(LibreOffice)で開き、そのまま範囲を指定して(ハイライトさせて)コピー&ペーストするとタブ区切りになります。
【(4)】[複数置換(L)...][グローバル複数置換(W)...]の1回あたりの同時指定最大数は20置換ペア(置換対象の文字列 → 置換後の文字列)です。
置換リストは履歴として残り、かつ、置換リストはテキストファイル(拡張子はINI)なので、テキストエディタ等で編集することが可能です。編集したらMIFESへ再読込する必要があります。
※「C:\Users\Public\Documents\MEGASOFT\MIFES10\2016年10月5日21時49分-MIW.INI」
【(5)】MIFESで正規表現の複数置換をする場合、正規表現を用いた置換ペア(置換対象の文字列 → 置換後の文字列)を、1回あたり1行しか処理しないようです。
私は文字列を目でチェックして、何度か置換実行を繰り返しています。
これから試します。
複数回実行しても良ければ、【通常のモード】で次を試してみてください。
サクラエディタでは6000件ほどのデータが3秒かからずに完了しました。
【「@」「=」「*」「*」「"」用】
検索文字列
@|=|¥*|*|""
※置換文字列は空欄のまま
※上記の文字列は1回の実行で済みます。
【カンマ用】
検索文字列
(^"|,")([^"]*)?,([^"]*)?(",|"$)
置換文字列
¥1¥2¥3¥4
※セル内に複数のカンマがある場合は、見つからなくなるまで複数回実行する必要があります。
※セル内にカンマが1つの場合は、1回の実行で済むので、以下を試してみてください。
(対象の文字列をすべてまとめてます。)
検索文字列
@|=|¥*|*|""|(^"|,")([^"]*)?,([^"]*)?(",|"$)
置換文字列
¥1¥2¥3¥4
※CSVモードでの正規表現による検索置換機能については、作者さんからの返答があるので公式の掲示板で聞いた方がいいのではないかと思います。
>【カンマ用】
>検索文字列
>(^"|,")([^"]*)?,([^"]*)?(",|"$)
試してみたいと思います。
◆
>置換文字列
>¥1¥2¥3¥4
これは空欄でも良いのでしょうか?それとも上記の様に置き換え文字列は「¥1¥2¥3¥4」にしたほうが良いのでしょうか?
「¥1¥2¥3¥4」は、正規表現「(^"|,")([^"]*)?,([^"]*)?(",|"$)」に対応したものです。
(別の正規表現で実行する場合は、それに対応した置換文字列にする必要があります。)
ものぐさ指定の記述を間違えていたので一部訂正します。
【カンマ用】
検索文字列
(^"|,")([^"]*?),([^"]*?)(",|"$)
置換文字列(※変更なし)
¥1¥2¥3¥4
なお、カンマより先に他の文字列(「"」)の削除を先に行ってください。
セル内に「"」が残っていると、特定の状況で区切り文字としてのカンマが削除されてしまう場合があります。
対象の文字列をすべてまとめたものも使わないようにお願いします。
エディタによる実装の違いもあるので、同じ不都合が発生するとは限りませんが、一応注意事項としてコメントしました。
※カンマを含むセルの文字列の形式がある程度決まっているのでしたら、その形式に合わせて正規表現を作成した方が処理間違いが発生しにくいと思います。
別々に実行して上手くいかなかった場合は、カンマを含む文字列の形式を知らせてください。
色々検証してみましたが以下の3ステップでいけるかと。
(▲には置換したい文字を入れて下さい。削除なら空に。)
Step1(1度だけ)
検索:[=@**]
置換:▲
Step2(1度だけ)
検索:(?<=(^|,)"[^"]*)""
置換:▲
Step3(繰り返す)
検索:(?<=^|,)("[^,"]*),([^"]*")
置換:\1▲\2
[補足]
・Step1と2は|で区切って1つにしても良いです。分かりやすくするため分けています。
・Step3は「""」が存在するとダメなので分ける必要があります。
・Step2のパターンは秀丸以外だとエラーになるかも。
・Step2がややこしい事になってますが、以下の様なパターンを考慮してます。
~,"""",~
~,""",""""",~
Excelで実行する場合、「"」も「,」そのままの文字列で検索して削除できます。
Excelの仕様でファイルの行数等が制限されていますが、任意の行数でテキストファイルを分割するフリーソフトがあります。
・Div
http://www.vector.co.jp/soft/win95/util/se088352.html
※Excelが古いバージョンの場合は「50,000」行を、新しいバージョンの場合は「500,000」あるいは「1,000,000」行を選択してみてください。(任意の数値を指定する事も可能です。)
※事前に「設定」→「詳細設定」を開き、「テキスト」タブで「.csv」を追加してください。(この設定をしておかないと、分割元のCSVファイル選択時に「バイナリ」に自動で設定変更され分割単位もサイズになってしまいます。)
[ 分割ファイル数 × 削除対象の文字数(6) ] 回 実行するのが面倒な場合は、以下の正規表現での検索置換用アドインを利用すると分割したファイルで各1回実行するだけですみます。
・正規表現検索
http://forest.watch.impress.co.jp/library/software/seiki_search/
検索する文字列
@|=|¥*|*|"|,
※置換後の文字列は削除なので空欄
秀丸等のテキストエディタの正規表現による検索置換でも、上でもコメントしたように、セル内の「"」を先に削除してから「,」を削除すると問題なく動作するのではないかと思います。
どちらでもやりやすい方法で試してみてください。