文字列の一部を取得するには?

解決


うえ  2005-04-29 04:00:47  No: 121368

例えば、パスの文字列があったとして、"C:\visualBasic\mojiretu\0001.jpg"からファイル名の一部"0001"を取り出したいのですがどうしたらよいですか?
また、それにインクリメントして"0002"という文字列をつくりたいのですが。


ググ  2005-04-29 04:14:20  No: 121369

http://www.google.co.jp/search?hl=ja&q=vb+%E6%96%87%E5%AD%97%E5%88%97+%E5%88%87%E3%82%8A%E5%87%BA%E3%81%99&lr=


もろい  2005-04-29 19:24:20  No: 121370

自分は初心者なので正しいかどうかはわかりません。
勉強になると思ったので作ってみました。
おかしな点やここはこうした方が良い等ありましたら指摘してもらえるとうれしいです。

Private Sub Command1_Click()
Debug.Print hoge("c:\test\0001.test")
End Sub

Private Function hoge(filepath As String) As String
Dim strPath As String
Dim strTemp() As String
Dim Temp As String
Dim lngTemp As Long
Dim lnglen As Long
Dim zero As String

    On Error GoTo moge
    
        '\で区切る
        strTemp = Split(filepath, "\")
        '.で区切る
        strTemp = Split(strTemp(UBound(strTemp)), ".")
        'ファイル名(拡張子抜き)の長さ
        lnglen = Len(strTemp(0))
            '数字を足す
            lngTemp = CLng(strTemp(0)) + 1
            '0を数
            Do Until lnglen = Len(zero)
                zero = zero & "0"
            Loop
            '0追加
            strTemp(0) = Right(zero & CStr(lngTemp), lnglen)
            '拡張子結合
            Temp = Join(strTemp, ".")
            'パス分解
            strTemp = Split(filepath, "\")
                'ファイル名部分を変更
                strTemp(UBound(strTemp)) = Temp
             '結合し戻す
             hoge = Join(strTemp, "\")
    Exit Function
moge:
    
End Function


たけ  2005-04-29 19:39:26  No: 121371

>lnglen = Len(strTemp(0))
>'数字を足す
>lngTemp = CLng(strTemp(0)) + 1
>'0を数
>Do Until lnglen = Len(zero)
>  zero = zero & "0"
>Loop
>'0追加
>strTemp(0) = Right(zero & CStr(lngTemp), lnglen)

ここは数字4桁と決まっているなら
strTemp(0)=Format(Clng(strTemp(0)+1&,"0000")
とした方が簡単かもしれませんね


fso  2005-04-30 01:20:49  No: 121372

> "C:\visualBasic\mojiretu\0001.jpg"からファイル名の一部"0001"
> を取り出したいのですがどうしたらよいですか?

ファイル名の一部"0001"が、ファイルのベース名 (ファイル拡張子を除いたもの) なら、以下が簡単ですね。
http://www.microsoft.com/JAPAN/developer/library/script56/jsmthgetbasename.htm


LESIA  2005-04-30 07:32:29  No: 121373

>strTemp(0) = Right(zero & CStr(lngTemp), lnglen)
この場合は、"9999"の次は"0000"になり

> strTemp(0)=Format(Clng(strTemp(0)+1&,"0000")
この場合は、"9999"の次は"10000"になるので注意が必要です。

ファイルシステムオブジェクトを使うならこんな感じです。

Private Function IncrementFileName(strFileName As String) A String
   Dim fso As Object
   Dim strFolderName As String 'フォルダ名
   Dim strBaseName As String '拡張子を除いたファイル名
   Dim strExtensionName As String '拡張子

   Set fso = CreateObject("Scripting.FileSystemObject")

   strFolderName = fso.GetParentFolderName(strFileName)
   strBaseName = fso.GetBaseName(strFileName)
   strExtensionName = fso.GetExtensionName(strFileName)

   '9999の次は10000になる
   IncrementFileName = strFolderName & "\" & _ 
                       Format$(CLng(strBaseName) + 1, "0000") & "." & _
                       strExtensionName

   Set fso = Nothing
End Function


うえ  2005-05-01 04:09:18  No: 121374

皆さんありがとうございました。
使わせていただきます


うえ  2005-05-01 04:09:19  No: 121375

皆さんありがとうございました。
使わせていただきます


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加