CSVの編集No.25059
furfur さん 08/06/19 18:36
 
マクロでの、IFの使い方が分かりません…。

CSVデータの編集をしています。
"文字列1","文字列2","文字列3","文字列4","文字列5",
のうち、文字列4だけを見て、条件に合致するものは『行ごと』削除したいんです。

過去ログから、↓までは書いたのですが、

gofiletop;
while( code != eof ){
searchdown "^\"((.*?)\",){4}\"(.*?)\"(?\\2)";
deleteline;
}

IFがないので、これではぜーんぶ消えてしまいます。(苦笑)
IFをどういった方法で追加すればよいのか、教えてください。
よろしくお願いします。

※"文字列4"には 0,1,2,名前 の四種類のパターンがあります。
削除したいのは 0 を含んだ行です。

[ ]
RE:25059 CSVの編集No.25060
小電流 さん 08/06/19 23:34
 
検索してif文で行削除というのは気持ち悪いです。
書いてあることを実現するなら以下のようにすればいいのでは。

replaceallfast "^(\".*?\",){3}\"0\",\".*?\",\n","",regular;

詳しくはマクロヘルプの検索系文(と秀丸ヘルプの検索の項)のあたりを読んでくだ
さい。

[ ]
RE:25060 CSVの編集No.25064
秀丸担当 さん 08/06/20 10:03
 

小電流さんの書かれた方法のほうが手っ取り早いですが、しいてif文を使って文
字列を比較するとしたら、以下のような感じになると思います。

gofiletop;
while( 1 ){
 searchdown2 "^\"((.*?)\",){3}\"(.*?)\"(?\\2)",regular;
 if(result==false)break;
 if(gettext(foundtopx,foundtopy,foundendx,foundendy,1)
   =="文字列4" ){
   golinetop2;
   deleteline;
 }
}

[ ]
RE:25060 CSVの編集No.25066
furfur さん 08/06/20 12:14
 
>検索してif文で行削除というのは気持ち悪いです。
>書いてあることを実現するなら以下のようにすればいいのでは。
>
>replaceallfast "^(\".*?\",){3}\"0\",\".*?\",\n","",regular;
>
>詳しくはマクロヘルプの検索系文(と秀丸ヘルプの検索の項)のあたりを読んでく
>ださい。

小電流さま

^(\".*?\",){25}\"0\"!

こんなことが出来たんですね・・・。
IFしか出来ないものだと思い込んでました。
ありがとうございました!

[ ]
RE:25064 CSVの編集No.25067
furfur さん 08/06/20 12:15
 
>
>小電流さんの書かれた方法のほうが手っ取り早いですが、しいてif文を使って文
>字列を比較するとしたら、以下のような感じになると思います。
>
>gofiletop;
>while( 1 ){
> searchdown2 "^\"((.*?)\",){3}\"(.*?)\"(?\\2)",regular;
> if(result==false)break;
> if(gettext(foundtopx,foundtopy,foundendx,foundendy,1)
>   =="文字列4" ){
>   golinetop2;
>   deleteline;
> }
>}

秀丸担当さま

えっと、今すぐには分かりません。(苦笑)
頑張って理解を深めていきたいと思います。
ありがとうございました!

[ ]
RE:25066 CSVの編集No.25070
furfur さん 08/06/20 16:02
 
>>検索してif文で行削除というのは気持ち悪いです。
>>書いてあることを実現するなら以下のようにすればいいのでは。
>>
>>replaceallfast "^(\".*?\",){3}\"0\",\".*?\",\n","",regular;
>>
>>詳しくはマクロヘルプの検索系文(と秀丸ヘルプの検索の項)のあたりを読んでく
>ださい。
>
>小電流さま
>
>^(\".*?\",){25}\"0\"!
>
>こんなことが出来たんですね・・・。
>IFしか出来ないものだと思い込んでました。
>ありがとうございました!

あら?25って何?(苦笑)

上記回答、ちょっと考え違いしてました。
つまり、
行頭と、"文字列"の1〜3と、0と、それ以降の"文字列"と、改行
に当てはまるものを消す、ということですよね。

うゎ、replaceallは知ってたのになぁ…
秀丸を活かすのも考え方一つですね。

参考になりました。

[ ]