文字列にマッチした場合、違う場所を置換No.07372
comcom さん 14/06/20 12:07
 
こんにちは、はじめての質問です。
登録して使い始めて以来軽快なテキストエディタとしてしか使っていませんでしたが、
ここに来てマクロを使う必要が出てきて悪戦苦闘しています。
物品管理のための多数のCSVデータがあり修正する必要があるのですが、
手作業があまりにも大変で困っていたところマクロという便利なものがあ
ることを知りました。
なんとか自動で一括で作業ができないかと情報を集めて自分で試行錯誤してみました
が頭が固いのかちゃんと機能するマクロが書けませんでした。
皆様のお知恵を拝借できれば幸いです。

具体的には下記のようなデータの加工です。

英語文学1,http://www.html ,書籍語学英語,分類コード,2008/02/01,NEW,
1000,1,HOME,A,
スペイン語会話2,http://www.html ,書籍語学スペイン語,分類コード,
2004/05/03,NEW,580,1,SCHOOL,C,
英語文学1,http://www.html ,書籍語学英語,分類コード,2007/10/05,1000,NEW,
1,HOME,A,
草刈り機,道工具農機具,分類コード,2001/05/03,USED,4980,2,HOME,B,
電動ドライバー,http://www.html ,道工具電動工具,分類コード,2005/11/13,
USED,1500,2,HOME,B,


実現したい内容

3番目の項目の内容に応じて4番目の項目の内容を変換したい

4番目の項目の"分類コード"という文字列を3番目の項目の分類名に特定の文字
列が含まれる場合に指定の数字に置換したいと思っています。
例えば
3番目の項目の文字列に"書籍語学"が含まれる場合に4番目の項目の文字列"分
類コード"を3821に置換したい
3番目の項目の文字列に"道工具"が含まれる場合に4番目の項目の文字列"分類
コード"を5183に置換したい
というような事例です。

内容は以上です。
自分では
特定の文字列にマッチした場合にその部分を置換する方法は理解できたのですが、
特定の文字列にマッチした場合に別の部分を置換する方法がどうしてもやり方がわか
りませんでした。
初心者の低レベルな質問で申し訳ないのですが
過去ログの何処にとか、あの本のあの項目に載っているよとかでも結構ですので、
お知恵を拝借できれば幸いです。

よろしくお願いいたします。

[ ]
RE:07372 文字列にマッチした場合、違う場No.07373
IKKI さん 14/06/20 12:23
 
こんにちは。ユーザーのIKKIと申します。

ご質問の例は、マクロを使うまでもなく、単純な正規表現置換で対応できると思いま
す。

 検索: ,(書籍語学.+?),分類コード,
 置換: ,\1,3821,
 正規表現: ON

マクロ化するなら

replaceallfast ",(書籍語学.+?),分類コード,", ",\\1,3821,", regular;
replaceallfast ",(道工具.+?),分類コード,", ",\\1,5183,", regular;

でいかがでしょう。

[ ]
RE:07373 ありがとうございます。解決しまNo.07374
comcom さん 14/06/21 05:03
 
はじめまして IKKIさん。
秀丸のマクロかじりたてのcomcomと申します。
この度は迅速かつ的確な御教授ありがとうございます。

また、置換での入力例とそれをマクロ化した例と
両方とも書いてくださり恐縮です。

早速御教授いただいたマクロを試してみましたところ、
自分のしたかったとおりに動作することを確認いたしました。

自分でマクロをうまく作れないために、
手作業で訂正するハメになるかもと思うとすごく憂鬱でしたが、
目から鱗が落ちたような気分です。
これぞ人間様が主人でパソコンに仕事をさせているという気分ですね。

後は書いて頂いたマクロを元に全ての分類名と分類コードの組み合わせをマクロで書
けば全て自動で出来そうです。

後学の為に、
書いていただいた「魔法の呪文」の意味も調べて勉強したいと思います。

今回はどうもありがとうございました。

[ ]