価格形式の\99 を\ 99に見たNo.30217
hum さん 11/09/08 08:46
 
 御世話になります。
秀丸メールのマクロについてですが、(秀シリーズサポート)
2.秀丸エディタ&関連ソフトサポートで聞いてもいいですか?

 こんな事ができないか?と思って質問します。
1)まず、個人的なメールで価格の連絡がきます。
2)これを承諾(拒絶)するためコピーしたメールに返信します。
3)その際、ファイル添付でなく本文を直接引用して済ませたい。
4)価格形式の\99      を\       99に見た目桁揃え整形したい。
5)秀丸メールのメール一覧上から、当該メールを選択して
  マクロを実行すると「------整形後-----------」にしたい。
  という希望があります。
 ご提示頂いた物はありがたく使用させて頂きます。
 自分ではマクロが作成できず、作成頂ける方がいらしたら宜しく
 お願いいたします。

------途中省略---------
\1        マトhoge
\1,000    スタhogehogehuga
\1,000    限定hogehogehuga
\1,200    スタhogehogehugahuga
\1,500    デュhogehogehugahuga
\3,600    スタhogehogehoge
\3,700    デュhogehogehoge
\5,500    スタhogehogehogehoge
\8,700    スタhogehogehogehoge
\10       マトhogehoge
\30       ダーhogehoge
\30       ダーhogehoge
\30       マトhogehoge
\50       ダーhogehoge
\50       ダーhogehoge
\50       ダーhogehoge
\50       ローhogehoge
\100      アニhogehogehuga
\100      ダーhogehogehuga
\500      ローhogehogehuga
\800      ローhogehogehuga
------途中省略---------
本文内の価格形式の桁揃え\99       を\       99に整形したい。
------整形後-----------
\        1 マトhoge
\    1,000 スタhogehogehuga
\    1,000 限定hogehogehuga
\    1,200 スタhogehogehugahuga
\    1,500 デュhogehogehugahuga
\    3,600 スタhogehogehoge
\    3,700 デュhogehogehoge
\    5,500 スタhogehogehogehoge
\    8,700 スタhogehogehogehoge05237
\       10 マトhogehoge
\       30 ダーhogehoge
\       30 ダーhogehoge
\       30 マトhogehoge
\       50 ダーhogehoge
\       50 ダーhogehoge
\       50 ダーhogehoge
\       50 ローhogehoge
\      100 アニhogehogehuga
\      100 ダーhogehogehuga
\      500 ローhogehogehuga
\      800 ローhogehogehuga
------整形後-----------

[ ]
RE:30217 価格形式の\99 を\ No.30220
秀まるお2 さん 11/09/08 11:38
 
 価格の置換をするには、マクロでやるとしたら、

replaceall "^\\\\([0-9,]{1})( ){8}", "\\\\       \\1 ", regular;
replaceall "^\\\\([0-9,]{2})( ){7}", "\\\\      \\1 ", regular;
replaceall "^\\\\([0-9,]{3})( ){6}", "\\\\     \\1 ", regular;
replaceall "^\\\\([0-9,]{4})( ){5}", "\\\\    \\1 ", regular;
replaceall "^\\\\([0-9,]{5})( ){4}", "\\\\   \\1 ", regular;
replaceall "^\\\\([0-9,]{6})( ){3}", "\\\\  \\1 ", regular;
replaceall "^\\\\([0-9,]{7})( ){2}", "\\\\ \\1 ", regular;
replaceall "^\\\\([0-9,]{8})( ){1}", "\\\\\\1 ", regular;

 のようになります。

 他の部分については、例えば

    gofiletop;
    insert "------整形後---------\n";
    gofileend;
    insert "------整形後---------\n";

 みたいなのを入れればいいのかと思いますが、具体的なメールの例が分からな
いのでなんとも言えない所です。

 価格一覧の始まってる所からってことなら、例えば

    gofiletop;
    searchdown2 "^\\\\[0-9,]+ ", regular;
    if( result ) {
        golinetop;
        if( selecting ) escape;
        insert "------整形後---------\n";
        searchdown2 "(?!^\\\\[0-9,]+ )^.*$", regular;
        if( result ) {
            golinetop;
            if( selecting ) escape;
            insert "------整形後---------\n";
        }
    }

 って処理でいけるかと思います。

 総合すると、

    gofiletop;
    searchdown2 "^\\\\[0-9,]+ ", regular;
    if( result ) {
        golinetop;
        if( selecting ) escape;
        insert "------整形後---------\n";
        searchdown2 "(?!^\\\\[0-9,]+ )^.*$", regular;
        if( result ) {
            golinetop;
            if( selecting ) escape;
            insert "------整形後---------\n";
        }
    }
    replaceall "^\\\\([0-9,]{1})( ){8}", "\\\\       \\1 ", regular;
    replaceall "^\\\\([0-9,]{2})( ){7}", "\\\\      \\1 ", regular;
    replaceall "^\\\\([0-9,]{3})( ){6}", "\\\\     \\1 ", regular;
    replaceall "^\\\\([0-9,]{4})( ){5}", "\\\\    \\1 ", regular;
    replaceall "^\\\\([0-9,]{5})( ){4}", "\\\\   \\1 ", regular;
    replaceall "^\\\\([0-9,]{6})( ){3}", "\\\\  \\1 ", regular;
    replaceall "^\\\\([0-9,]{7})( ){2}", "\\\\ \\1 ", regular;
    replaceall "^\\\\([0-9,]{8})( ){1}", "\\\\\\1 ", regular;


 ってマクロでいいのかなぁと思います。

[ ]
RE:30217 価格形式の\99 を\ No.30221
秀まるお2 さん 11/09/08 11:48
 
 ちなみにですが、うちの会社では返信するのにいくつか固定のパターンを用意
していて、それをメニューで選択するようなことをやっています。

 テンプレートでも出来ますが、マクロの方がもっと柔軟に出来るのでそうして
ます。

    menu "普通の返信",
         "秀丸暗証連絡",
         "XXさんに転送",
         "YYさんに転送",
         ...;
    if( result == 1 ) {
        #n = dllfunc("MakeReply");
    } else if( result == 2 ) {
        #n = dllfunc("MakeReply");
        gofiletop;
        beginsel;
        gofileend;
        insert "秀丸の暗証は…です\n";
    } else if( result == 3 ) {
        #n = dllfunc("MakeResentForward", "xx@xx.xx.xx", "sendlater", "log");
    } else.....

 みたいなマクロを作っておいて、Ctrl+Rキーを押すとそのマクロが起動して返
信出来るって風にしています。

 アクセスのデータベースに顧客情報を登録する、みたいなことも半自動でやっ
てます。

[ ]
RE:30220 価格形式の\99 を\ No.30222
hum さん 11/09/08 14:33
 
マクロの提示ありがとうございます。
価格一覧の置換は、希望通りです。
もう少し、お付合い下さい
メール文中の合計表記も置換できれば、目的は達成です。

>>具体的なメールの例が分からないのでなんとも言えない所です。。

メールの全文は公開が憚れますのでオリジナルメール中の
公開して差し障りのない共通部分を一部抜粋し例とします。
価格一覧の置換と以下の合計表記の置換ができれば、希望する置換完了後
にこだわらず使えます。
(今回は重複の削除や並び替えはできてもできなくても、何とかなります。)

良ければ、以下の例の価格の置換は、どう記述できますでしょうか?
replaceall "","", regular;

------オリジナルから抜粋<ここから>------
[合計お見積り金額]
<現金書留の場合>
査定商品合計              \28,001
通信買取手数料(現金書留)  \  -600
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,401
----------------------------------------
<銀行振込の場合>
査定商品合計              \28,001
通信買取手数料(銀行振込)  \  -400
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,601
------オリジナルから抜<ここまで>粋------


