• 締切済み

文字列の切り取り

任意の文字列String型からある条件を満たした一部分のみ切り出したい .jspの拡張子がついたファイル名のみ取り出す ディレクトリが書いてある場合と、コメントが書いてある場合の2パターン存在する 例外としてファイル名のみ記載されている部分がある(当然ここは問題なし。) 条件 .jspは文字列のどこにあるかは不明 一つの文字列に.jspは複数存在しない ファイル名は統一されていない(パターンなど統一性はない) ファイル名の前は・,/,",日本語がついている場合がある .jspの後は;,);,日本語がついている場合がある これをクリアして xxxxxx.jspを抽出したいのですが、 どんなやりかたがあるのでしょうか? 抽象的ですいませんが宜しくお願いします。

みんなの回答

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

ANo.#3の修正です。 投稿したら、半角の中点が全角になってしまいました。1行追加して下さい。   strBad = "/\<>*?|:;,・" & Chr(&H22)   strBad = StrConv(strBad, vbNarrow)  '追加します 最初のstrBad =・・・ の『・』を半角にしてもらえれば、追加の1行は不要です。注意力が足りませんでした。

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

素直に、質問通りの答えを出すようにしてみましたが、望むものでしょうか。 質問だと、全角文字はファイル名になり得ないと解釈しました。日本語文章の中から、条件に見合った半角のファイル名を切り出すことができるはずです。 ユーザー定義関数です。任意の文字列を引数にします。 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

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

下記のようなフルパスのストリングの中からファイル名を取り出す 事ではないのですか。(フォームモジュールに記述しました。) 'のついたコメントのあり方、セパレーターが¥以外に/や中点 やコンマが有る状態(混在している?)が良く理解できません ので、解の一部分の参考になればと記します。 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に切り出して上記を 考える。

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 ファイル名が文字列のどこにあるかによります。 もし文字列の真ん中にあるなら、ファイル名の先頭がどこかが分からないと取り出しようがありません。 もし、必ず先頭にファイル名(ディレクトリ名込みでも可)があるなら、 1.先頭から4文字ずつ".jsp"と比較する 2.見つかったら、先頭から".jsp"までを切り出す(後ろを捨てる) 3.ディレクトリがある場合は、一番後ろの"\"を探して、それより後ろを切り出す という手順でしょうか。 ちなみにファイル名に"\"が入っていたらダメですが。 では。