最新閲覧日:

任意の文字列String型からある条件を満たした一部分のみ切り出したい

.jspの拡張子がついたファイル名のみ取り出す
ディレクトリが書いてある場合と、コメントが書いてある場合の2パターン存在する
例外としてファイル名のみ記載されている部分がある(当然ここは問題なし。)

条件
.jspは文字列のどこにあるかは不明
一つの文字列に.jspは複数存在しない
ファイル名は統一されていない(パターンなど統一性はない)
ファイル名の前は・,/,",日本語がついている場合がある
.jspの後は;,);,日本語がついている場合がある

これをクリアして
xxxxxx.jspを抽出したいのですが、
どんなやりかたがあるのでしょうか?
抽象的ですいませんが宜しくお願いします。

A 回答 (4件)

ANo.#3の修正です。


投稿したら、半角の中点が全角になってしまいました。1行追加して下さい。

  strBad = "/\<>*?|:;,・" & Chr(&H22)
  strBad = StrConv(strBad, vbNarrow)  '追加します

最初のstrBad =・・・ の『・』を半角にしてもらえれば、追加の1行は不要です。注意力が足りませんでした。
    • good
    • 0

素直に、質問通りの答えを出すようにしてみましたが、望むものでしょうか。


質問だと、全角文字はファイル名になり得ないと解釈しました。日本語文章の中から、条件に見合った半角のファイル名を切り出すことができるはずです。

ユーザー定義関数です。任意の文字列を引数にします。
MyFileName = fncCutFileName(任意の文字列) とします。
条件に合うファイル名が切り出せない場合は『なし』が帰ってきます。
VB6がないため、Excel2000VBAで作成しています。多分同じでしょう。

Public Function fncCutFileName(Moji As String)
  Const strSch = ".jsp" '検索する拡張子
  Dim strBad As String 'ファイル名に使えない文字と質問にある文字
  Dim iniMoji As String '検索対象文字の初期値
  Dim pot As Integer '.jspの検索位置
  Dim L As Integer 'カウンタ

  strBad = "/\<>*?|:;,・" & Chr(&H22)

  iniMoji = Moji
  Moji = StrConv(iniMoji, vbLowerCase) '小文字にしてしまう

  pot = InStr(Moji, strSch) '.jspを探す
  If pot > 0 Then
    Moji = Left(iniMoji, pot + 3) '.jspより後ろをカット
    'ファイル名に使えない文字と質問にある文字を探して分離する
    For L = pot - 1 To 1 Step -1
      If InStr(strBad, Mid(Moji, L, 1)) > 0 Then
        Moji = Mid(Moji, L + 1): Exit For
      End If
    Next
    '日本語(全角文字)があればファイル名としない
    For L = Len(Moji) - 5 To 1 Step -1
      If Not (Abs(Asc(Mid(Moji, L, 1))) < 256) Then
        Moji = Mid(Moji, L + 1): Exit For
      End If
    Next

    fncCutFileName = Moji
  Else
    fncCutFileName = "なし"
  End If
End Function
    • good
    • 0

下記のようなフルパスのストリングの中からファイル名を取り出す


事ではないのですか。(フォームモジュールに記述しました。)
'のついたコメントのあり方、セパレーターが¥以外に/や中点
やコンマが有る状態(混在している?)が良く理解できません
ので、解の一部分の参考になればと記します。
Private Sub Form_DblClick()
a = "c:\ccc\aaaa\bbbbb\cccc.jsp"
s = 1
For i = 1 To 20 '深さを20までと仮定
p = InStr(s, a, "\")
MsgBox p
If p = 0 Then GoTo p01
q = p '1回前として保存
s = p + 1 '次ぎの文字から探索
Next i
'------
p01:
l = Len(a) - q
MsgBox l
FileName = Mid(a, q + 1, l)
MsgBox FileName 'cccc.jpgを取り出した確認
End Sub
セパレーター記号を探索するのと並行して、上記ではlen(a)とした部分をjspの位置を探索しそれで置きかえれば、質問の題意に沿うようになると思う。
jspから次ぎのjspまでをaに切り出して上記を
考える。
    • good
    • 0

こんにちは。

maruru01です。
ファイル名が文字列のどこにあるかによります。
もし文字列の真ん中にあるなら、ファイル名の先頭がどこかが分からないと取り出しようがありません。
もし、必ず先頭にファイル名(ディレクトリ名込みでも可)があるなら、

1.先頭から4文字ずつ".jsp"と比較する
2.見つかったら、先頭から".jsp"までを切り出す(後ろを捨てる)
3.ディレクトリがある場合は、一番後ろの"\"を探して、それより後ろを切り出す

という手順でしょうか。
ちなみにファイル名に"\"が入っていたらダメですが。
では。
    • good
    • 0

このQ&Aに関連する最新のQ&A

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

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