- ベストアンサー
VBでテキスト形式のファイル名称から拡張子を取りたい
みなさんこんにちは^^ ちょっと困っています。 VB6でコーディングを行っていますが 取得したファイル名称を一旦ワークに落として それを出力ファイル名に利用したいのですが、 拡張子が邪魔をして上手く行きません。 何か拡張子を取るような方法があれば教えて頂きたいのですが! 例)入力ファイル名称 → 変換 → 出力ファイル名称 AAA.TXT AAA_001.TXT BBB_001.TXT BBB_001.TXT
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
FileSystemObjectを使ったらどうですか? 拡張子&ファイル名を取得する方法を書いときます 参照設定で「Microsoft Scripting Runtime」を参照します。 '拡張子のみ取得 Function hoge1(strPath As String) As String Dim fso As New FileSystemObject hoge1=fso.GetExtensionName(strPath) End Sub 'ファイル名のみ取得 Function hoge2(strPath As String) As String Dim fso As New FileSystemObject hoge2=fso.GetFileName(strPath) End Sub じゃ、そゆことで。
その他の回答 (3)
- josyo_m
- ベストアンサー率63% (28/44)
お疲れ様です。 ファイル名の後ろから"."を探せばいいのではないでしょうか。 (例 Dim ファイル名 As String Dim 名前 As String Dim 拡張子 As String Dim 位置 As Long ファイル名 = "AIUEO.TXT" 位置 = InStrRev(ファイル名, ".") '// 後ろから文字を検索 名前 = Left$(ファイル名, 位置 - 1) '// 名前が入る 拡張子 = Right$(ファイル名, Len(ファイル名) - 位置) '// 拡張子が入る (結果 名前 = "AIUEO" 拡張子 = "TXT" 間違っていたらごめんなさい。
お礼
おはようございます お礼が遅くなって申し訳ありません! InStrRevっていう関数があるんですねw 知らなかったな~^^ 私はLen関数で文字列長を取得してから、Loopで回してました(笑) 勉強になりました!
- TAGOSAKU7
- ベストアンサー率65% (276/422)
拡張子を認識するためのAPI関数があります。 ファイルのフルパスでもOK '拡張子のピリオドを<<vbNullChar>>に変換するAPI関数 Private Declare Sub PathRemoveExtension Lib "shlwapi.dll" Alias "PathRemoveExtensionA" (ByVal pszPath As String) Sub Main() Const FILE1 As String = "c:\test\index.html" Const FILE2 As String = "c:\test\index.html.doc.txt.wav" Const FILE3 As String = "index" Const FILE4 As String = "index.html.doc.txt.wav.ウィルス" Dim wkStr1 As String Dim wkStr2 As String Call GetGetGet(FILE1, wkStr1, wkStr2) MsgBox _ "ファイル名:[" & FILE1 & "]" & vbNewLine & _ "ファイル :[" & wkStr1 & "]" & vbNewLine & _ "拡張子 :[" & wkStr2 & "]" Call GetGetGet(FILE2, wkStr1, wkStr2) MsgBox _ "ファイル名:[" & FILE2 & "]" & vbNewLine & _ "ファイル :[" & wkStr1 & "]" & vbNewLine & _ "拡張子 :[" & wkStr2 & "]" Call GetGetGet(FILE3, wkStr1, wkStr2) MsgBox _ "ファイル名:[" & FILE3 & "]" & vbNewLine & _ "ファイル :[" & wkStr1 & "]" & vbNewLine & _ "拡張子 :[" & wkStr2 & "]" Call GetGetGet(FILE4, wkStr1, wkStr2) MsgBox _ "ファイル名:[" & FILE4 & "]" & vbNewLine & _ "ファイル :[" & wkStr1 & "]" & vbNewLine & _ "拡張子 :[" & wkStr2 & "]" Exit Sub End Sub Function GetGetGet(ByVal inFileName As String, ByRef outFileName As String, ByRef outKakutyousi As String) Dim valWork As Variant '戻りパラメータ初期化 outFileName = "" outKakutyousi = "" '拡張子を<<vbNullChar>>に変換 Call PathRemoveExtension(inFileName) 'vbNullCharで切り分ける valWork = Split(inFileName, vbNullChar) '配列の先頭がファイル名 outFileName = valWork(0) '拡張子が存在してない時は、以下を通らない If UBound(valWork) > 0 Then outKakutyousi = valWork(1) End If End Function
お礼
御有難う御座りまスル!! ムムム・・・・・・・・ 何か非常に難しいですな 拙者の存ぜぬ関数なる物が 多分に表記されておる為か 理解に時が必要じゃw 拙者の現在の習熟能力では 把握出来ぬ故、暫しの時を くだされ、勉学に勤しんで みるとしよう・・・(笑) VBって奥が深いですね! まだまだ勉強が必要です。 皆さんホントにどうもです o(o|o)/ (V)o\o(V)
拡張子が.txtと決まっているのでしたら、 Left$(ファイル名,Len(ファイル名)-4)ではダメですか?
補足
たしかにCHOROLYNさんのおっしゃる方法で出来るのですが 今後は「.txt」以外のファイルでも対応していきたいので 拡張子を取るような関数でもあればと思って質問しました。 拡張子って3文字以外にもありますよね! たとえば「.html」だとか「.il」だとか・・・ 後ろから一文字ずつ検索して、ピリオドが出たら切るって方法も あるのですが・・・(めんどい^^)
お礼
ありがとうございます そうか、FileSystemObjectか・・・ 存在を忘れていました(笑) 参考になりました。早速使わせていただきますw