株マクロ作成願い no.3No.23984
emc827 さん 07/11/04 06:34
 
秀丸v5.18, winxp he sp2
1.やりたい事
下記リストから、銘柄コードを取り出すマクロです。

◎新聞材料
ライオン(4912)・・・大和が「4」から「3」格上げ。GMO(9449)・・・リー
マンが「オーバーW」から「イコールW」格上げ。ベネワン<2412>・・・中小社員向
けに高額医療費支援。ユニチャーム<8113>・・・子供のインフルエンザ、マスクで発
症率1/5
......
9404 日本テレビ --------------これは左詰め固定です
7277 TBK         同上
.....

2.マクロ結果
銘柄コード:4桁固定、左詰め
4912 ok
9449 ok
2412 ok
8113 ok
9404 ng
7277 ng

下記マクロを実行しますと、上記NGとなります。
よろしくお願いします。

マクロ:
//--------------------------------------------------------//
    replaceallfast "[〈<]", "(", regular;
    replaceallfast "[〉>]", ")", regular;
disabledraw;
gofiletop;
while( 1 ) {
    searchdown2 "[((][0-9]{4}[\\))]", regular;
    if( !result ) break;
    $brand[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy );
    moveto foundendx, foundendy;
    #i = #i + 1;
}
newfile;
while( #j < #i ) {
    insert $brand[#j] + "\n";
    #j = #j + 1;
}
replaceallfast "[()()]", "", regular;
endmacro;
//--------------------------------------------------------//

[ ]
RE:23984 株マクロ作成願い no.3No.23985
三月 さん 07/11/04 06:54
 

>2.マクロ結果
>銘柄コード:4桁固定、左詰め
>4912 ok
>9449 ok
>2412 ok
>8113 ok
>9404 ng
>7277 ng
>
>下記マクロを実行しますと、上記NGとなります。

下記の括弧の付いていない番号が取り出せないと解釈して
>......
>9404 日本テレビ --------------これは左詰め固定です
>7277 TBK         同上
>.....
最初に数字4桁を括弧で囲ってやればよいだろうと
    replaceallfast "\\f[0-9]{4}\\f", "\\(\\1\\)", regular;
と言うのを先頭でやってやればよさそう。
ただし、数字が5桁以上あった場合4桁ずつ区切られます。

[ ]
RE:23985 株マクロ作成願い no.3No.23986
emc827 さん 07/11/04 08:15
 
回答ありがとう御座います。
株コードは4桁固定です。
動作確認し、問題ありませんでした。

このマクロ、大文字英数字にはNGです。
大文字の数字を手作業で小文字に変換して、このマクロを実行しています。具体的に
は、編集、変換、英数字のみ半角です。
これをマクロに反映したいのです。

よろしくお願いします。

[ ]
RE:23986 株マクロ作成願い no.3No.23987
三月 さん 07/11/04 10:23
 
>
>このマクロ、大文字英数字にはNGです。
>大文字の数字を手作業で小文字に変換して、このマクロを実行しています。具体的
>には、編集、変換、英数字のみ半角です。
>これをマクロに反映したいのです。
>
とりあえず、
    replaceallfast "\\f[0-9]{4}\\f", "\\(\\1\\)", regular;

    replaceallfast "\\f[0-9]{4}\\f", "\\(\\1\\)", regular,fuzzy;


    searchdown2 "[((][0-9]{4}[\\))]", regular;

    searchdown2 "[((][0-9]{4}[\\))]", regular,fuzzy;
にすると全角数字も対象になるので

切り出したものをあとから半角変換するとか。

[ ]
RE:23987 コメントNo.23988
emc827 さん 07/11/04 11:32
 
回答 ありがとう御座います。

//--------------------------------------------------------//
    replaceallfast "\\f[0-9]{4}\\f", "\\(\\1\\)", regular,fuzzy;
    replaceallfast "[〈<]", "(", regular;
    replaceallfast "[〉>]", ")", regular;
disabledraw;
gofiletop;
while( 1 ) {
    searchdown2 "[((][0-9]{4}[\\))]", regular,fuzzy;
    if( !result ) break;
    $brand[#i] = gettext( foundtopx, foundtopy, foundendx, foundendy );
    moveto foundendx, foundendy;
    #i = #i + 1;
}
newfile;
while( #j < #i ) {
    insert $brand[#j] + "\n";
    #j = #j + 1;
}
replaceallfast "[()()]", "", regular;
endmacro;
//--------------------------------------------------------//

上記マクロの実行結果です。

レーティング
ライオン(4912)大和が「4」から「3」格上げ
フジテレビ(4676)メリルが「中立」から「売り」格下げ
GMO(9449)リーマンが「オーバーW」から「イコールW」格上げ

4912
4676
9449

これを手動で半角に変換しています。

山紫水明さんのマクロを参考に、半角変換マクロを検討していますが、
よく分かりません。


//--------- ZenhanDaisho.mac -----------------------------------//
//
//        全角半角大小文字変換マクロ    Ver.4.4
//                                                山紫水明

//      説明テキストをお読み下さい

//// ○オプション○ //////////////////////////////////////////
#save = 1;   //実行前に保存の確認をする---「1」,しない---「0」
#conf = 1;   //最後に確認をする---「1」,確認しない---「0」
///////////////////////////////////////////////////////////////

if( #save && updated ) {
    question "ファイルが更新されています。\nいったん保存しますか?";
    if( result == yes ) save;
}
call Save_search;
disabledraw;
if( !selecting ) {
    disableinvert;
    question "全文で変換しますか?";
    if( !result ) endmacro;
    else selectall;
}
if( rectselecting ) #rectsel = 1;//BOX 範囲選択の場合
#bx = seltopx;    #by = seltopy;
#ex = selendx;    #ey = selendy;
#rs = 1;   //BOX 選択で範囲の内外の判定フラグ
#ec = 0;   //実行回数記録用
Mojimenu:
menu " 文 字 の 変 換",
     "A) 英字大文字に",
     "B) 英字小文字に",
     "【全角に変換】",
     "C) 英 数 字",
     "D) 英    字",
     "E) 数    字",
     "F) カタカナ",
     "【半角に変換】",
     "G) 英 数 字",
     "H) 英    字",
     "J) 数    字",
     "K) カタカナ";
#r = result;
escape;
moveto #ex, #ey;
if(#r == 0) endmacro;
else if(#r == 1 ||#r == 4 || #r == 9) goto Mojimenu;
else if(#r == 2) $replace = "[a-za-z]";
else if(#r == 3) $replace = "[A-ZA-Z]";
else if(#r == 5) $replace = "[A-Za-z0-9,.]";
else if(#r == 6) $replace = "[A-Za-z,.]";
else if(#r == 7) $replace = "[0-9,.]";
else if(#r == 8) $replace = "[ヲ-゚]";
else if(#r == 10) $replace = "[A-Za-z0-9,.]";
else if(#r == 11) $replace = "[A-Za-z,.]";
else if(#r == 12) $replace = "[0-9,.]";
else if(#r == 13) $replace = "[ァ-ヶー゛゜]";
if( #r == 2 ) call ToCapital;
else if( #r == 3 )  call ToSmall;
else if( #r > 4 && #r < 9 ) call ToZenkaku;
else if( #r > 9 && #r <= 13 ) call ToHankaku;
escape;
moveto #ex, #ey;
redraw;
call Reset_search;
enabledraw;
if( #conf ) {
    question "確定しますか?";
    if( !result ) {
        disabledraw;
        while( #ec ) {
            undo;
            #ec = #ec - 1;
        }
        enabledraw;
    }
}
//実行結果をクリップボードに記録(Undo用)
setclipboard "ZenhanDaisho.mac" + "\x0d\x0a";
addclipboard str(#ec);
endmacro;

ToCapital:
while(1){
    searchup $replace, regular;//
    if( result == 0 || y < #by || (y == #by && x < #bx) ) break;
    if( #rectsel ) call RectSel;
    if( #rs ) toupper;
    #ec = #ec + 1;
    escape;
}
return;

ToSmall:
while(1){
    searchup $replace, regular;//
    if( result == 0 || y < #by || (y == #by && x < #bx) ) break;
    if( #rectsel ) call RectSel;
    if( #rs ) tolower;
    #ec = #ec + 1;
    escape;
}
return;

ToZenkaku:
while(1){
    searchup $replace, regular;
    if( result == 0 || y < #by || (y == #by && x < #bx) ) break;
    if( #rectsel ) call RectSel;
    if( #rs && ( code == '゙' || code == '゚' ) ) { //併せて1字として扱う
        escape; left; beginsel; right; right;
    }
    if( #rs ) tozenkakukata;
    #ec = #ec + 1;
    escape;
}
return;

ToHankaku:
while(1){
    searchup $replace, regular;//
    if( result == 0 || y < #by || (y == #by && x < #bx) ) break;
    if( #rectsel ) call RectSel;
    if( #rs ) tohankaku;
    #ec = #ec + 1;
    escape;
}
return;

RectSel:
if( x >= #bx && x < #ex ) #rs = 1;
else #rs = 0;
return;

Save_search:    //検索状態を保存・変更
$sb = searchbuffer;
#so = searchoption;
if ( !searchmode ) {    // 検索状態を範囲選択に変更
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",1;
    #modechange = 1;
    envchanged;
    closereg;
}
return;

Reset_search:   //検索状態を元に戻す
if ( #modechange ) {
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    writeregnum "SelectFound",#s_mode;
    envchanged;
    closereg;
}
setsearch $sb, #so;
return;

//----------------------------------------------------------------//


[ ]
RE:23988 コメントNo.23990
Kamonohasi さん 07/11/04 16:22
 
面倒くさければ
endmacro;
の前に
selectall;
filter "" , "ToHankakuAlnum";
escape;
でも差し込めばいいと思いますよ。

キー操作を記録すれば、分かるはずなんですが、まだチャレンジしたことない
ですか?
できるようになると、非常に楽になりますよ。

[ ]
RE:23990 感謝していますNo.23993
emc827 さん 07/11/04 20:15
 
できました。
このマクロを先頭に入れました。
このマクロ、非常に気に入りました。
理由:
株 銘柄コードは半角です。
全角半角いちいち判断しなくていいからです。
今まで随分悩まされました。

>キー操作を記録すれば、分かるはずなんですが、まだチャレンジしたことない
>ですか?
>できるようになると、非常に楽になりますよ。
やったこと無いです。調べてやって見ます。

三月さん、Kamonohasiさん ご協力ありがとう御座いました。
感謝しています。



[ ]