• 締切済み

文字列の切り取り

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

  • hell
  • お礼率16% (41/243)

みんなの回答

  • 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/17068)
回答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.ディレクトリがある場合は、一番後ろの"\"を探して、それより後ろを切り出す という手順でしょうか。 ちなみにファイル名に"\"が入っていたらダメですが。 では。

関連するQ&A

  • バイナリファイル中の日本語文字列の取り出し

    C++にて,バイナリファイル中から日本語の文字列を取り出す処理に苦心しています. 具体的にはPDFファイルのXMPの記述部のXMLに日本語が含まれる場合なのですが,日本語(この場合はUTF-8ですね)の部分が含まれる部分をfread()で読み出してchar[]型の配列に入れて,printfで表示する(漢字コードの変換処理はとりあえずnkf等でUTF-8→SJISに変換)と文字化けします. Javaで同じような処理をしたときは,String の変数にUTF-8で日本語の文字列が挿入され,その文字列を扱うことができたのですが,C++での扱いがわかりません. ご教授よろしくおねがいします.

  • 文字列

    C言語初心者です。プログラムについて質問なのですが、テキストファイルからある文字列(アルファベットではなく日本語)を探すにはどのようにすればいいのですか?

  • 文字列の組合わせについて

    仕事でこまっています。できるだけ早めに教えていただけると幸いです。 ABCDEFという文字列があるとします。この文字列の組合わせのパターン とそのパターンがいくつあるかしらべたいと思っています。 パターン化する際の条件としては ■重複する文字列のパターンは除く AABCDFとかABBDFDなどは除いてください ■文字数は1文字から6文字までです。 A、Bという組み合わせからABCDEFまでの中からの組合わせになります。 ■順番については、違っていても同一のものとする。 ABCでもBCAでも同じ組合わせということになります。 またこういう作業をする際にどうやって算出するのかも併せて教えて いただけると助かります。 以上よろしくお願いいたします。

  • 文字列のエスケープ処理

    VB6.0を使用してXMLファイルを作成しています。 XMLファイルの値に日本語文字列の場合のみ、エスケープ処理した文字列をセットしなければいけない場所があるのですが、 エスケープ処理した文字列とはどのように実現できるのでしょうか? XML自体があまり詳しくないので、質問内容がおかしいかも知れませんが、どなたかお教えください。 よろしくお願いします。

  • Excelの置換機能で文字列の部分削除

    Excelの置換機能を使って、あるパターンの文字列の特定の部分のみ削除すると言うことは可能でしょうか? <文字列例> AB01234-56789 のハイフン以下(-56789)のみを削除したい 対象の文字列パターンは、最初の2桁がアルファベットで固定、そのあと数字が5桁(ユニーク)続き、ハイフン、その後ユニークな文字列(数字5桁) さらに言うと、ファイル内にはこのパターン以外の文字列も存在している(ハイフン含む)ので、上記のパターンの文字列のみをマッチングさせ、ハイフン以下を削除したいのです。 やはり、VBAとかで正規表現使わないと無理ですかね?? 数万件の大量のデータの中から上記処理をせねばならず困っております・・ ご教授いただけると幸いです。

  • C++で文字列の右端から特定の文字までの文字列を

    C++で文字列の中から,文字列の右端から特定の文字までの文字列を取り出すというものを作りたいと思っています。 右端から○文字取り出す。といった感じのコードは書けるのですが、特定の文字まで、というのがどうもうまくいきません。こちら、良いアドバイスをいただける方がいましたらよろしくお願いします。 例:ファイル名を抽出 文字列\system32\notepad.exeからnotepad.exeの部分だけを取り出したい。というものです。 初めに見つけた\まで取り出す・・とやればよいのでしょうが、その方法が今ひとつ良くわからないので、どうかご助力お願いいたします。

  • マウスで選択した文字列を別の文字列に変える

    「TextBox1.Text」というテキストボックスに適当に文字列を入力して、 マウスで ある部分の文字だけを選択して、 その文字を別の文字を置き換える処理を実行するプログラムを作りたいです。 抽象的すぎるかもしれませんが、 どなたか教えていただきたいです。 よろしくお願いします。

  • .Netでの、文字列の中の「

    VB.Netで、下記文字列をテキストファイルに追記してるのですが、「印刷」の文字が化けてしまいます。 日本語を送る場合には、何か記述方法がことなるのでしょうか? (日本語がなければ、うまくいくのですが・・・) ご存知の方がいらっしゃいましたら、ご教授下さい。 宜しくお願いします。 送りたい文字列:  status = "印刷 : Alt+P" 現在の記述:  Dim wka As String  wka = "status = '印刷 : Alt+P';"

  • 文字列を抜き出してきてファイルを生成

    当方はC++を用いております。文字列の部分列にアクセスして、 それを新たに文字列としたいのですが、可能でしょうか? 具体的には、英数字、空白のみからなるレコードがあったとします。 例: 01 po 0979876 7行目から10行目までをとりだします。 0979 これをひとつの文字列とします。 なお、目的は、0979という名のファイルを作ることです。

  • 【C言語】文字列による処理の分岐について

    いつも丁寧な解説拝見しております。 C言語について質問させて頂きます。 シリアル通信によって受信した1バイトの文字列があるとします。 この文字列のパターンよって処理の分岐をさせたい場合、コードはどのように書けば良いのでしょうか。 より具体的に申しますと、 →文字列パターン1の場合、関数1を呼び出す。 →文字列パターン2の場合、関数2を呼び出す。 →文字列パターン3の場合、関数3を呼び出す。・・・・・・ と、100パターンほどの文字列があり、それぞれにおいて異なる関数を呼び出したいと考えております。私の理解は以下に示す通りなのですが、どうも正しい処理が分らないでいます。 ・受信した文字列がどのパターンなのかを判断するために、strcmp関数で比較を行う。 ・多分岐なので、switch case文かelse if文を用いる。 この場合、条件式の中でstrcmp関数による比較を行えば良いのでしょうか。簡単にコードを示して頂ければ幸いです。C言語初心者なので理解に間違いがあるかもしれませんが、どうぞよろしくお願い致します。