変数の中身の長さを取るには?

[上に] [前に] [次に]
ケンヤム [E-Mail] [HomePage] 2000/05/22(月) 13:17:22
初歩的な質問で恐縮ですが、
変数の中の文字のlenghtを取り出し方がわからず
困っています。

具体的には、
$filename = "abc.txt";
と入れられたときに、ファイル名(abc)と
拡張子( .txt)を分けたいのですが
$filename = "../aaa/abc.txt";
の場合もあるので方法がわかりません。

自分が持っているperlの本にのっていないので、
どなたかご存知でしたら、お教え下さい。
宜しくお願いします。

風神 2000/05/22(月) 15:46:37
$len = length $filename;
で、取得できますよ。

ラクダ本の132ページに載っています。

2000/05/22(月) 16:24:19
というか、題名と質問の内容が噛み合ってないと言うか、何でそこで変数の
長さが出てくるのかがよくわからないんですが、正規表現を使って、

if($filename ~= m!^(.*[\\/])?(.*)\.(.*)$!){
   $name = $2;  # ファイル名(abc.txtのabcの部分が入る)
   $ext  = $3;  # 拡張子(abc.txtのtxtの部分が入る)
}

とかやれば幸せになれるかもしれません。

バギンズ 2000/05/22(月) 16:33:50
~= じゃなくて =~ ですね。

andi 2000/05/22(月) 16:48:39
/(.*)\.(.*)\b/
で、できませんか・・・?
動作確認環境今無いので確認はしていませんが。

ケンヤム 2000/05/22(月) 18:11:40
[[解決]]
さっそくのご回答有り難うございます。

質問の内容があやふやで申し訳ありませんでした。

ご回答の方法とは違うのですが、下記のソース(拡張子が4桁固定という条件)でうまくいきましたので、
ひとまず安心しました。

foreach $wrk(".csv",".CSV",".fil",".FIL",".txt",".TXT"){
$pnt=index $fname,$wrk;
if($pnt!=-1){
$title=substr $fname,0,$pnt;
$title=sprintf("%s%s",$title,".hed");
last;
}
}

ご回答いただいた方法でもできるようにがんばってみます!!

[上に] [前に] [次に]