VBSを利用して、文字列から一部分だけを抜き出す方法

このQ&Aのポイント
  • VBSを使用して、csv形式のファイルから特定の文字列を抜き出す方法について説明します。
  • 具体的には、「あああ」が含まれる文字列の中から、「ccc」と「OS=*****」を抜き出して、csvまたはtxtに出力します。
  • VBSのプログラムを組むことで、この処理を実現することができます。
回答を見る
  • ベストアンサー

VBSを利用して、文字列から一部分だけを抜き出す

VBSを利用して、文字列から一部分だけを抜き出す こんにちわ VBSを利用して、csv形式のファイルを読み込んで文字列の一部を抜き出す 処理を行いたいと思っております。 具体的には、csv形式のファイルをtxt形式に置き換えると "aaaa","bbbb","ccc","ddd","あああeee","OS=abcde" というような形で開きます。 ※a~eの文字数は固定ではありません。 このような場合、文字列に「あああ」が含まれていたら、 「ccc」と「OS=*****」をcsvまたはtxtに出力する という処理を行おうとしております。 どのようにプログラムを組めば良いでしょうか。 お手数ですが、ご教授願えれば、助かります。よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

正規表現を使って処理します。 Function GetElements(Txt) Dim Finder  '検出用正規表現 '検出用正規表現の作成 Set Finder = CreateObject("VBScript.RegExp") Finder.Global = True Finder.IgnoreCase = True Finder.Pattern = "\"".*?あああ.*?\""" '検出用文字列が含まれるかどうかをチェック If Finder.Test(Txt) Then     Dim Selecter '抽出用正規表現     Dim Matchs  '一致した部分の集合     Dim Match   '一致した部分     Dim Index   '個数     '抽出用正規表現の作成     Set Selecter = CreateObject("VBScript.RegExp")     Selecter.Global = True     Selecter.IgnoreCase = True     Selecter.Pattern = "\""ccc\""|\""OS=.*?\"""     Index = -1     ReDim Result(0)     '抽出したい部分を抜き出す     Set Matchs = Selecter.Execute(Txt)     For Each Match In Matchs         '配列を拡張して一致した部分を記録する         Index = Index + 1         ReDim Preserve Result(Index)         Result(Index) = Match.Value     Next     '抽出したい部分があれば戻り値に設定する     If Index >= 0 Then GetElements = Result End If End Function 使用方法 Elements = GetElements(TextLine) If IsArray(Elements) Then     For Each Node In Elements         Nodeを出力     Next End If 尚、正規表現オブジェクトを都度作成するのは面倒だと思う場合は 外側で変数を定義して、初期処理でセットアップしてもよいでしょう。

tenshin4815
質問者

お礼

ご回答ありがとうございます。 返答が遅くなり、申し訳ありません。 少し編集を行い、こちらの環境でもうまくいくことを確認しました。 ありがとうございます。

その他の回答 (1)

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

VBSにはInstr関数がある。 それを使えば良いのでは。 いくらか質問者がやってみての質問ですか。 ーー 例データ "aaaa","bbbb","ccc","ddd","あああeee","OS=abcde" "aaaa","bbbb","fff","ddd","ああいeee","OS="efghi" "aaaa","bbbb","sss","ddd","あああggg","OS=abcab" "aaaa","bbbb","fff","ddd","ああいeee","OS="efghi" "aaaa","bbbb","ccc","ddd","eあああqqq","OS=abcef" "aaaa","bbbb","fff","ddd","ああいeee","OS="efghi" 実行結果 ccc,OS=abcde sss,OS=abcab ccc,OS=abcef ーーー コード例 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objTextFile = objFSO.OpenTextFile("C:\Documents and Settings\xxxx\My Documents\データ例.txt") Set objTextFileo = objFSO.OpenTextFile("C:\Documents and Settings\xxxx\My Documents\データ例X.txt", 2,true) Do While objTextFile.AtEndOfStream <> True x=objtextfile.readline MsgBox x y = Replace(x, """", "") MsgBox y p = InStr(y, "あああ") If p <> 0 Then MsgBox "あああ が含まれている" s = Split(y, ",") objTextFileo.writeline (s(2) & "," & s(5)) Else MsgBox "あああ が含まれていない" End If loop objTextFile.Close objTextFileo.Close

tenshin4815
質問者

お礼

こちらの環境でもいくらかテストはしたのですが、 詳細を記載することができない状態でしたので、概要のみの投稿となり、 分かりにくかったかもしれません。 ご回答いただき、ありがとうございました。参考にさせていただきます。

