プロが教える店舗&オフィスのセキュリティ対策術

複数の端末からアカウント情報とユーザ名をテキストに出力しています。
そのアカウント情報から、ユーザが所属しているグループを抽出する必要があります。

以下のような形の形式でテキストには出力されています。
・テキストの内容は一行ずつでも全行まとめてでも呼び出せる(alllineは全行格納、lineは一行ずつループで読み取る)
・内容はそれぞれの端末で可変
・複数所属している場合もある
・テキストからユーザの所属グループのみを出力する

たとえば以下のテキストからNakayamaの所属グループであるAdministrators:
とUsersを抽出したい場合ですが、

InstrでInstr(allline, nakayama)探しだし、その場所の文字数を特定することはできます。
ですがそこからどうやってAdministratorsのみを取得すればよいのでしょうか。

思いついたのは指定のユーザを検索して、
ユーザをキーにそれより上に:がある行を特定しその行を抽出して、
Replaseで:を消してやればいいと思うのですが、
そのようなことはできるのでしょうか。

他の方法でもありましたらご教示ください。



テキストのアカウント情報サンプル
▲アカウント
Administrators:
Administrator
Nakayama
Kimura
DomainUser
Backup Operators:
Guest:
Users:
Kitagawa
Maruyama
Nakayama
PowerUser:

A 回答 (2件)

質問の表現が持って回った表現で、判りにくい。


コンピュター処理は、本当のデータのもつ意味などは問題にしない(出来ない)。
そんなことはコンピュタープログラムをやるものはまず始にわかること。
だからデータの意味などくだくだと、書かなくて良い場合がほとんど。
形で処理することが多い。だから形の特徴なりを質問で説明すべきなんだ。
だから>複数の端末からアカウント情報とユーザ名をテキストに出力しています。そのアカウント情報から・・なんて書かなくても良いかもしれない。かえって読むほうはわずらわしい。
ーーーー
だから、「どういう文字列ファイルがあって」を例として、書くべき。
この質問の場合は「アカウント」以下なのだろう。
「テキストレコードとして1行」づつの模擬実例を書けば良い。
「アカウント」以下は1行が1レコードなのか。1行に他の余分なデータもあるのか。あれば書いておくこと。
そしてテキストデータの中でどういう特徴をとらえたら、>ユーザが所属しているグループを、とらえられるのか、質問者が考えて、質問に書くべきだ。特徴や情況を一番わかっているのは質問者だし、質問者のニーズなんだから。ここまで出来れば
VBSの極く初心者でなければ、出来たも同然と思うが、判らなければ、使うコード(関数も含め)やロジックを質問することになる。
本件では、単語末尾の「:」がキーになりそうなんだがどうか?
補足してほしいが、質問者は今まであまり細くしないが。
そこらあたりを割り出せないようなら、質問者はプログラム作成はおぼつかない。
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2011/10/24 21:12

何やら小難しいことを考えておられるが、以下の方法でどうでしょう?



1.ReadLine で1行ずつ読み込む
2.文字列の末尾が:だったらそれはグループ名、でなければユーザー名
3.ユーザー名がヒットすれば2.で設定したグループ名を出力
4.1~3をEOFまで繰り返す。

プログラムにすれば以下のようになります。
Dim fso, fin
Dim strGrp, strLine

Set fso = CreateObject("Scripting.FileSystemObject")
Set fin = fso.OpenTextFile("ファイル名", 1)
Do While Not fin.AtEndOfStream
strLine = fin.ReadLine
If Right(strLine, 1) = ":" Then
strGrp = Left(strLine, Len(strLine) - 1)
Else
If strLine = "Nakayama" Then Wsh.Echo strGrp
End If
Loop

fin.Close

以上
    • good
    • 0
この回答へのお礼

ありがとうございます。
すごく参考にさせて頂きました。
構文の勉強になりました。

お礼日時:2011/10/24 21:11

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