------希望する置換完了後<ここから>------
[合計お見積り金額]
査定商品合計                ¥  28,001
キャンペーン買取金額アップ  ¥   1,000
----------------------------------------
<現金書留の場合>
通信買取手数料(現金書留)    ¥    -600
合計お見積り金額            ¥  28,401
<銀行振込の場合>
通信買取手数料(銀行振込)    ¥    -400
合計お見積り金額            ¥  28,601
------希望する置換完了後<ここまで>------

[ ]
RE:30221 価格形式の\99 を\ No.30223
hum さん 11/09/08 14:44
 
> ちなみにですが、うちの会社では返信するのにいくつか固定のパターンを用意
>していて、それをメニューで選択するようなことをやっています。
>
> テンプレートでも出来ますが、マクロの方がもっと柔軟に出来るのでそうして
>ます。

メニューで選択するマクロの提示ありがとうございます。
使わせて頂くマクロも数が増えすぎて、最近は、共有マクロ実行という
共有設定ファイルに登録されたマクロを実行する方法に落ち着いています。
これを、マクロ登録とマウスの右クリックに登録する、って風にしています。

[ ]
RE:30222 価格形式の\99 を\No.30227
山紫水明 さん 11/09/08 22:06
 
 humさん,

>良ければ、以下の例の価格の置換は、どう記述できますでしょうか?

仕様がはっきりしない点がありますが,例題をみてとりあえず,
 \ の位置は18桁目とする。
 \ は全角に変換する。
 数字の桁数は最高6桁である。
としてみました。
他にもスマートな方法があるかもしれません。

//-----------------------------------------------------------
gofiletop;
while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    while( x < 28 ) insert " ";
}
replaceallfast "\\\\([0-9, -]{1})$", "¥       \\1", regular;
replaceallfast "\\\\([0-9, -]{2})$", "¥      \\1", regular;
replaceallfast "\\\\([0-9, -]{3})$", "¥     \\1", regular;
replaceallfast "\\\\([0-9, -]{4})$", "¥    \\1", regular;
replaceallfast "\\\\([0-9, -]{5})$", "¥   \\1", regular;
replaceallfast "\\\\([0-9, -]{6})$", "¥  \\1", regular;
replaceallfast "\\\\([0-9, -]{7})$", "¥ \\1", regular;
endmacro;
//-----------------------------------------------------------

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:30227 価格形式の\99 を\No.30230
hum さん 11/09/09 01:15
 
 山紫水明さん
マクロありがとうございました。
希望する置換結果は
------希望する置換結果<ここから>------
------希望する置換結果<ここまで>------
で区切ったつもりでした。
私の例題が間違っていたため、お手数おかけします。
webに貼り付けると見た目不揃いになるので、秀丸エディタに貼りつけて
等幅フォントで表示し数えて見ました。

改めて整理するとメール文中には、大まかに三つの置換部分があります。
価格一覧は秀まるおさんからマクロ頂きました。それに追加できる形だとありがたい
です。
   オリジナルから抜粋    -------------->希望する置換結果      ----->状況
1)価格一覧(\9,999,999〜\1        )---->(\9,999,999〜\        1)---> 済
2)合計価格(\9,999,999〜\1        )---->(\9,999,999〜\        1)---> 未
3)手数料等(\-9,999〜\-1)-------------->(\   -9,999〜\       -1)---> 未


山紫水明さんのマクロをオリジナルから抜粋に対し実行させて頂くと
残念ながら、マクロ実行結果のようになってしまいます。
目的達成まで、あと少し、お付合い頂けますか?
提示頂いたマクロはどこを直すと、希望する置換結果になりますでしょうか?
必要な情報と思われる事を---->に記しました。

> \ の位置は18桁目とする。      ---->半角28桁目
0---+----+----+----+----+---28----+
> \ は全角に変換する。          ---->\ は半角
> 数字の桁数は最高6桁である。  ---->数字の桁数は最高 7桁(\9,999,999〜\  
>     1)
                                       (,を入れると 9桁?)

//---------マクロ実行結果---------------
[合計お見積り金額]
<現金書留の場合>
査定商品合計                
通信買取手数料(現金書留)    
キャンペーン買取金額アップ  
合計お見積り金額            
----------------------------------------
<銀行振込の場合>
査定商品合計                
通信買取手数料(銀行振込)    
キャンペーン買取金額アップ  
合計お見積り金額            
//---------マクロ実行結果---------------



------オリジナルから抜粋<ここから>------
[合計お見積り金額]
<現金書留の場合>
査定商品合計              \28,001
通信買取手数料(現金書留)  \  -600
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,401
----------------------------------------
<銀行振込の場合>
査定商品合計              \28,001
通信買取手数料(銀行振込)  \  -400
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,601
------オリジナルから抜粋<ここまで>------



------希望する置換結果<ここから>------
[合計お見積り金額]
査定商品合計                \   28,001
キャンペーン買取金額アップ  \    1,000
----------------------------------------
<現金書留の場合>
通信買取手数料(現金書留)    \     -600
合計お見積り金額            \   28,401
<銀行振込の場合>
通信買取手数料(銀行振込)    \     -400
合計お見積り金額            \   28,601
------希望する置換結果<ここまで>------


>>良ければ、以下の例の価格の置換は、どう記述できますでしょうか?
>
>仕様がはっきりしない点がありますが,例題をみてとりあえず,
> \ の位置は18桁目とする。
> \ は全角に変換する。
> 数字の桁数は最高6桁である。
>としてみました。
>他にもスマートな方法があるかもしれません。
>
>//-----------------------------------------------------------
>gofiletop;
>while( 1 ) {
>    searchdown "\\\\[0-9, -]+$", regular;
>    if( !result ) break;
>    while( x < 28 ) insert " ";
>}
>replaceallfast "\\\\([0-9, -]{1})$", "¥       \\1", regular;
>replaceallfast "\\\\([0-9, -]{2})$", "¥      \\1", regular;
>replaceallfast "\\\\([0-9, -]{3})$", "¥     \\1", regular;
>replaceallfast "\\\\([0-9, -]{4})$", "¥    \\1", regular;
>replaceallfast "\\\\([0-9, -]{5})$", "¥   \\1", regular;
>replaceallfast "\\\\([0-9, -]{6})$", "¥  \\1", regular;
>replaceallfast "\\\\([0-9, -]{7})$", "¥ \\1", regular;
>endmacro;
>//-----------------------------------------------------------
>
>                          山紫水明(ユーザー)
>                          SANSHISUIMEI

[ ]
RE:30227 価格形式の\99 を\No.30231
hum さん 11/09/09 05:08
 
手数料等の置換前データを拾い直し、パターン化しました。
金額は同じでも送信元が違うと表記は統一されず不揃いですが、
自分の手元では希望する置換結果に桁を揃えたいのです。

3)手数料等(\-9,999〜\-1)手数料等の項目には
\-9,999〜\-1の"\"と数字の間に1から4個の半角" "が入ります。
------オリジナルから抜粋  -------------->希望する置換結果
通信買取手数料(現金書留)  \-9,999------->\   -9,999
通信買取手数料(現金書留)  \-999  ------->\     -999
通信買取手数料(現金書留)  \ -999 ------->\     -999
通信買取手数料(現金書留)  \  -999------->\     -999
通信買取手数料(現金書留)  \-99   ------->\      -99
通信買取手数料(現金書留)  \ -99  ------->\      -99
通信買取手数料(現金書留)  \  -99 ------->\      -99
通信買取手数料(現金書留)  \   -99------->\      -99
通信買取手数料(現金書留)  \-1    ------->\       -1
通信買取手数料(現金書留)  \ -1   ------->\       -1
通信買取手数料(現金書留)  \  -1  ------->\       -1
通信買取手数料(現金書留)  \   -1 ------->\       -1
通信買取手数料(現金書留)  \    -1------->\       -1

