• ベストアンサー

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

  • VB.NETでテキストファイルからHTMLファイルを動的に生成したいの

    VB.NETでテキストファイルからHTMLファイルを動的に生成したいのですがどのようにやればできるかヒントをいただけないでしょうか? とあるフォルダに下記のようなファイルがあるとします。 20100101AAA.txt 20091008AAA.txt 20100202AAA.txt 20070707AAA.txt 20100412AAA.txt また、ファイルの中身は <div id = 'AAA'>それぞれのファイルの内容</div> <div id = 'BBB'>それぞれのファイルの内容</div> です。 まず、ファイル名から日付を解析して新しい順番に並べるアルゴリズムを考えたいのですがどのようにしたらいいか困っています。 また、並び変えたファイルを動的に合成して一つのHTMLを作りたいのですがどのようにしたらいいのでしょうか? 詳しい方よろしくお願いします。

  • VB教えてくださいm(__)m

    VBでプログラミングしてるのですが、ある変数”A”には(パス+ファイル名)が入っているのですが、この中からファイル名だけを取得するにはどうすればよいのでしょうか? (d:\aaa\bbb\ccc\ddd.txt → ddd.txt)

  • Cシェルでテキストファイルの行削除方法

    現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。

  • Excelで、大量のファイルをテキストファイルにまとめて変換する方法はありますか?

     大量のExcelファイルを自動的にすべてテキストファイルに変換する方法はありますか? aaa.xls, bbb.xls, ccc.xls, ... zzz.xls         ↓ aaa.txt, bbb.txt, ccc.txt, ... zzz.txt と行った具合にです。  対象となるExcelは複数のワークシートからなりますが、いずれも変換したいシートをアクティブにした状態で保存してあります。 (でも、そうでない場合にも、例えば各ファイルの1枚目のシートを選んでテキスト形式で保存する方法があれば、それも教えていただけるとなお助かります。)  よろしくお願いします。

  • 複数のテキストファイルを1つにまとめる

    同一フォルダ内にある複数のテキストファイルの内容を1つにまとめる方法を探しております。 例えば、 a.txt, b.txt, c.txt が同一フォルダにあり、 それぞれの内容が AAA BBB CCC である時に、これらをまとめて matome.txtとして、その内容が AAA BBB CCC となるようなプログラムを書きたいのですが、どの様な方法が考えられますでしょうか。 上の例では3つのテキストファイルですが、実際に処理したいファイルは数百個になる為、一つ一つファイル名を入力する作業が大変で困っております。 同一フォルダ内のファイルをファイル名順に一度に読み込み、まとめる方法がありましたらお教え下さい。

  • ファイルから検索条件を読み込んでGREPを実行したい

    INPUTファイルを以下のように作成します。 >input.txt aaa bbb ccc ・ ・ ・ 特定のディレクトリの複数ファイルに対して grepを順にaaa,bbb,ccc・・・ というようにinput.txtから読み込んで実行し、結果をそれぞれaaa.txt,bbb.txt,ccc.txt・・・ へ出力したいのですが、方法がわからなくて困っています。 どなたかご教授お願いいたします。

    • ベストアンサー
    • Perl
  • Accessのデータをテキストファイルで出力する方法を教えてください。

    Accessのデータをテキストファイルで出力する方法を教えてください。 クエリで抽出したデータをテキストファイルに出力したいのですが、下記のような記述では""や,で区切られてしまいます。 DoCmd.TransferText acExportDelim, "", "クエリ名", "出力ファイル.txt" フィールドごとに改行して出力する方法はないでしょうか? <クエリ結果> フィールド1  フィールド2  フィールド3 aaa      bbb      ccc <出力テキストファイル> aaa bbb ccc

  • バイナリファイルのdiff方法について

    お世話になります。 Linuxのdiffコマンドについてご教示頂けないでしょうか? バイナリファイルの差分をヘキサで表示したいのですが、 (具体的な出力結果のイメージとしては以下の(1)~(3)でできるdiff.txt) xargsやパイプ等を利用して標準出力だけで実現できればと 考えております。(1コマンドで…) 宜しくお願い申し上げます。 ■出力イメージ (1)od -x AAA.bin > AAA_od.bin (2)od -x BBB.bin > BBB_od.bin (3)diff AAA_od.bin BBB_od.bin > diff.txt ■トライしてみてうまくいかなかった例 (例1)diff < ( od -x AAA.bin ) <(od -x BBB.bin ) (例2)xargs -t diff od -x AAA.bin od -x BBB.bin (例3)od -x AAA.bin| diff <od -x BBB.bin

  • Excel VBA サブディレクトリの取得について

    Excel VBA についての質問です。 私は、VBAの初心者です。 フォルダ選択ダイアログを開き、あるフォルダを選択させます。 選択したフォルダ配下のファイルとサブフォルダにあるファイル一覧とそのファイルのパス取得したいです。 【例】D:\TEMP\AAA フォルダを選択 D:\TEMP\AAA  D:\TEMP\AAA\BBB\CCC.txt D:\TEMP\AAA\BBB\DDD\EEE.txt D:\TEMP\AAA\BBB\DDD\FFF.txt GGG.txt が存在する。 まず、フォルダAAAまで選択されたら、 以下の結果がエクセルに出力したいです。 BBB         CCC.txt BBB\DDD        EEE.txt BBB\DDD        FFF.txt               GGG.txt うまく伝えないかもしれないですが、ご教授お願いいたします。

  • perlを使ったファイルの入出力について

    perl 初心者です。 perl を使ってデータ整理を試みていますが、方法がわからなくて困っています。 やりたい操作は、 1、ディレクトリ内にある特定の拡張子をもつすべてのデータファイルを読み込む 2、データソート 3、データファイル名を変更せずに、ソートしたデータを出力する 例 ディレクトリに以下のデータファイルがあるとします aaa.data bbb.data ccc.data : zzz.data これらのデータファイルをすべて読み込み、中身を整理した後に aaa.txt bbb.txt ccc.txt : zzz.txt となるように、それぞれのデータの名前を変更せずに出力したいと思っています。 スクリプトのサンプルなんかがあればありがたいです。

    • ベストアンサー
    • Perl