• ベストアンサー
  • すぐに回答を!

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

  • 質問No.5973058
  • 閲覧数1012
  • ありがとう数13
  • 回答数2

お礼率 80% (12/15)

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

こんにちわ
VBSを利用して、csv形式のファイルを読み込んで文字列の一部を抜き出す
処理を行いたいと思っております。

具体的には、csv形式のファイルをtxt形式に置き換えると
"aaaa","bbbb","ccc","ddd","あああeee","OS=abcde"
というような形で開きます。

※a~eの文字数は固定ではありません。

このような場合、文字列に「あああ」が含まれていたら、
「ccc」と「OS=*****」をcsvまたはtxtに出力する
という処理を行おうとしております。

どのようにプログラムを組めば良いでしょうか。

お手数ですが、ご教授願えれば、助かります。よろしくお願い致します。

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

  • 回答No.1
  • ベストアンサー

ベストアンサー率 55% (773/1383)

正規表現を使って処理します。

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

お礼率 80% (12/15)

ご回答ありがとうございます。
返答が遅くなり、申し訳ありません。

少し編集を行い、こちらの環境でもうまくいくことを確認しました。

ありがとうございます。
投稿日時:2010/06/22 14:30

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 27% (4518/16137)

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

お礼率 80% (12/15)

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

ご回答いただき、ありがとうございました。参考にさせていただきます。
投稿日時:2010/06/22 14:31
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