商品合計の置換前データも拾い直し、パターン化しました。
査定商品合計・合計お見積り金額・合計金額の項目には
\9,999,999〜\1の"\"と数字の間に1から8個の半角" "が入ります。
かつ、金額は同じでも送信元が違うと以下の混在パターンで
記入されたメールがくるので、自分の手元では少なくとも
希望する置換結果に桁を揃えたいのです。

------オリジナルから抜粋    -------------->希望する置換結果
査定商品合計              \9,999,999------>\9,999,999
査定商品合計                \9,999,999---->\9,999,999
査定商品合計              \999,999          \  999,999
査定商品合計              \ 999,999         \  999,999
査定商品合計              \  999,999------>\  999,999
査定商品合計                \  999,999---->\  999,999
査定商品合計              \99,999   ------>\   99,999
査定商品合計              \ 99,999          \   99,999
査定商品合計              \  99,999         \   99,999
査定商品合計              \   99,999------>\   99,999
査定商品合計                \   99,999---->\   99,999
査定商品合計              \9,999    ------>\    9,999
査定商品合計              \ 9,999           \    9,999
査定商品合計              \  9,999          \    9,999
査定商品合計              \   9,999         \    9,999
査定商品合計              \    9,999------>\    9,999
査定商品合計                \    9,999---->\    9,999
査定商品合計              \999      ------>\      999
査定商品合計              \ 999             \      999
査定商品合計              \  999            \      999
査定商品合計              \   999           \      999
査定商品合計              \    999          \      999
査定商品合計              \     999         \      999
査定商品合計              \      999------>\      999
査定商品合計                \      999---->\      999
査定商品合計              \99       ------>\       99
査定商品合計              \ 99              \       99
査定商品合計              \  99             \       99
査定商品合計              \   99            \       99
査定商品合計              \    99           \       99
査定商品合計              \     99          \       99
査定商品合計              \      99         \       99
査定商品合計              \       99------>\       99
査定商品合計                \       99---->\       99
査定商品合計              \1        ------>\        1
査定商品合計              \ 1               \        1
査定商品合計              \  1              \        1
査定商品合計              \   1             \        1
査定商品合計              \    1            \        1
査定商品合計              \     1           \        1
査定商品合計              \      1          \        1
査定商品合計              \       1         \        1
査定商品合計              \        1------>\        1
査定商品合計                \        1---->\        1
通信買取手数料(現金書留)  \  -600
通信買取手数料(銀行振込)  \  -400
キャンペーン買取金額アップ \1,000
キャンペーン買取金額アップ \9,000
----------------------------------------
合計お見積り金額          \28,401
合計お見積り金額          \28,601
合計金額                   \   28,601
------オリジナルから抜粋<ここまで>------


------希望する置換結果<ここから>------
[合計お見積り金額]
査定商品合計                \9,999,999
査定商品合計                \  999,999
査定商品合計                \   99,999
査定商品合計                \    9,999
査定商品合計                \      999
査定商品合計                \       99
査定商品合計                \        1
キャンペーン買取金額アップ  \    1,000
----------------------------------------
<現金書留の場合>
通信買取手数料(現金書留)    \     -600
合計お見積り金額            \   28,401
<銀行振込の場合>
通信買取手数料(銀行振込)    \     -400
合計お見積り金額            \   28,601
合計金額                    \   28,601
------希望する置換結果<ここまで>------

[ ]
RE:30231 価格形式の\99 を\No.30232
山紫水明 さん 11/09/09 08:25
 
 humさん,

 とりあえず,次のマクロで結果を見ていただけませんか。
 (ちょっと朝あわただしいもので,すみません)
//-----------------------------------------------------------
setcompatiblemode 0x0100;
gofiletop;
while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    while( x < 28 ) insert " ";
}
replaceallfast "\\\\([0-9, -]{1})$", "\\\\         \\1", regular;
replaceallfast "\\\\([0-9, -]{2})$", "\\\\        \\1", regular;
replaceallfast "\\\\([0-9, -]{3})$", "\\\\       \\1", regular;
replaceallfast "\\\\([0-9, -]{4})$", "\\\\      \\1", regular;
replaceallfast "\\\\([0-9, -]{5})$", "\\\\     \\1", regular;
replaceallfast "\\\\([0-9, -]{6})$", "\\\\    \\1", regular;
replaceallfast "\\\\([0-9, -]{7})$", "\\\\   \\1", regular;
replaceallfast "\\\\([0-9, -]{8})$", "\\\\  \\1", regular;
replaceallfast "\\\\([0-9, -]{9})$", "\\\\ \\1", regular;
endmacro;
//-----------------------------------------------------------

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30232 価格形式の\99 を\No.30233
秀まるお2 さん 11/09/09 08:58
 
 一応僕もテストしてみましたが、山紫水明さんのマクロそのままでうまく置換
しました。

[ ]
RE:30232 価格形式の\99 を\No.30238
hum さん 11/09/09 12:21
 
 山紫水明さん、秀まるおさん
お忙しいところ、ありがとうございました。

今しがた、ご教示頂いたマクロを合体させました。
秀丸エディタ上で試したところ、いい感じです。
(PriceWrapping.mac)
ただし、秀丸メールのメール一覧上から動かそうと
過去の例を参考にトライ中ですが、こちらはなぜか
    // 2 文中の単価
以降の置換が、空白になります。
(価格整形.mac)のどこをミスしているのでしょうか?
もう少し、お付合い下さいませんか?

//-----------元データ-----------
[合計お見積り金額]
<現金書留の場合>
査定商品合計              \28,001
通信買取手数料(現金書留)  \  -600
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,401
----------------------------------------
<銀行振込の場合>
査定商品合計              \28,001
通信買取手数料(銀行振込)  \  -400
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,601
//-----------元データ-----------//


//----------- 置換後 -----------//
[合計お見積り金額]
<現金書留の場合>
査定商品合計                
通信買取手数料(現金書留)    
キャンペーン買取金額アップ  
合計お見積り金額            
----------------------------------------
<銀行振込の場合>
査定商品合計                
通信買取手数料(銀行振込)    
キャンペーン買取金額アップ  
合計お見積り金額            
//----------- 置換後 -----------//

Windows 7 Home Premium 64bit
秀丸メール   Ver.5.72β8
秀丸エディタ Ver.8.11β6

//------------------------------------------------//
//PriceWrapping.mac
//価格整形
//メール内の価格表記\99       を\        99に整形
    setcompatiblemode 0x0100;
    disabledraw;  //画面書き換え禁止
    gofiletop;
    golinetop;
    // 1 行頭の単価
    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\         \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\        \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\       \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\      \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\     \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\    \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\   \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\  \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\ \1 ", regular;
gofiletop;
while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    while( x < 28 ) insert " ";
}
    // 2 文中の単価
    replaceallfast "\\\\([0-9, -]{1})$", "\\\\         \\1", regular;
    replaceallfast "\\\\([0-9, -]{2})$", "\\\\        \\1", regular;
    replaceallfast "\\\\([0-9, -]{3})$", "\\\\       \\1", regular;
    replaceallfast "\\\\([0-9, -]{4})$", "\\\\      \\1", regular;
    replaceallfast "\\\\([0-9, -]{5})$", "\\\\     \\1", regular;
    replaceallfast "\\\\([0-9, -]{6})$", "\\\\    \\1", regular;
    replaceallfast "\\\\([0-9, -]{7})$", "\\\\   \\1", regular;
    replaceallfast "\\\\([0-9, -]{8})$", "\\\\  \\1", regular;
    replaceallfast "\\\\([0-9, -]{9})$", "\\\\ \\1", regular;
    enabledraw;  //解除
endmacro;
//------------------------------------------------//


