• ベストアンサー

VBでテキスト形式のファイル名称から拡張子を取りたい

みなさんこんにちは^^ ちょっと困っています。 VB6でコーディングを行っていますが 取得したファイル名称を一旦ワークに落として それを出力ファイル名に利用したいのですが、 拡張子が邪魔をして上手く行きません。 何か拡張子を取るような方法があれば教えて頂きたいのですが! 例)入力ファイル名称 → 変換 → 出力ファイル名称   AAA.TXT AAA_001.TXT BBB_001.TXT BBB_001.TXT

質問者が選んだベストアンサー

  • ベストアンサー
  • osaosa42
  • ベストアンサー率60% (20/33)
回答No.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 じゃ、そゆことで。

rukaandkaito
質問者

お礼

ありがとうございます そうか、FileSystemObjectか・・・ 存在を忘れていました(笑) 参考になりました。早速使わせていただきますw

その他の回答 (3)

  • josyo_m
  • ベストアンサー率63% (28/44)
回答No.3

お疲れ様です。 ファイル名の後ろから"."を探せばいいのではないでしょうか。 (例   Dim ファイル名 As String   Dim 名前 As String   Dim 拡張子 As String   Dim 位置 As Long   ファイル名 = "AIUEO.TXT"   位置 = InStrRev(ファイル名, ".") '// 後ろから文字を検索   名前 = Left$(ファイル名, 位置 - 1) '// 名前が入る   拡張子 = Right$(ファイル名, Len(ファイル名) - 位置) '// 拡張子が入る (結果   名前 = "AIUEO"   拡張子 = "TXT" 間違っていたらごめんなさい。

rukaandkaito
質問者

お礼

おはようございます お礼が遅くなって申し訳ありません! InStrRevっていう関数があるんですねw 知らなかったな~^^ 私はLen関数で文字列長を取得してから、Loopで回してました(笑) 勉強になりました!

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

拡張子を認識するための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

rukaandkaito
質問者

お礼

御有難う御座りまスル!! ムムム・・・・・・・・ 何か非常に難しいですな 拙者の存ぜぬ関数なる物が 多分に表記されておる為か 理解に時が必要じゃw 拙者の現在の習熟能力では 把握出来ぬ故、暫しの時を くだされ、勉学に勤しんで みるとしよう・・・(笑) VBって奥が深いですね! まだまだ勉強が必要です。 皆さんホントにどうもです o(o|o)/    (V)o\o(V)

noname#1296
noname#1296
回答No.1

拡張子が.txtと決まっているのでしたら、 Left$(ファイル名,Len(ファイル名)-4)ではダメですか?

rukaandkaito
質問者

補足

たしかにCHOROLYNさんのおっしゃる方法で出来るのですが 今後は「.txt」以外のファイルでも対応していきたいので 拡張子を取るような関数でもあればと思って質問しました。 拡張子って3文字以外にもありますよね! たとえば「.html」だとか「.il」だとか・・・ 後ろから一文字ずつ検索して、ピリオドが出たら切るって方法も あるのですが・・・(めんどい^^)

関連するQ&A