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

宣言した変数にファイルのパスが格納されています。

例:
FileName = "C:\My Documents\test\test.txt"

この文字列から
"test.txt"のみを取り出したいのですが、どうしたら良いのでしょうか?

文字列の一番最後の"\"の位置番号を取得して、次の文字からMIDを使えばいいのかなと思ったのですが、"\"の位置を取得する方法すらわかりません。

もし上記の方法で無理なら代替方法でも構いません。

ちなみにこのパスは毎回違うパスが入ってきます。

よろしくお願いします。

A 回答 (9件)

一通り、考えられるパターンが出揃っているみたいなので、皆さんの発言ついて補足です。



#1.Mizyuさんの方法が、昔ながらの処理のです。ぼくもこの方法がよいと思います。

#2.josyo_mさんの方法と#4.bin-chanさんの方法は、VB6もしくはOffice2000以降の製品の関数だと思いますので、使用については環境によります。(質問に環境を書くようにしましょうね。)

#3.promeさんの方法は、すでに存在しているファイルでしか使用できないのでは?
もし確実にファイルが存在しているのであれば、FileSystemObject(FSO)を使用してもかまわないと思います。
(いつも述べていますが、インストールされているIEのバージョンによって、FSOは使えません。)
そのような限定条件のもとであれば、この場合はFSOを使用してもいいと思います。
(さらに追記で、FSOを使用すべきではないパターンとしては、ルートディレクトリをFSOで参照することです。ルートに存在するフォルダ以下のサブフォルダの数などの情報を得たりする場合があり、負荷がかかる恐れがあります。PGの設計次第ですが・・・)
    • good
    • 0

>たとえば、ファイルの保存ダイアログを表示するとします。


   :
   :
>汎用性の高い関数を作成するには、この場合は不向きに思います。

汎用性の高い関数というのは、あまり作ったことがなかったので、
思いもよりませんでした。
いろいろ教えていただきありがとうございます。

184434のご回答、拝見しました。
IE4以降だったら、私の場合は大丈夫です。
まあ、この件も汎用性の高い関数云々を言えば、使えないことになりますね。
    • good
    • 0
この回答へのお礼

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。

お礼日時:2002/02/26 22:40

>TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。


ありがとうございます。 _(。ω。)_


>>すでに存在しているファイルでしか使用できないのでは?
>まあその前にDir関数でファイルの有無を調べておけばいいわけです。
すでに存在しているファイル"c:\1.txt"を扱うのであれば、たしかにそうですね。
ただ、それではやはり使用状況が限定されてしまいます。

たとえば、ファイルの保存ダイアログを表示するとします。
上書きではなく新規保存であれば、ダイアログから得るファイルフルパスに、まだファイルは存在していません。
その得たファイルフルパスをファイル名とパスに分割するには、FSOが使えなくなってしまうのです。
(ダミーでファイルを作成すると言う手もありますが・・・二度手間になりますよね・・・)
汎用性の高い関数を作成するには、この場合は不向きに思います。
(前にも述べたように、限定であればOKだと思います。)

何となく、僕の発言はFSOを毛嫌いしているようにとらわれると困るのですが、実際にFSOを使用したりもします。
一般ユーザ向けパッケージではなく、納品先がきちんと決まっている商用の開発で、ファイルのコピーなどには、使ったりもします。
ですので、FSOの全てを否定しているのではないので、ご勘弁ください。

>私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?
このことには以前にお答えしております。そちらをご覧ください。
(結局は忘れたという締めで、申し訳ないですが・・・)

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=184434
    • good
    • 0
この回答へのお礼

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。

お礼日時:2002/02/26 22:40

TAGOSAKU7さんのお名前は、何度となくお見受けしたように思います。



>すでに存在しているファイルでしか使用できないのでは?

まあその前にDir関数でファイルの有無を調べておけばいいわけです。

(改行位置を変えました_ _)
>いつも述べていますが、インストールされているIEのバージョンによって、
>FSOは使えません。)

私が質問するのもなんですが、IEのどのバージョンが使えないのでしょうか?

>FSOを使用すべきではないパターンとしては

この部分は知りませんでした。ありがとうございます。
    • good
    • 0

考えたそのままのロジックでやって見ました。


他の例でも小生は良く使います。
InstrRevはVBAでは、使えないようですね。
Sub aaa001()
pm = 1
s = "c:\aaaa\bbbbb\cccc\dddd.txt"
For i = 1 To 7
p = InStr(pm, s, "\")
'------
If p = 0 Then
l = Len(s) - pm + 1
x = Mid(s, pm, l)
Exit For
End If
'------
MsgBox p
pm = p + 1
Next i
MsgBox x
End Sub
    • good
    • 0
この回答へのお礼

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。

お礼日時:2002/02/26 22:42

文字列分割コマンド「SPLIT」はいかがですか?



Dim strDataArrey() As String
Dim intDataCount As Integer

strDataArrey()=Split(FineName,"\")
intDataCount=UBound(strDataArrey())

これでstrDataArrey(intDataCount)に"test.txt"に入ります。
    • good
    • 0
この回答へのお礼

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。

お礼日時:2002/02/26 22:41

file system objectを使うともっと簡単です。


以下のように使います。

Dim Fname As String

Set fs = CreateObject("Scripting.FileSystemObject")
Fname = fs.GetFileName(Filename)
Set fs = Nothing

するとFnameにtest.txtが入ります。
    • good
    • 0

お疲れ様です。



ファイル名の後ろから"\"を探せばいいのではないでしょうか。 その時に「InStrRev」を使うと後ろから文字を探してくれます。

(例

  Dim パス As String
  Dim ファイル名 As String
  Dim 位置 As Long

  パス = "C:\My Documents\test\test.txt"

  位置 = InStrRev(パス, "\") '// 後ろから文字を検索
  ファイル名 = Right$(パス, Len(パス) - 位置) '// ファイル名が入る

(結果
  ファイル名 = "test.txt"

間違っていたらごめんなさい。

この回答への補足

すみません、VisualBasicのカテゴリに投稿してしまいましたが、実はExcel97のVBAを使っています。
そのためかどうかはわからないのですが、InStrRevを使うと「SubまたはFunctionが定義されていません」とエラー表示されてしまいます・・・。

補足日時:2002/02/20 12:15
    • good
    • 0
この回答へのお礼

皆さんありがとうございました。
プログラム一つ作るにも色々と頭を使うものなのですね。
これからもっと精進したいと思います。

お礼日時:2002/02/26 22:43

文字列の後ろから一文字ずつ取得して「\」の場所を検索してみては?



dim i as integer

for i = 1 to len(FileName)
if Mid(FileName,len(FileName) - i,1) = "\" then
exit
end if
Next

でiの値が最後の\の位置ですね。

(テスト未なのでコードそのままではエラーかもしれません。ご了承を)
    • good
    • 0
この回答へのお礼

ありがとうございます。

うまく動きました。
Mizyuさんの仰るとおり、ループで回す方法が良いのかもしれませんね。

InStrのような関数は存在ものなのでしょうか・・・。

お礼日時:2002/02/20 12:40

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