アプリ版:「スタンプのみでお礼する」機能のリリースについて

リストファイルから、検索対象ファイルを読み取る
結果を表示する。

というようにしています。

結果表示で、たとえば、「答えてねっと」という語が、
「oshiete_goo.html」というファイルでヒットした場合、
結果を、
“ タイトル名 (oshiete_goo.html) ”

というように表示させています。そこで質問です。

この結果表示の、括弧内にファイル名を拡張子付きで表示させて
いるのですが、(パラメータ:$fi)
それを、拡張子をとって、「oshiete_goo」だけを表示したいのですが、
どのようにしたらいいでしょうか。

記述するスクリプトを教えて下さい。

A 回答 (5件)

$fi =~ s/(.*)\.(.*)$/$1/;


ではダメでしょうか。

この回答への補足

ご回答ありがとうございます。

その、ファイル名の拡張子を省いたモノを、
別の変数、$fi_sec に渡すようにするにはどうしたらいいでしょうか?

補足日時:2003/12/13 00:31
    • good
    • 0

> ファイル名の拡張子を省いたモノを、


> 別の変数、$fi_sec に渡すようにするにはどうしたらいいでしょうか?

別の変数に渡す必要があるのですか?
$fi =~ s/(.*)\.(.*)$/$1/;
で、既に$fiはファイル名の拡張子が省かれて、ファイル名だけになっていますが・・・。
だから、普通に$fiを使ってもいいですし、変数名を変えたいなら、
$fi_sec = $fi;
でいいですよ。
拡張子がついたままの変数も後で使いたいので残す、というのであれば、
$fi_sec = $fi;
$fi_sec =~ s/(.*)\.(.*)$/$1/;
とするのがいいでしょうね。
$fiが拡張子を含めたファイル名、
$fi_secが拡張子を除いたファイル名のみのもの、
ということになります。
    • good
    • 0

$fiを非破壊で、と言うことですよね。


だったら、m演算子と配列マッピングを使って

($fi_sec) = m/^([^\.]*)\..*$/;

とかくのが綺麗かもしれません。
あと、正規表現を使うとマッチしなかった場合ヌル値が帰ってきてしまいますので、

$fi_sec = $fi if ($fi_sec eq "");

をあとにつけておいたほうがいいかもしれません。
    • good
    • 0

#3です。



すみません、#3で書いたのは文字列が$_に入っている場合でした。$fiに入っている場合であれば:

($fi_sec) = ($fi =~ m/^([^\.]*)\..*$/);

と書けます。
    • good
    • 0

こんな書き方もできます。


($fi_sec = $fi) =~ s/\..+$//;
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!