//------------------------------------------------//
//価格整形.mac
//価格整形
//メール内の価格表記\99       を\        99に整形
setcompatiblemode 0x0F;
  loaddll "TKInfo.dll";
  if( !result ) {
    message "このマクロは秀丸メールで実行してください。";
    endmacro;
  }
    disabledraw;  //画面書き換え禁止
    if( dllfunc("IsHidemaruMailMain") ) {
        #count = dllfunc("SelectedMailCount");
        if( #count != 0 ) {
            #n = dllfunc("LockSelection");
            while(1) {
                #n = dllfunc("EnumSelection", 1);
                if( #n == 0 ) {
                    break;
                }
                #n = dllfunc("BeginEditMail");
                call ReplaceSub;
                #n = dllfunc("SaveEditMail", 0, 1);
                #n = dllfunc("SetMailFlag", "altered", 0);
            }
            #n = dllfunc("UnlockSelection", 1);
    enabledraw;  //解除
  exit;  //編集画面を閉じます
  endmacro;  //マクロを終了
  endmacroall;  //マクロを終了
        }
    } else {
  #n = dllfunc("EnableEdit");
        call ReplaceSub;
    #n = dllfunc("AlterSave");  //改変保存します
    #n = dllfunc("SetMailFlag", "altered", 0);  //改変マークはOFF
    }
    enabledraw;  //解除
  exit;  //編集画面を閉じます
  endmacroall;  //マクロを終了

ReplaceSub:
    #browse = browsemode;
    if( #browse ) {
        browsemodeswitch;
    }
    #readonly = readonly;
    if( #readonly ) {
        readonlyswitch;
    }
//-------//
    disabledraw;  //画面書き換え禁止
    gofiletop;
    golinetop;
    // 1 行頭の単価
    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\         \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\        \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\       \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\      \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\     \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\    \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\   \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\  \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\ \1 ", regular;
gofiletop;
while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    while( x < 28 ) insert " ";
}
    // 2 文中の単価
    replaceallfast "\\\\([0-9, -]{1})$", "\\\\         \\1", regular;
    replaceallfast "\\\\([0-9, -]{2})$", "\\\\        \\1", regular;
    replaceallfast "\\\\([0-9, -]{3})$", "\\\\       \\1", regular;
    replaceallfast "\\\\([0-9, -]{4})$", "\\\\      \\1", regular;
    replaceallfast "\\\\([0-9, -]{5})$", "\\\\     \\1", regular;
    replaceallfast "\\\\([0-9, -]{6})$", "\\\\    \\1", regular;
    replaceallfast "\\\\([0-9, -]{7})$", "\\\\   \\1", regular;
    replaceallfast "\\\\([0-9, -]{8})$", "\\\\  \\1", regular;
    replaceallfast "\\\\([0-9, -]{9})$", "\\\\ \\1", regular;
    enabledraw;  //解除
//-------//
    if( #browse ) {
        browsemodeswitch;
    }
    if( #readonly ) {
        readonlyswitch;
    }
    return;
//------------------------------------------------//

[ ]
RE:30233 価格形式の\99 を\No.30240
hum さん 11/09/09 12:40
 
秀まるおさん
お忙しいところ、ありがとうございました。
> 一応僕もテストしてみましたが、山紫水明さんのマクロそのままでうまく置換
>しました。

秀丸エディタ上で試したところ、いい感じです。
(PriceWrapping.mac)

Windows 7 Home Premium 64bit
秀丸メール   Ver.5.72β8
秀丸エディタ Ver.8.11β6

現状、元データを秀丸メールの文中に保存してから
秀丸メールのメール一覧上からマクロを動かすと
こちらはなぜか(過去の例を参考にトライ中ですが、)
マクロ中の    // 2 文中の単価
以降の置換が、空白になります。
(価格整形.mac)のどこをミスしているのでしょうか?
秀丸メールの制約か何か回避方法があるのでしょうか?
お手数ですが、もう少し、お付合い下さいませんか?

//-----------元データ-----------
[合計お見積り金額]
<現金書留の場合>
査定商品合計              \28,001
通信買取手数料(現金書留)  \  -600
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,401
----------------------------------------
<銀行振込の場合>
査定商品合計              \28,001
通信買取手数料(銀行振込)  \  -400
キャンペーン買取金額アップ \1,000
合計お見積り金額          \28,601
//-----------元データ-----------//


//----------- 置換後 -----------//
[合計お見積り金額]
<現金書留の場合>
査定商品合計                
通信買取手数料(現金書留)    
キャンペーン買取金額アップ  
合計お見積り金額            
----------------------------------------
<銀行振込の場合>
査定商品合計                
通信買取手数料(銀行振込)    
キャンペーン買取金額アップ  
合計お見積り金額            
//----------- 置換後 -----------//




//------------------------------------------------//
//価格整形.mac
//価格整形
//メール内の価格表記\99       を\        99に整形
setcompatiblemode 0x0F;
  loaddll "TKInfo.dll";
  if( !result ) {
    message "このマクロは秀丸メールで実行してください。";
    endmacro;
  }
    disabledraw;  //画面書き換え禁止
    if( dllfunc("IsHidemaruMailMain") ) {
        #count = dllfunc("SelectedMailCount");
        if( #count != 0 ) {
            #n = dllfunc("LockSelection");
            while(1) {
                #n = dllfunc("EnumSelection", 1);
                if( #n == 0 ) {
                    break;
                }
                #n = dllfunc("BeginEditMail");
                call ReplaceSub;
                #n = dllfunc("SaveEditMail", 0, 1);
                #n = dllfunc("SetMailFlag", "altered", 0);
            }
            #n = dllfunc("UnlockSelection", 1);
    enabledraw;  //解除
  exit;  //編集画面を閉じます
  endmacro;  //マクロを終了
  endmacroall;  //マクロを終了
        }
    } else {
  #n = dllfunc("EnableEdit");
        call ReplaceSub;
    #n = dllfunc("AlterSave");  //改変保存します
    #n = dllfunc("SetMailFlag", "altered", 0);  //改変マークはOFF
    }
    enabledraw;  //解除
  exit;  //編集画面を閉じます
  endmacroall;  //マクロを終了

ReplaceSub:
    #browse = browsemode;
    if( #browse ) {
        browsemodeswitch;
    }
    #readonly = readonly;
    if( #readonly ) {
        readonlyswitch;
    }
//-------//
    disabledraw;  //画面書き換え禁止
    gofiletop;
    golinetop;
    // 1 行頭の単価
    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\         \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\        \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\       \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\      \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\     \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\    \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\   \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\  \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\ \1 ", regular;
gofiletop;
while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    while( x < 28 ) insert " ";
}
    // 2 文中の単価
    replaceallfast "\\\\([0-9, -]{1})$", "\\\\         \\1", regular;
    replaceallfast "\\\\([0-9, -]{2})$", "\\\\        \\1", regular;
    replaceallfast "\\\\([0-9, -]{3})$", "\\\\       \\1", regular;
    replaceallfast "\\\\([0-9, -]{4})$", "\\\\      \\1", regular;
    replaceallfast "\\\\([0-9, -]{5})$", "\\\\     \\1", regular;
    replaceallfast "\\\\([0-9, -]{6})$", "\\\\    \\1", regular;
    replaceallfast "\\\\([0-9, -]{7})$", "\\\\   \\1", regular;
    replaceallfast "\\\\([0-9, -]{8})$", "\\\\  \\1", regular;
    replaceallfast "\\\\([0-9, -]{9})$", "\\\\ \\1", regular;
    enabledraw;  //解除
//-------//
    if( #browse ) {
        browsemodeswitch;
    }
    if( #readonly ) {
        readonlyswitch;
    }
    return;
//------------------------------------------------//

