文字コードが「自動選択」に戻ってしまう。No.05953
elan さん 00/06/15 15:38
 
改行の文字コードをLFとして保存したいのです。
「名前をつけて保存」で文字コードを指定すれば可能ですが、別のファイルを作成して
保存した場合、文字コードが「自動選択」に戻ってしまっていて、前回の文字コードの
指定が効きません。
「自動選択」に戻らないように設定することは可能でしょうか?
さらに言えば、そのディレクトリにあるファイルは、すべて改行=LFとして保存した
いのですが、ディレクトリ単位でしていすることは可能でしょうか。
「動作環境」-「パス」-「環境」で、EUCコード指定ドライブを設定することはできますが、
改行コードはLFではありません。
ファイルを保存するたびに毎回文字コードを設定するのは、非常に面倒なので
きっと何か良い方法があると思うのですが。。
よろしくお願いします。

[ ]
RE:05953 文字コードが「自動選択」に戻ってNo.05954
番頭++ さん 00/06/15 16:32
 
回答にはなりませんが、こんなマクロを好きなキーに割当て逃げるとか !!!

//*5    a1.mac
    if( basename != "" ){
        saveas filename2, euc, lf;  //  [EUC] [LF] でセーブする
    } else {
        SAVEAS;
    }
endmacro;


[ ]
RE:05954 文字コードが「自動選択」に戻っNo.05955
安久津 さん 00/06/15 21:35
 
こんにちは elan さん、番頭++さん。

// save.mac
  if( basename != "" ){
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    $$dir = getregstr("EucDrives");
    closereg;
    if( rightstr($$dir,1) != "\\" ) $$dir = $$dir + "\\";
    // $$dir = "H:\\EUC_LFで保存フォルダ\\"; // 直接書くなら上記はコメント。

    if( strstr(filename2,$$dir) != 0 ){
      save; // 関係ないフォルダ。
    }else if( (charset & 0x3f) == 3 ){ // EUC
      if( (charset & 0x40) && (charset & 0x80)==0 ) save; // LF
      else saveas filename2, euc, lf; // 非 LF
    }else{
      // 非 EUC
      saveas filename2, euc, lf;
    }
  }else{
    // 新規ファイルは、SJISでかまわないので「名前をつけて保存」して下さい。
    save;
  }
endmacro;

「上書き保存」のキー( 標準 Ctrl + S )に割当てるとか。

実際のテストはしてません。
理屈だと、EUCフォルダ以下に保存されているファイルを、
(上記マクロで)「上書き保存」すれば、文字集合 EUC 改行 LF にします。

ではでは。
# Access VBA 勉強中。

[ ]
RE:05953 文字コードが「自動選択」に戻ってNo.05962
秀丸担当 さん 00/06/16 18:27
 
>改行の文字コードをLFとして保存したいのです。
>「名前をつけて保存」で文字コードを指定すれば可能ですが、別のファイル
>を作成して保存した場合、文字コードが「自動選択」に戻ってしまっていて
>、前回の文字コードの指定が効きません。

新規作成したファイルは、毎回指定してやらなくてはいけません。
一度EUCのLFで保存すれば、次からそれを開いたときに、同じ文字コードと
改行で保存します。
次のバージョンで、ファイルタイプ別に文字コードが指定できるようにす
ることを検討しています。



[ ]
RE:05962 文字コードが「自動選択」に戻ってNo.05964
番頭++ さん 00/06/16 18:34
 
>次のバージョンで、ファイルタイプ別に文字コードが指定できるようにす
>ることを検討しています。

ファイルタイプ別ですか ???
.html を EUC とか、ディレクトリ毎にの、希望が多いような気がしますが。

[ ]
RE:05955 文字コードが「自動選択」に戻っNo.05969
安久津 さん 00/06/17 09:47
 

● save.mac ( くどい版 )
// 拡張子を、フォルダより優先する。
    disablebreak; disabledraw; // 「マクロ動作中」を強調。
    if( basename == "" ){ save; endmacro; }

    call getCharSet; $$CS = $$return;

// 拡張子 $$S[0][##i] のファイルは、$$S[1][##i] で保存する。
    $$S[0][0] = ".html";    $$S[1][0] = "JIS LF";
    $$S[0][1] = ".htm";     $$S[1][1] = "JIS LF";
    $$S[0][2] = ".pl";      $$S[1][2] = "EUC LF";
    $$S[0][3] = ".java";    $$S[1][3] = "UNICODE CR LF";
    ##size = 4;
    while( ##i < ##size ){
        ##len = strlen($$S[0][##i]);
        if( rightstr(basename,##len) == $$S[1][##i] ) break;
        ##i = ##i + 1;
    }
    if( ##i < ##size ){
        if( $$CS != $$S[1][##i] ){
            if( ##i <= 1 ) saveas filename2, jis, lf;
            else if( ##i == 2 ) saveas filename2, euc, lf;
            else if( ##i == 3 ) saveas filename2, unicode;
            endmacro;
        }
    }
// フォルダ $$S[0][##i] 以下にあるファイルは $$S[1][##i] で保存する。
    $$S[0][0] = "J:\\jis\\"; $$S[1][0] = "JIS LF";
    $$S[0][1] = "E:\\euc\\"; $$S[1][1] = "EUC LF";
    $$S[0][2] = "U:\\uni\\"; $$S[1][2] = "UNICODE CR LF";
    ##size = 3;
    ##i = 0;
    while( ##i < ##size ){
        if( strstr(filename2,$$S[0][##i]) == 0 ) break;
        ##i = ##i + 1;
    }
    if( ##i == ##size ) save;
    else if( $$CS == $$S[1][##i] ) save;
    else if( ##i == 0 ) saveas filename2, jis, lf;
    else if( ##i == 1 ) saveas filename2, euc, lf;
    else if( ##i == 2 ) saveas filename2, unicode;
endmacro;
getCharSet:
    ##c = charset & 63; // ヘルプの記述通り。しかし & 0x07 で十分なような。
    if( ##c <= 1 ) $$c = "SJIS ";
    else if( ##c == 2 ) $$c = "UNICODE ";
    else if( ##c == 3 ) $$c = "EUC ";
    else $$c = "JIS ";
    ##c = charset & 0xc0;
    if( ##c == 0x40 ) $$c = $$c + "LF";
    else if( ##c == 0x80 ) $$c = $$c + "CR";
    else $$c = $$c + "CR LF";
return $$c;
// おしまい。

(1)UTF-7, UTF-8 の判定方法なし。
(2)メニューでは、"SHIFT-JIS (改行=CR)" があるけど、
   現状ではマクロ側から保存できない。
(3)マクロじゃ遅そう。(^^;)
(4)テストしていません。m(__)m

● save.mac ( 別観点版 )

    if( basename != "" ){ save; endmacro; }
    openreg "CURRENTUSER", "Software\\Hidemaruo\\Hidemaru\\Env";
    $$edir = getregstr("EucDrives");
    closereg;
    if( rightstr($$edir,1) != "\\" ) $$edir = $$edir + "\\";
    $$wdir = directory2;
    if( rightstr($$wdir,1) != "\\" ) $$wdir = $$wdir + "\\";
    if( strstr($$wdir,$$edir) != 0 ){ SAVEAS; endmacro; }

    saveas $$wdir + "euc.tmp", euc, lf;
    changename "";
    SAVEAS; // 拡張子を明示しないと、.tmp になります。
endmacro;
// おしまい。

ではでは。

[ ]