ファイル名の拡張子を取得変更No.00669
yamagiwa さん 98/03/18 08:38
 
こんにちは!!
初めて投稿させていただきます。

マクロにてファイル名の拡張子を取得変更するにはどうしたら
よいのでしょうか?
ファイル名をfilenameで取得した文字変数に入れたあと
どうにかして以下のように拡張子のみ変更したいのですが

例)c:\abc.txt ----->c:\abc.doc

良い方法がありましたらご教授ねがいます。

[ ]
RE:00669 ファイル名の拡張子を取得変更No.00670
番頭++ さん 98/03/18 12:10
 
>ファイル名の拡張子を取得変更する

//*  これで答えになっていますか ???

//*-------------------------------------------------------------------72
//*changename "ABC_abc.TxT";
call pp_get_kaku1;
message $$return;
//if( leftstr($$return,1) == "." ){
//message $$return;
//}
call pp_re_filename2 ".txt", ".doc";
message $$return;
call pp_re_filename2 ".txt", ".DOC";
message $$return;
call pp_re_basename2 ".txt", ".doc";
message $$return;
call pp_re_basename2 ".txt", ".DOC";
message $$return;
//*changename $$return;
call pp_re_basename2 ".xtx", ".Doc";
if( leftstr($$return,1) == "." ){
message $$return + " - が見つかりません !";
} else {
message $$return;
//*changename $$return;
}

endmacro;

pp_re_filename2:
$$rename = $$2;$$n = filename;
//ありえない文字 [@] を使用する。delimiter, デリミター、区切記号
##i = strstr($$n+"@",$$1+"@");
if( strlen($$n) != 0 && ##1 >= 0 ){
$$rename = leftstr(filename2,##i) + $$2;
}
return $$rename;

pp_re_basename2:
$$rename = $$2;$$n = basename;
##i = strstr($$n+"@",$$1+"@");
if( strlen($$n) != 0 && ##1 >= 0 ){
$$rename = leftstr(basename2,##i) + $$2;
}
return $$rename;

pp_get_kaku1:
//"aaa.bbb.ccc" というファイル名には対応していません !
//"x:\ddd.eee\" というディレクトリ名には対応していません !
//*$$nm = filename;
$$nm = basename;
$$get_kaku = "";
##i = strstr($$nm,".");
if( ##i >= 0 ){
//*$$get_kaku = midstr($$nm,##i+1,999);//  kkk
$$get_kaku = midstr($$nm,##i,999);// .kkk
} else {
$$get_kaku = "";
}
return $$get_kaku;


[ ]
RE:00670 ファイル名の拡張子を取得変更No.00671
杉浦 まさき さん 98/03/19 00:13
 
番頭++ さん、はじめまして。
 杉浦 まさき と申します。

>//ありえない文字 [@] を使用する。

とのことですが、[@] はファイル名として使用できるのではないでしょうか?
 #とはいっても実際に使う人はそうはいないでしょうけど(^^;。


[ ]
RE:00671 ファイル名の拡張子を取得変更No.00673
番頭++ さん 98/03/19 12:54
 
>[@] はファイル名として使用できるのではないでしょうか?

すみません、プログラムをコードするのはたぶん一人前ですが、
文章を書くのはあまり ...

前回のサンプルは、要望には、99.9 % 答えれたと思います。区切記号の付加し
た場所が文字値の最後であること、
    basename で、もし「a.txt@.doc@」、「a.txt@@」を
    「.txt@」と取り違えても、大事には至らない気がします。
ファイル名として使用できない、文字ストリング、文字コードを使用すれば理想
ですね。"\\\\" ...
    ##i = strstr($$n+"\\\\",$$1+"\\\\");    // ...

//  この例は、あなたがあまり使用しない文字 例: [@] をデリミターとして使用。
//  [@] をディレクトリ名、ファイル名の文字セットとして使用している場合には
//  その他の特殊記号に変更してください。    { + / ! ? } ...
// delimiter, デリミター、区切記号
    ##i = strstr($$n+"@",$$1+"@");

//  この例は、普通の人は、ふだん使用しない文字列 [ 番頭++ ] を使用。
    ##i = strstr($$n+" 番頭++ ",$$1+" 番頭++ ");

//  この例は、ファイル名用に許されていない文字コード[0x1A]を使用。
    ##i = strstr($$n+str(0x1A),$$1+str(0x1A));

これに変えましょう。それとも str(0x0A) ???

あとは、その人の好みにおまかせします。
出来れば、Windows 95, NT で、絶対に使用できない文字コードを教えてください。

よろしくお願いします

[ ]
RE:00673 ファイル名の拡張子を取得変No.00675
秀丸担当 さん 98/03/19 18:46
 
ファイル名に使ってはいけない文字

 < > : " / \ |

さらに aux、 con、 prn などをファイル名にしてはいけません。
長さは260バイトまでです。


[ ]
RE:00675 ファイル名の拡張子を取得変No.00677
EMiCC さん 98/03/19 19:03
 

>さらに aux、 con、 prn などをファイル名にしてはいけません。
さらにさらに、clock もやばかったはず。
(もしかして MS-DOS の場合だけかも (^_^;) )
 

[ ]
RE:00670 ファイル名の拡張子を取得変更No.00733
yamagiwa さん 98/04/02 19:45
 

>>ファイル名の拡張子を取得変更する
>
>//*  これで答えになっていますか ???
>

質問を投稿したyamagiwaです。

ありがとうございます、まだ詳細に拝見しておりませんが試してみます。
長期出張でお礼がおくれ申し訳ありませんでした。

ではこれからもよろしくお願いします。

[ ]