[ ]
RE:30240 価格形式の\99 を\No.30243
秀まるお2 さん 11/09/09 14:55
 
 僕の所でテストしても同じように値段が無くなってしまいました。検索で
ヒットした文字列を範囲選択する設定だとダメなんだと思います。

    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    if( selecting ) escape;

 のように、検索コマンドの後に「if( selecting ) escape;」を入れて範囲選
択を解除すれば大丈夫だと思います。(それか、setcompatiblemode 0x0200;を
実行してもいいです)

 それとあと、

    while( x < 28 ) insert " ";

 の所は、

    if( x < 28 ) {
        insert leftstr( "                            ", 28 - x );
    }

 とした方がちょっとだけ高速になります。

[ ]
RE:30240 価格形式の\99 を\No.30244
秀まるお2 さん 11/09/09 14:57
 
 追加ですみません。

 setcompatiblemode 0x0200;だと検索でヒットした文字列を範囲選択してしま
うので、setcompatiblemode 0x0100;でないとダメでした。

 setcompatiblemode 0x0F;

 とやってる所と合体させて、

 setcompatiblemode 0x010F;

 とすればうまくいくと思います。

[ ]
RE:30244 価格形式の\99 を\No.30245
hum さん 11/09/09 16:22
 
秀まるおさん
お忙しいところ、ありがとうございました。
> とすればうまくいくと思います。

//------------------------------------------------//
    <snip>
    setcompatiblemode 0x010F;
    <snip>
    gofiletop;
    while( 1 ) {
    searchdown "\\\\[0-9, -]+$", regular;
    if( !result ) break;
    if( selecting ) escape;
    if( x < 28 )
        insert leftstr( "                            ", 28 - x );
    }
    <snip>
//------------------------------------------------//
↑これで、メール一覧から置換でき、大変便利になりました。
ありがたく使用させていただきます。

[ ]
RE:30245 価格形式の\99 を\No.30250
山紫水明 さん 11/09/09 20:47
 
 humさん,

 うまく動くようになってよかったと思います。
 少し補足しておきますと,
秀丸メールの「設定」→「秀丸エディタの動作環境」→「検索」→「検索での表示」

「範囲選択」になっているのではないでしょうか。
 私の修正マクロで
   setcompatiblemode 0x0100;
を最初に追加したのはその対策でした。
 humさんが合体された PriceWrapping.mac でうまくいったのはそのためです。
 ところが,価格整形.mac ではここが
setcompatiblemode 0x0F;
になってしまっていました。小さな違いのようですが,この場合はこれが決定的で
した。

 最終的には,0x010F にされましたが,最後の F は折りたたみと部分編集に関する
ものですので,この場合は直接関係ないでしょう。あっても差し支えありませんが,
0x0100 でも同じだと思います。

 それから,7桁の数字の場合は整形後に
\1,234,567

\ 1,234,567
になります。これでよければこのままでいいですが。スペースを入れたくなければ
置換の部分を

replaceallfast "\\\\([0-9, -]{1})$", "\\\\        \\1", regular;
replaceallfast "\\\\([0-9, -]{2})$", "\\\\       \\1", regular;
・・・
replaceallfast "\\\\([0-9, -]{8})$", "\\\\ \\1", regular;
replaceallfast "\\\\([0-9, -]{9})$", "\\\\\\1", regular;

のようにスペースを一つ減らしたらいいでしょう。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30250 価格形式の\99 を\No.30251
hum さん 11/09/10 02:39
 
山紫水明さん
補足ありがとうございます。
>
> うまく動くようになってよかったと思います。
> 少し補足しておきますと,
>秀丸メールの「設定」→「秀丸エディタの動作環境」→「検索」→「検索での表示」
>が
>「範囲選択」になっているのではないでしょうか。

はい、そうなっています。

> 私の修正マクロで
>   setcompatiblemode 0x0100;
>を最初に追加したのはその対策でした。
> humさんが合体された PriceWrapping.mac でうまくいったのはそのためです。
> ところが,価格整形.mac ではここが
>setcompatiblemode 0x0F;
>になってしまっていました。小さな違いのようですが,この場合はこれが決定的で
>した。

手動での記録を取ると、文頭に{setcompatiblemode 0x0F;}
が挿入されますが、「検索での表示」の動作でも気にせず長年使用してきました。
setcompatiblemode文(Ver8.10対応版)
http://homepage3.nifty.com/kons/hidemaru/helpsite/hidemac/html/
150_ConfigStatement_setcompatiblemode.html
マクロの互換性の指示がOR演算した値で指定できます。(V8.00以降)
                       ↑ 長年、意味を理解できずにいました。

    0x0000   マクロの標準動作(動作環境に従う)
    0x0100   点滅表示
    0x0200   範囲選択
    0x000f   折りたたみと部分編集を無視せずにマクロを動作させる
    0x0003   折りたたみを維持
    0x000c   部分編集を維持

> 最終的には,0x010F にされましたが,最後の F は折りたたみと部分編集に関する
>ものですので,この場合は直接関係ないでしょう。あっても差し支えありませんが,
>0x0100 でも同じだと思います。

setcompatiblemode 0x000f; (つまり 0x0003 | 0x000c)のまま、しばらく使ってみ
ます。

> それから,7桁の数字の場合は整形後に
>\1,234,567
>が
>\ 1,234,567
>になります。これでよければこのままでいいですが。スペースを入れたくなければ
>置換の部分を
>
>replaceallfast "\\\\([0-9, -]{1})$", "\\\\        \\1", regular;
>replaceallfast "\\\\([0-9, -]{2})$", "\\\\       \\1", regular;
>・・・
>replaceallfast "\\\\([0-9, -]{8})$", "\\\\ \\1", regular;
>replaceallfast "\\\\([0-9, -]{9})$", "\\\\\\1", regular;
>
>のようにスペースを一つ減らしたらいいでしょう。
>
>                          山紫水明
>                          SANSHISUIMEI

何回か修正して整形テストして、手元のマクロはスペースを一つ減らし使わせて貰っ
ていま
す。ご親切にご回答頂きましてありがとうございました。

[ ]
RE:30250 4桁以上の数字には、カンマを入No.30254
hum さん 11/09/11 17:28
 
 山紫水明さん、秀まるおさん
追加ですみません。
お手数ですが、もう少し、お付合い下さいませんか?
改めて整理すると置換されない多くの受信メールが、ありました。
今更、カンマを打ち直すには、量が多すぎると思う量のカンマ無し数字
(4桁以上)が残りました。

カンマ有り数字(7桁)はそのままで、カンマなしの4桁以上の数字には、
カンマを入れたいのですが、どういう手段ならできますでしょうか?

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

---------------------------------------
オリジナル複数メールから抜粋<ここから>
価格                        \    11800
送料                        \     1200
割引                        \    -1164
合計                        \    11836
価格                        \     1600
価格                        \     2600
送料                        \      800
合計                        \     3400
価格                        \     2520
割引                        \     -126
合計                        \     2394
消費税                      \      114
合計                        \     1080
送料                        \      200
合計                        \     1280
消費税                      \       60
オリジナル複数メールから抜粋<ここまで>
---------------------------------------
希望する置換結果 <ここから>
送料                        \  994,949
送料                        \        9
送料                        \      840
送料                        \   49,494
送料                        \       49
送料                        \      449
送料                        \    4,949
消費税                      \        9
消費税                      \      690
消費税                      \       49
消費税                      \      449
消費税                      \    4,949
合計                        \  991,690
合計                        \       99
合計                        \   91,690
合計                        \        9
合計                        \      690
合計                        \    1,690
割引                        \  -91,572
割引                        \      -69
割引                        \       -6
割引                        \     -157
割引                        \   -1,572
価格                        \  991,690
価格                        \       99
価格                        \   91,690
価格                        \        9
価格                        \      690
価格                        \    1,690
希望する置換結果 <ここまで>