関連するQ&A

  • VBSを利用して、ファイル名を取得

    VBSを利用して、ファイル名を取得 はじめまして VBSを利用して、ファイルのフルパスを取得したいと思っております。 具体的には、フォルダ内のファイルを1ファイルずつ取得するようなプログラムを 作成したいと思っております。 C:\TEST \2010 \aaa.csv C:\TEST \2010 \bbb.csv C:\TEST \2009 \ccc.csv C:\TEST \2008 \ddd.csv C:\TEST \2008 \eee.csv フルパスを取得したいのですが、どのようにしたら良いでしょうか。 最終的には、上記の読み込んだファイルごとにファイルの中身を1行ずつ確認して、 特定の文字が含まれているか確認をするようなスクリプトにしようと思っております。 そのため、objFS.OpenTextFile("取得フルパス",ForReading)のようにして 取得したフルパスごとに読み込みをしようと思っております。 どなたか、お手数ではございますが、ご教授願います。

  • VBSで文字列の置換

    VBSまったくの初心者で、「そんなもんWebで調べろ」とお叱りを受けるのを承知でお聞きします。 C:¥置換¥あああ.txt のテキストファイル内にある文字列"ABC"を"DEF"に置換するVBSはどのように記述すればよいでしょうか?。 よろしくお願いいたします。

  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • テキストファイルの任意の文字以降の文字列を削除したい

    test.txt AAA+あいうえお BBB+かきくけこ CCC+さしすせそ DDD+たちつてと EEE+なにぬねの 上記(test.txt)のようなテキストファイルから、各行の+以降の文字列を削除して、 以下(result.txt)のようなテキストファイルを生成させるプログラムを作成させたいです。 result.txt AAA BBB CCC DDD EEE このようなプログラムを作るにはどのようにすればよいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • awkを使って文字列処理の問題

    awkで以下のことをやりたいですが、 a.txtの中身は aaaa bbbb cccc の三つのレコードがあります。 b.txtの中身は 東京a 埼玉b 千葉c 東京d になってます。 ファイルa.txtのみっつのレコードのを読み込んできて、b.txtに対して検索して、東京 という文字列があれば、そのレコードは、aaaaに置き換えて、あるファイルに出力する ようなスクリプトを書きたいです。 どう書けば、いいですか?教えていただけませんか?

  • Rubyで文字列の抽出

    Rubyで質問があります。 AAAA;BBBB、CCCCC=DDDDD という文字列が存在したときに、 AAAAとBBBBとCCCCCとDDDDDの文字列を取得したいです。 splitは、特定の区切り文字しか対応していないようなので、複数の区切り文字を指定出来る方法はありませんでしょうか? 確かにsplitで地道に処理するより もうちょっと効率的な方法はないか知りたいです。

  • ファイルの最後に文字列挿入

    複数テキストファイルの最後に、固定の文字列(1行)を追加したいのですが、batファイルで行う場合は、どのようにすれば良いのでしょうか? 例) AAAA.txt BBBB.txt CCCC.txt (ファイルの中身はそれぞれ異なるが拡張子は同じ)3つのファイルの最後に、 XXXXX=YYYY+ZZZZZ という1行を追加したい。 お手数をおかけします。よろしくお願いいたします。

  • UNIXで文字列分割

    UNIXでマルチバイトの文字列で分割したいです。 例) aaaa bbbb cccc dddd eeee ffff ↓ [bbbb]で分割 [1]aaaa [2] cccc dddd eeee ffff できればawkで処理をしたいと考えています。

  • PowerShellでの文字列置換ができない

    PowerShellで「\」を含む文字列が変換できません。たぶん正規表現とかで問題があると思うのですが・・・ あとテキストファイル内の文字列置換で指定された文字列がある行があった場合、その行を削除するといったことは出来るのでしょうか? 詳しい方いらっしゃいましたらよろしくお願いいたします。 <テキスト> BBBB AAAA NNNN AAAAあああA NNNN AAAA <検索文字列> あああ ※行内に「あああ」をみつけたらその行を丸ごと削除したい・・・

  • 文字列からの切り取り

    11111,AAAA,hogehoge,abcde 上記のような文字列から1個目のカンマから2個目のカンマまで(AAAA)を 抜き出したいのですがどういう方法がありますでしょうか? できればソース付きでご教授ください。 よろしくお願いします。

専門家に質問してみよう