プロが教える店舗&オフィスのセキュリティ対策術

みなさんこんにちは^^

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

例)入力ファイル名称 → 変換 → 出力ファイル名称
  AAA.TXT AAA_001.TXT
BBB_001.TXT BBB_001.TXT

A 回答 (4件)

拡張子が.txtと決まっているのでしたら、


Left$(ファイル名,Len(ファイル名)-4)ではダメですか?

この回答への補足

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

補足日時:2001/11/20 14:08
    • good
    • 0

拡張子を認識するための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
    • good
    • 0
この回答へのお礼

御有難う御座りまスル!!

ムムム・・・・・・・・
何か非常に難しいですな
拙者の存ぜぬ関数なる物が
多分に表記されておる為か
理解に時が必要じゃw

拙者の現在の習熟能力では
把握出来ぬ故、暫しの時を
くだされ、勉学に勤しんで
みるとしよう・・・(笑)

VBって奥が深いですね!
まだまだ勉強が必要です。
皆さんホントにどうもです

o(o|o)/    (V)o\o(V)

お礼日時:2001/11/21 09:35

お疲れ様です。



ファイル名の後ろから"."を探せばいいのではないでしょうか。

(例

  Dim ファイル名 As String
  Dim 名前 As String
  Dim 拡張子 As String
  Dim 位置 As Long

  ファイル名 = "AIUEO.TXT"

  位置 = InStrRev(ファイル名, ".") '// 後ろから文字を検索

  名前 = Left$(ファイル名, 位置 - 1) '// 名前が入る
  拡張子 = Right$(ファイル名, Len(ファイル名) - 位置) '// 拡張子が入る

(結果
  名前 = "AIUEO"
  拡張子 = "TXT"

間違っていたらごめんなさい。
    • good
    • 0
この回答へのお礼

おはようございます
お礼が遅くなって申し訳ありません!

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

お礼日時:2001/11/21 09:27

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

じゃ、そゆことで。
    • good
    • 1
この回答へのお礼

ありがとうございます

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

お礼日時:2001/11/21 09:24

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