[ ]
RE:30254 4桁以上の数字には、カンマを入No.30255
山紫水明 さん 11/09/11 20:10
 
 humさん,

>カンマ有り数字(7桁)はそのままで、カンマなしの4桁以上の数字には、
>カンマを入れたいのですが、どういう手段ならできますでしょうか?

 次のようにしたらいかがでしょう。
//------------------------------------------------------------------
while( 1 ) {
replaceallfast "([0-9])([0-9]{3})(?![0-9])", "\\1,\\2", regular;
if( result == 0 ) break;
}
endmacro;
//------------------------------------------------------------------

# 1回の置換でやる方法あるかなー・・・

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30255 4桁以上の数字には、カンマを入No.30256
Iranoan さん 11/09/11 20:33
 
 山紫水明さん今日は、Iranoan です。
> # 1回の置換でやる方法あるかなー・・・
 確認していませんが、上方向では駄目ですかね。

[ ]
RE:30254 4桁以上の数字には、カンマを入No.30257
hum さん 11/09/11 21:16
 
 山紫水明さん、秀まるおさん
連投で追加すみません。

自分で思いつく物は、価格以外の4桁以上の数字も置換してしまい、
使えない状況です。
カンマ有り数字(7桁)はそのままで、カンマなしの4桁以上の価格には、
カンマを入れたいのですが、どういう手段ならできますでしょうか?
よろしくお願いいたします。

    begingroupundo;
    gofileend;
    replaceallfast "([0-9]{1,3})([0-9]{3,3})" , "\\1,\\2" , regular;
    replaceallfast "([0-9]{1})([0-9]{3,3})([0-9]{3,3})" , "\\1,\\2,\\3" , re
gular;
    while (result) findup;
    endgroupundo 1;


【0610送料無料】【0605PUP10JU】[お荷物伝票番号] 302413750111
[お届け予定日] 2011-06-13
[受注番号]233477-20090611-69629256
[日時]2011-06-11 00:41:52
(TEL) 099-999-9999

>---------------------------------------
>オリジナル複数メールから抜粋<ここから>
>価格                        \    11800
>送料                        \     1200
>割引                        \    -1164
>合計                        \    11836
>価格                        \     1600
>価格                        \     2600
>送料                        \      800
>合計                        \     3400
>価格                        \     2520
>割引                        \     -126
>合計                        \     2394
>消費税                      \      114
>合計                        \     1080
>送料                        \      200
>合計                        \     1280
>消費税                      \       60
>オリジナル複数メールから抜粋<ここまで>
>---------------------------------------
>希望する置換結果 <ここから>
>送料                        \  994,949
>送料                        \        9
>送料                        \      840
>送料                        \   49,494
>送料                        \       49
>送料                        \      449
>送料                        \    4,949
>消費税                      \        9
>消費税                      \      690
>消費税                      \       49
>消費税                      \      449
>消費税                      \    4,949
>合計                        \  991,690
>合計                        \       99
>合計                        \   91,690
>合計                        \        9
>合計                        \      690
>合計                        \    1,690
>割引                        \  -91,572
>割引                        \      -69
>割引                        \       -6
>割引                        \     -157
>割引                        \   -1,572
>価格                        \  991,690
>価格                        \       99
>価格                        \   91,690
>価格                        \        9
>価格                        \      690
>価格                        \    1,690
>希望する置換結果 <ここまで>

[ ]
RE:30257 4桁以上の数字には、カンマを入No.30258
山紫水明 さん 11/09/11 21:52
 
 humさん,

 先のマクロは価格だけをとくに考慮することはしない汎用的なものでした。
 次のではいかがでしょう。

//------------------------------------------------------------------
while( 1 ) {
    replaceallfast "(\\\\[ -]*[0-9]+)([0-9]{3})(?![0-9])", "\\1,\\2",
regular;
    if( result == 0 ) break;
}
//------------------------------------------------------------------

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:30257 4桁以上の数字には、カンマを入No.30259
h-tom さん 11/09/11 21:52
 

h-tom です。

>自分で思いつく物は、価格以外の4桁以上の数字も置換してしまい、
>使えない状況です。
価格の前に"\"が確実に付くなら、検索の条件に"\"を入れればいいのでは?

[ ]
RE:30256 4桁以上の数字には、カンマを入No.30260
山紫水明 さん 11/09/11 21:54
 
 Iranoanさん,
 コメントありがとうございます。

> 確認していませんが、上方向では駄目ですかね。

「上方向」とは具体的にどうするのでしょう。
上方置換ということではないですよね。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30260 4桁以上の数字には、カンマを入No.30261
Iranoan さん 11/09/12 00:38
 
 山紫水明さん今日は、Iranoan です。
> 「上方向」とは具体的にどうするのでしょう。
> 上方置換ということではないですよね。
 そのつもりだったのですが、どうやら上手くいかなケースがありますね。
 この件については、理由が、HmJre.dllの問題かどうか解らないので、別件
として秀丸担当さんに伺います。

 本題については、
(?<=[0-9])[0-9]{3}(?![0-9])   →,\0
の上方置換で上手くいきませんか?
 スレッドの本題については、桁あわせをする必要から、空白を削除する必要
があるので、やはりマクロにしないと無理だと思いますが。

[ ]
RE:30258 4桁以上の数字には、カンマを入No.30262
hum さん 11/09/12 06:23
 
山紫水明さん
度々、申し訳ありません。後一歩、ご協力下さい。
ご提示のマクロを、先の「PriceWrapping.mac」の先頭に合体させ試しました。
確かに一見は、「カンマ無し数字(4桁以上)の置換」ができた様子です。
しかし、希望する置換結果として、桁あわせの整形が一部ずれるのです。

掲示板に貼ると、わからなくなりますが、半角1つ多い感じです。
複数メールにできた置換したいデータをオリジナルから抜粋
送料                        \   994949
価格                        \    11800
      ↓
カンマ挿入マクロ実行だと、
送料                        \   994,949<半角1つ多い
価格                        \    11,800<半角1つ多い
      ↓
希望する置換結果と比較して整形が一部ずれる。
送料                        \  994,949
価格                        \   11,800

>---------------------------------------
>オリジナル複数メールから抜粋<ここから>
>価格                        \    11800
>送料                        \     1200
>割引                        \    -1164
>合計                        \    11836
>価格                        \     1600
>価格                        \     2600
>送料                        \      800
>合計                        \     3400
>価格                        \     2520
>割引                        \     -126
>合計                        \     2394
>消費税                      \      114
>合計                        \     1080
>送料                        \      200
>合計                        \     1280
>消費税                      \       60
>オリジナル複数メールから抜粋<ここまで>
>---------------------------------------
>桁あわせの整形が一部ずれる<ここから>
>価格                        \    11,800<半角1つ多い
>送料                        \     1,200<半角1つ多い
>割引                        \    -1,164<半角1つ多い
>合計                        \    11,836<半角1つ多い
>価格                        \     1,600<半角1つ多い
>価格                        \     2,600<半角1つ多い
>送料                        \      800
>合計                        \     3,400<半角1つ多い
>価格                        \     2,520<半角1つ多い
>割引                        \     -126
>合計                        \     2,394<半角1つ多い
>消費税                      \      114
>合計                        \     1,080<半角1つ多い
>送料                        \      200
>合計                        \     1,280<半角1つ多い
>消費税                      \       60
>桁あわせの整形が一部ずれる<ここまで>


> 先のマクロは価格だけをとくに考慮することはしない汎用的なものでした。
> 次のではいかがでしょう。
>
>//------------------------------------------------------------------
>while( 1 ) {
>    replaceallfast "(\\\\[ -]*[0-9]+)([0-9]{3})(?![0-9])", "\\1,\\2",
>regular;
>    if( result == 0 ) break;
>}
>//------------------------------------------------------------------
>
>                          山紫水明(ユーザー)
>                          SANSHISUIMEI

