選択されている文字の漢字コードを変えるNo.00969
fdsa2 さん 00/01/27 13:05
 
さとうです。2回目の新規投稿となります。

前回は、「マクロファイルの自身のパスを知る方法」で
きいろいまふらあ様には大変お世話になりました。
きいろいまふらあ様にいただいたアイディアで動いています。
#もう少し完成度を上げてから公表したいと思っています。

今回は、「選択されている文字の漢字コードを変えるマクロ」です。
まずしたいことを説明します。
テキストの中に一部SJISとは、違う漢字コードを含むものがあります。
#なぜ含んでいるのかは別として...
半角カタカナで書かれていて、意味が通じません。
そうです。EUCコードのようです。
このカタカナの部分を選択し、SJISに直したいことが今回の題材です。

今までですと、
1.その文字を選択し、コピーする
2.新たに秀丸を開いて、貼り付ける
3.どこかにか保存して終了
4.その保存したファイルを、文字コードをEUCにして、開く

この一連の動作をするマクロをお持ちの方はいらっしゃいませんか?
また、同じような機能を持つマクロでもかまいません。
よろしくお願いいたします。

[ ]
RE:00969 選択されている文字の漢字コードNo.00970
安久津 さん 00/01/27 15:33
 

こんにちは さとうさん、安久津といいます。

>このカタカナの部分を選択し、SJISに直したいことが今回の題材です。
次のマクロを使ってみて下さい。

// 選択範囲は EUC のみ。
  $$tmp = ""; // 場合によっては、作業フォルダを指定して下さい。
  if( ! selecting ){
    message "選択していません。"; endmacro;
  }
  disabledraw; ##cly = lineno;
  copy2;
  ##client = hidemaruhandle(0);
  openfile "/h "; paste;
  if( $$tmp == "" ){
    $$tmp = getenv("TEMP");
    if( $$tmp == "" ) $$tmp = getenv("TMP");
    if( $$tmp == "" ){
      message "作業フォルダを $$tmp で指定して下さい。";
      endmacro;
    }
  }
  if( rightstr($$tmp,1) != "\\" ) $$tmp = $$tmp + "\\";
  $$tmp = $$tmp + "hm.tmp";
  saveas $$tmp, sjis; // <-重要
  if( ! result ){
    message "保存失敗しました。\n"+$$tmp; endmacro;
  }
  setactivehidemaru ##client;
  closehidemaruforced 1;
  openfile "/h " + $$tmp, euc; // ようやく EUC。
  selectall; copy;
  setactivehidemaru ##client;
  closehidemaruforced 1;
  delete; paste; movetolineno 1, ##cly;
  beep;
endmacro;
// 終り

ではでは。

[ ]
RE:00969 選択されている文字の漢字コードNo.00971
きいろいまふらあ さん 00/01/27 16:23
 
きいろいまふらあです。

>#もう少し完成度を上げてから公表したいと思っています。

楽しみにしております。(^_^)

>そうです。EUCコードのようです。
>このカタカナの部分を選択し、SJISに直したいことが今回の題材です。

EUCとSJISって規則的に対応しないんでしたっけ?
ascii()
char()
gettext()
seltopx, seltopy, selendx, selendy
あたりを使ってその場で(そのバッファの中で)変換できないんかなあ?

>また、同じような機能を持つマクロでもかまいません。

どなたか、バッファ全体のコードを変換するマクロ作ってらしたと思います。
同じロジックでいけるんじゃないかなあ?

と曖昧なコメントをしておきます。

[ ]
RE:00969 選択されている文字の漢字コードNo.00972
ENCODINGSHIFTJIS さん 00/01/27 16:33
 
>今回は、「選択されている文字の漢字コードを変えるマクロ」です。
>まずしたいことを説明します。
>テキストの中に一部SJISとは、違う漢字コードを含むものがあります。
>#なぜ含んでいるのかは別として...
>半角カタカナで書かれていて、意味が通じません。
>そうです。EUCコードのようです。
>このカタカナの部分を選択し、SJISに直したいことが今回の題材です。

// tomomi.mac
// 画面の選択範囲をその場で漢字コード変換して置換

// run "start nkf32.exe.lnk -E -s <con >con"; // ←←←これが本物
// 漢字コード変換ソフトはnkf でなくとも手近なものでどうぞ。
// strat *.lnk なのは .exe にPATH を通していない代わりに
// windows\command (PATHの通っている)にショートカットを置いているため。

// 以下 テストラン マクロのソース上で

menu "S --> E";
moveto 0,22;beginsel down 2;
run "start nkf32.exe.lnk -S -e <con >con";
menu "E --> S";
moveto 0,22;beginsel down 2;
run "start nkf32.exe.lnk -E -s <con >con";

// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 
// 朋美漢字 



[ ]
RE:00972 選択されている文字の漢字コードNo.00973
ENCODINGSHIFTJIS さん 00/01/27 16:49
 
>>今回は、「選択されている文字の漢字コードを変えるマクロ」です。

run文 一つですからマクロ実行しなくとも、
画面で範囲を選択して
メニュー その他/プログラム実行 でもできます。
ヒストリー記憶が効いているから、少数箇所ならこれでもすみます。

違いはキー登録したマクロより、操作がかかることです。



[ ]
RE:00970 選択されている文字の漢字コードNo.00974
fdsa2 さん 00/01/27 18:02
 
安久津さま、リプライどうもありがとうございました。
ほぼ、求めていたものと同じだったので、感激です。
ぼくもfindhidemaru()を使って、作ったのですが、
常に-1を返してきたので、諦めていました。
hidemaruhandle()の使い方もわかりましたので、マクロの幅も広がります。
では、また。

>
>こんにちは さとうさん、安久津といいます。
>
>>このカタカナの部分を選択し、SJISに直したいことが今回の題材です。
>次のマクロを使ってみて下さい。
>
>// 選択範囲は EUC のみ。
>  $$tmp = ""; // 場合によっては、作業フォルダを指定して下さい。
>  if( ! selecting ){
>    message "選択していません。"; endmacro;
>  }
>  disabledraw; ##cly = lineno;
>  copy2;
>  ##client = hidemaruhandle(0);
>  openfile "/h "; paste;
>  if( $$tmp == "" ){
>    $$tmp = getenv("TEMP");
>    if( $$tmp == "" ) $$tmp = getenv("TMP");
>    if( $$tmp == "" ){
>      message "作業フォルダを $$tmp で指定して下さい。";
>      endmacro;
>    }
>  }
>  if( rightstr($$tmp,1) != "\\" ) $$tmp = $$tmp + "\\";
>  $$tmp = $$tmp + "hm.tmp";
>  saveas $$tmp, sjis; // <-重要
>  if( ! result ){
>    message "保存失敗しました。\n"+$$tmp; endmacro;
>  }
>  setactivehidemaru ##client;
>  closehidemaruforced 1;
>  openfile "/h " + $$tmp, euc; // ようやく EUC。
>  selectall; copy;
>  setactivehidemaru ##client;
>  closehidemaruforced 1;
>  delete; paste; movetolineno 1, ##cly;
>  beep;
>endmacro;
>// 終り

[ ]