[ ]
RE:30259 4桁以上の数字には、カンマを入No.30263
hum さん 11/09/12 07:12
 
h-tomさん
 コメントありがとうございます。

>価格の前に"\"が確実に付くなら、検索の条件に"\"を入れればいいのでは?

確かに一見は、\"を入れれば置換ができた様なのですが、
しかし、希望する置換結果としては、桁あわせの整形が一部ずれるのです。

現在残った複数メールに対して、置換したいのですが、カンマ有り数字(7桁)
はそのままで、カンマなしの4桁以上の価格には、カンマを入れたいのです。
どういう手段ならできますでしょうか?
よろしくお願いいたします。

[ ]
RE:30261 4桁以上の数字には、カンマを入No.30264
hum さん 11/09/12 07:14
 
Iranoan さん
 コメントありがとうございます。

> スレッドの本題については、桁あわせをする必要から、空白を削除する必要
>があるので、やはりマクロにしないと無理だと思いますが。

おっしゃる通りで、希望する置換結果としては、桁あわせの整形が一部ずれるのです。

現在残った複数メールに対して、置換したいのですが、カンマ有り数字(7桁)
はそのままで、カンマなしの4桁以上の価格には、カンマを入れたいのです。
どういう手段ならできますでしょうか?
よろしくお願いいたします。

[ ]
RE:30262 4桁以上の数字には、カンマを入No.30265
山紫水明 さん 11/09/12 07:32
 
 humさん,

>ご提示のマクロを、先の「PriceWrapping.mac」の先頭に合体させ試しました。
>確かに一見は、「カンマ無し数字(4桁以上)の置換」ができた様子です。
>しかし、希望する置換結果として、桁あわせの整形が一部ずれるのです。

 これは想定していました。ただ,マクロの実行順序を変えれば(つまりこのマ
クロを最初に実行すれば)解決できることだと思っていましたが,うまくいきま
せんか。
 ちょっと今は確認する余裕がありませんのですみません。

                          山紫水明
                          SANSHISUIMEI

[ ]
RE:30261 4桁以上の数字には、カンマを入No.30266
山紫水明 さん 11/09/12 07:43
 
 Iranoanさん,

> 本題については、
>(?<=[0-9])[0-9]{3}(?![0-9])   →,\0
>の上方置換で上手くいきませんか?

 これを繰り返す必要がありますよね。
 私が思ったのは,1回の置換で,つまりマクロだと1行だけでうまくやる方法は
ないのかなー,ということでした。

                          山紫水明(ユーザー)
                          SANSHISUIMEI

[ ]
RE:30263 4桁以上の数字には、カンマを入No.30267
h-tom さん 11/09/12 08:29
 
h-tom です。

>確かに一見は、\"を入れれば置換ができた様なのですが、
>しかし、希望する置換結果としては、桁あわせの整形が一部ずれるのです。
ずれる文字数は、最初からわかっているので、その分、スペースを削除すれば
いいです。
(タグつき正規表現でできます。)

[ ]
RE:30262 4桁以上の数字には、カンマを入No.30268
秀まるお2 さん 11/09/12 08:52
 
 桁がずれないようにコンマを入れるとしたら、

while( 1 ) {
    replaceallfast "(\\\\( *))( )((-|)([0-9]+))([0-9]{3})(?![0-9])"
                 , "\\1\\3,\\4", regular;
    if( result == 0 ) break;
}

 とする方法があります。ただし、「\1234」のように、「\」の後ろに空白が無
い場合は置換出来なくなります。

[ ]
RE:30268 4桁以上の数字には、カンマを入No.30269
hum さん 11/09/12 10:31
 
秀まるおさん
 明示的なコメントありがとうございます。
正常な置換済みの物を除外できずに、何回もマクロを組み合わせる体になって
いたところでした。
ご提示のマクロを、先の「PriceWrapping.mac」の先頭に合体させ試しました。
メール一覧上から複数メールに対し、マクロ実行しても大丈夫になった気がします。
「\1234」のような物は、「PriceWrapping.mac」の中盤処理で置換できていそうです。
かくれた例外はあるのかもしれませんが、

(1)秀丸メールのメール一覧上から、当該メールを選択して
(2)価格形式の\99      を\       99に見た目桁揃え整形したい。
(3)合計表記も置換できたらいいな〜。
(4)カンマなしの4桁以上の価格には、カンマを入れたい。

やっと、目的は達成です。
この度はお世話になりました。
また機会があれば宜しくお願いいたします。

>> 桁がずれないようにコンマを入れるとしたら、
>
>while( 1 ) {
>    replaceallfast "(\\\\( *))( )((-|)([0-9]+))([0-9]{3})(?![0-9])"
>                 , "\\1\\3,\\4", regular;
>    if( result == 0 ) break;
>}
>
> とする方法があります。ただし、「\1234」のように、「\」の後ろに空白が無
>い場合は置換出来なくなります。

[ ]
RE:30267 4桁以上の数字には、カンマを入No.30270
hum さん 11/09/12 10:32
 
h-tomさん
 木を見て森を見ず的なコメントありがとうございます。
実は、私が考えると、正常な置換済みの物を除外できずに、
何回もマクロを組み合わせる体になってしまいます。

今回は、先の「PriceWrapping.mac」の先頭にマクロ追加して
「カンマ無し数字(4桁以上)の置換」ができたらいいな〜と、
思っています。

(自分にはできるからといって、他の誰でも同様な能力は持ち合わせていません。
私のように、使わせて頂くのが精一杯では、自分なりに考えても煮詰まる人間は
今から、勉強すればできる訳でもありません。
お付合い下さるのなら、山紫水明さん、秀まるおさんのように
明示的なご教示の方が大変助かります。m(_._)m...)


>ずれる文字数は、最初からわかっているので、その分、
>スペースを削除すればいいです。
>(タグつき正規表現でできます。)

ご意見参考になります。

[ ]
RE:30265 4桁以上の数字には、カンマを入No.30271
hum さん 11/09/12 10:36
 
山紫水明さん
 秀まるおさんの案でうまくいきました。ありがとうございます。
この度はお世話になりました。
また機会があれば宜しくお願いいたします。


>>ご提示のマクロを、先の「PriceWrapping.mac」の先頭に合体させ試しました。
>>確かに一見は、「カンマ無し数字(4桁以上)の置換」ができた様子です。
>>しかし、希望する置換結果として、桁あわせの整形が一部ずれるのです。
>
> これは想定していました。ただ,マクロの実行順序を変えれば(つまりこのマ
>クロを最初に実行すれば)解決できることだと思っていましたが,うまくいきま
>せんか。
> ちょっと今は確認する余裕がありませんのですみません。
>
>                          山紫水明
>                          SANSHISUIMEI

[ ]
RE:30266 4桁以上の数字には、カンマを入No.30273
colder さん 11/09/12 12:23
 
colderです

> これを繰り返す必要がありますよね。
> 私が思ったのは,1回の置換で,つまりマクロだと1行だけでうまくやる方法は
>ないのかなー,ということでした。

すべての4桁以上の数字にカンマを入れるだけなら、
replaceall "([0-9])(?=([0-9]{3})+(?![0-9]))","\\1,",regualar;
でできるけど、今回の場合みたいに、価格部分だけ置換するのは、
hmjre.dllではたぶん無理だし、桁がずれないようにするのもたぶん無理。



[ ]
RE:30273 4桁以上の数字には、カンマを入No.30275
hum さん 11/09/12 13:44
 
colderさん
かくれた例外はあるのかもしれませんが、カンマなしの4桁以上の価格には、
カンマを入れたい。
 秀まるおさんの案でうまくいきました。
http://www.maruo.co.jp/hidesoft/2/x30217_.html?a=4#30268

>>すべての4桁以上の数字にカンマを入れるだけなら、
>replaceall "([0-9])(?=([0-9]{3})+(?![0-9]))","\\1,",regualar;
>でできるけど、今回の場合みたいに、価格部分だけ置換するのは、
>hmjre.dllではたぶん無理だし、桁がずれないようにするのもたぶん無理。

[ ]
RE:30269 4桁以上の数字には、カンマを入No.30276
hum さん 11/09/12 16:55
 
秀まるおさん

蛇足ですが、ご提示のマクロで\123489789〜\1まで、コンマを入れらるのですね。
\123,456,789
\12,345,678
\1,234,567
\123,456
\12,345
\1,234
\123
\12
\1
ここで、先の 「PriceWrapping.mac」は、見た目6( 7)桁までの相談でしたが、
価格形式の\123,456,789〜\          1に見た目9(12)桁に揃え整形したい。
と、思ったら直るものでしょうか?現状ではマクロ実行すると、
\1 89
\1 8
\1
\123,456
\12,345
\1,234
\123
\12
\1

になってしまいます。
お手数おかけしますが、よろしくお願い致します。
/------------------------------------------------------/
    setcompatiblemode 0x010F;
    begingroupundo;
while(1){
  replaceallfast "(\\\\[0-9]*[0-9])([0-9]{3})","\\1,\\2",regular;
  if(result<=0)break;
}
    gofiletop;
    golinetop;
    // 1 行頭にある単価
    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\        \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\       \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\      \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\     \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\    \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\   \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\  \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\ \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\\1 ", regular;
    endgroupundo 1;
/------------------------------------------------------/

> 明示的なコメントありがとうございます。
>正常な置換済みの物を除外できずに、何回もマクロを組み合わせる体になって
>いたところでした。
>ご提示のマクロを、先の「PriceWrapping.mac」の先頭に合体させ試しました。
>メール一覧上から複数メールに対し、マクロ実行しても大丈夫になった気がします。
>「\1234」のような物は、「PriceWrapping.mac」の中盤処理で置換できていそうです。
>かくれた例外はあるのかもしれませんが、
>
>(1)秀丸メールのメール一覧上から、当該メールを選択して
>(2)価格形式の\99      を\       99に見た目桁揃え整形したい。
>(3)合計表記も置換できたらいいな〜。
>(4)カンマなしの4桁以上の価格には、カンマを入れたい。
>
>やっと、目的は達成です。
>この度はお世話になりました。
>また機会があれば宜しくお願いいたします。
>
>>> 桁がずれないようにコンマを入れるとしたら、
>>
>>while( 1 ) {
>>    replaceallfast "(\\\\( *))( )((-|)([0-9]+))([0-9]{3})(?![0-9])"
>>                 , "\\1\\3,\\4", regular;
>>    if( result == 0 ) break;
>>}
>>
>> とする方法があります。ただし、「\1234」のように、「\」の後ろに空白が無
>>い場合は置換出来なくなります。

[ ]
RE:30276 4桁以上の数字には、カンマを入No.30277
秀まるお2 さん 11/09/12 17:56
 
 「6( 7))桁」っていう意味がよく分かりませんが…。

 すみませんが、ここのスレッドものすごく話が長くなってしまってて、今まで
の話がなんだったのか読み返すのが非常に困難になってます。なので、もっと具
体的なサンプルを書いて欲しい所です。

 例えば、

-------サンプル変換元----------
AAAAA   \    000
AAAAA   \    00
AAAAA   \    0
-------サンプル変換元----------



-------変換結果希望----------
AAAAA   \    000
AAAAA   \     00
AAAAA   \      0
-------変換結果希望----------

 に置換したいとか、もっと具体的にこういうサンプルデータをこういう結果に
置換されるようなマクロ、とか書いていただければ、それの例を書いて差し上げ
ることは出来ると思います。

[ ]
RE:30276 4桁以上の数字には、カンマを入No.30279
colder さん 11/09/12 19:06
 
colderです。

>    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\        \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\       \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\      \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\     \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\    \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\   \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\  \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\ \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\\1 ", regular;

問題点は三つあります。
・正規表現の末尾に"( ){N}"があるせいであらかじめ価格の後ろにスペースがない場
合は置換されない。
・","用の桁が確保されていないので\10,000,000以上の価格は置換されない。
・最後の置換文字列で"\"が一つ抜けている.
なので、以下にに変更すればよいかと
    replaceallfast "^\\\\([0-9,]{1})(?![0-9,])", "\\\\          \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{2})(?![0-9,])", "\\\\         \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{3})(?![0-9,])", "\\\\        \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{4})(?![0-9,])", "\\\\       \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{5})(?![0-9,])", "\\\\      \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{6})(?![0-9,])", "\\\\     \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{7})(?![0-9,])", "\\\\    \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{8})(?![0-9,])", "\\\\   \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{9})(?![0-9,])", "\\\\  \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{10})(?![0-9,])", "\\\\ \\1 ", regular;
    replaceallfast "^\\\\([0-9,]{11})(?![0-9,])", "\\\\\\1 ", regular;


[ ]
RE:30279 4桁以上の数字には、カンマを入No.30281
hum さん 11/09/12 19:40
 
colderさん
ご親切にご回答頂きましてありがとうございました。

■サンプル変換元と変換結果希望
http://www.maruo.co.jp/hidesoft/2/x30280_.html?a=0#30280

掲示板ではわかりずらくなりますが、秀丸エディタに貼り付けて
ご提示頂いたマクロと何かしらのマクロをプラスして、最終的には
サンプル変換元を変換結果希望にするマクロにしたいのですが、
皆さんの知恵をお借りしても、一筋縄ではいかないところです。
もう少しお付合い願ってもよろしいですか?


>>    replaceallfast "^\\\\([0-9,]{1})( ){8}", "\\\\        \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{2})( ){7}", "\\\\       \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{3})( ){6}", "\\\\      \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{4})( ){5}", "\\\\     \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{5})( ){4}", "\\\\    \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{6})( ){3}", "\\\\   \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{7})( ){2}", "\\\\  \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{8})( ){1}", "\\\\ \\1 ", regular;
>>    replaceallfast "^\\\\([0-9,]{9})( ){0}", "\\\\\1 ", regular;
>
>問題点は三つあります。
>・正規表現の末尾に"( ){N}"があるせいであらかじめ価格の後ろにスペースがない場
>合は置換されない。
>・","用の桁が確保されていないので\10,000,000以上の価格は置換されない。
>・最後の置換文字列で"\"が一つ抜けている.
>なので、以下にに変更すればよいかと
>    replaceallfast "^\\\\([0-9,]{1})(?![0-9,])", "\\\\          \\1 ", regu
>lar;
>    replaceallfast "^\\\\([0-9,]{2})(?![0-9,])", "\\\\         \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{3})(?![0-9,])", "\\\\        \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{4})(?![0-9,])", "\\\\       \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{5})(?![0-9,])", "\\\\      \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{6})(?![0-9,])", "\\\\     \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{7})(?![0-9,])", "\\\\    \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{8})(?![0-9,])", "\\\\   \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{9})(?![0-9,])", "\\\\  \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{10})(?![0-9,])", "\\\\ \\1 ", regular;
>    replaceallfast "^\\\\([0-9,]{11})(?![0-9,])", "\\\\\\1 ", regular;

[ ]
RE:30273 4桁以上の数字には、カンマを入No.30282
山紫水明 さん 11/09/12 19:55
 
 colderさん,

>replaceall "([0-9])(?=([0-9]{3})+(?![0-9]))","\\1,",regualar;

 なるほど,これでできますね。ありがとうございました。

                          山紫水明
                          SANSHISUIMEI

[ ]