VBSのソースについてご教授下さい。

【作りたい機能】
XMLファイルを読み込み、任意のエレメントを検索するスクリプトを
VBSで作成しようとしています。

【状況】
ダイアログで表示させる方法はわかりました。
 参照
 http://www.atmarkit.co.jp/fxml/rensai/msxml01/ms …

01 : Dim objDOM, rtResult
02 :
03 : Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
04 : rtResult = objDOM.load("Sample.xml")
05 : If rtResult = True Then
06 : procDispDatas objDOM.childNodes
07 : End If
08 : Set objDOM = Nothing
09 :
10 : Sub procDispDatas(objNode)
11 : Dim obj
12 : For Each obj In objNode
13 : If obj.nodeType = 3 and obj.parentNode.nodeName = "title" Then
14 : MsgBox obj.parentNode.nodeName & " : " & obj.nodeValue
15 : End If
16 : If obj.hasChildNodes Then
17 : procDispDatas obj.childNodes
18 : End If
19 : Next
20 : End Sub

この結果をテキストファイルに出力させる方法に
困っております。

どこにどのように記載すればいいか
教えていただきたく存じます。

よろしくお願いいたします

このQ&Aに関連する最新のQ&A

A 回答 (1件)

手元にあったxmlファイルに合わせてprocDispDatasの方はアレンジさせていただいておりますが、


下記の様な感じでテキストファイルに書き出せると存じます。ご参考まで。

Dim objDOM, rtResult
Dim objFSO
Dim objTextStream

Set objDOM = WScript.CreateObject("MSXML2.DOMDocument")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

Set objTextStream = objFSO.CreateTextFile("C:\writeXmlValue.txt")
rtResult = objDOM.Load("C:\hoge.xml")
If rtResult = True Then
procDispDatas objDOM.childNodes
End If

Set objDOM = Nothing
objTextStream.Close
Set objTextStream = Nothing
Set objFSO = Nothing

Sub procDispDatas(objNode)
Dim obj
For Each obj In objNode
If obj.nodetype = 1 And obj.nodename = "??????" Then
objTextStream.writeline obj.Text
End If
If obj.hasChildNodes Then
procDispDatas obj.childNodes
End If
Next
End Sub
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBSを学ぶ前に、、、

VBSを勉強しようと思っています。
VBAの知識は多少ありますがVBSについては無知です。

VBSを眺めてみたらHTMLみたいなのですが
VBSの前にHTMLの知識を身につけた方がいいのでしょうか?

Aベストアンサー

こんにちは。

いまどきのVBS(VBScript)は、VBAよりも遥かに難しいです。
VBScript を行うと、VBAの概念的なことが、良く理解できますから、勉強するにはよいですね。

インターネット検索すれば、初級では、サンプルコードは豊富にあります。

Microsoft のHey, Scripting Guy が有名ですが、スクリプト言語の流れが分かります。途中から、PowerShellに換わっているようです。最初から、分かっているという前提で話が進んでいます。

http://www.microsoft.com/japan/technet/scriptcenter/learnit.mspx

VBAでも使いますが、VBScript は、特に、WMI(Windows Management Instrumentation)が入ってきますので、独自のテクニックが必要だと思ってよいです。また、オートメーション・オブジェクトを呼び出して使わなくてはならないこともあります。

それと、Vista では、VBScriptは、完全サポートはしていないようです。

お勧めはしませんが、ツールとしては、ここが有名です。
しかし、シェアウェアとしては、値段がお高いですね。
http://www.vbsedit.com/
お金を払わなくても、使用期限はありませんが、Debugging が、事実上使えないと同じです。
オブジェクトのメソッド、プロパティは、インテリセンスが利きます。

識別子に色が付けば、普通のテキストエディタでも良いと思います。

>VBSを眺めてみたらHTMLみたいなのですが
それは、HTAファイルですが、専門のテキストがあったと思いますが、コツをつかめば書けると思います。

こんにちは。

いまどきのVBS(VBScript)は、VBAよりも遥かに難しいです。
VBScript を行うと、VBAの概念的なことが、良く理解できますから、勉強するにはよいですね。

インターネット検索すれば、初級では、サンプルコードは豊富にあります。

Microsoft のHey, Scripting Guy が有名ですが、スクリプト言語の流れが分かります。途中から、PowerShellに換わっているようです。最初から、分かっているという前提で話が進んでいます。

http://www.microsoft.com/japan/technet/scriptcenter/learnit.mspx...続きを読む

QVB.2005でXMLを読み込む時のパス設定

Javaで作成されたXMLをVB.net2005で読み取る際にVBでのXMLへのパス指定に関する質問です。開発環境はVisualStadio2005です。

javaで「D\Sample.xml」(適当なフォルダーに)を吐き出し。

***VB***↓

Imports System.Xml
Module Module1
Sub Main(ByVal args() As String)
'XMLファイルの読取り
Dim xmlRdr As New XmlTextReader(args(0).Trim())
xmlRdr.Read()
Console.WriteLine("タグ名:" + xmlRdr.LocalName)
Console.WriteLine("値:" + xmlRdr.ReadString())
xmlRdr.Close()
EnD Sub
End Module

プロジェクトのプロパティページのデバッグでコマンドライン引数指定で「D\Sample.xml」を指定。

しかし、読み込まれるのは\objの\Releaseと\のDebug上のxmlを読み込んでしまいます。しかも自動バックアップ?の関係で上記コードに無い作動(上記だと読み込みだけだが、先に作ったXML作成モジュールを実行してしまう)でXMLを自動作成してしまいます。


好きな場所のファイル名を指定させる方法を教えて下さい。

普段はEclipse+Javaで開発を行っていてEclipseのパス設定感覚ではうまくいかないのですか?

Javaで作成されたXMLをVB.net2005で読み取る際にVBでのXMLへのパス指定に関する質問です。開発環境はVisualStadio2005です。

javaで「D\Sample.xml」(適当なフォルダーに)を吐き出し。

***VB***↓

Imports System.Xml
Module Module1
Sub Main(ByVal args() As String)
'XMLファイルの読取り
Dim xmlRdr As New XmlTextReader(args(0).Trim())
xmlRdr.Read()
Console.WriteLine("タグ名:" + xmlRdr.LocalName)
Console.WriteLine("値:" + xmlRdr....続きを読む

Aベストアンサー

> コマンドライン引数指定は相対パスを指定するみたいなのですね。

いえ、コマンドラインで絶対パスを指定することも出来ます。

開始オプションのコマンドライン引数に「D:\Sample.xml」と書かれていれば、それは絶対パスです。

この状態でデバッグを開始すると
Sub Main(ByVal args() As String)
このメソッドの引数である args(0) には "D:\Sample.xml" という文字列が入ります。それでもなお例外が発生したのであれば、ファイルが存在しない・あるいは開けないかXmlの構造が間違っているか、のどちらかでしょう。例外が発生しているのであれば、その理由は分かると思います。

パスは相対パスであれ絶対パスであれ、単なる文字列に過ぎません。コマンドラインも単なる文字列ですから、相対・絶対の両方が指定できます。コマンドラインで与えられたパスをどう扱うかはプログラムしだいです。
誤解されているといけないので念のため。

Qバッチファイルの文字列をVBSに渡すには

バッチファイルからVBSを実行しています。

echo msgbox "123" >> %TEMP%\abc.vbs
cscript //NoLogo %TEMP%\abc.vbs >%TEMP%\abc.cmd
del %TEMP%\abc.vbs
call %TEMP%\abc.cmd
del %TEMP%\abc.cmd

このバッチを実行すると 123 が表示されます。


"123" の部分を変数として引渡したいのです。

set a=123
echo msgbox &a& >> %TEMP%\abc.vbs

このようにして実行すると ’コマンドの構文が誤っています。’ となります。
よろしくお願いします。

Aベストアンサー

> echo msgbox &a& >> %TEMP%\abc.vbs

echo msgbox "%a%" >> %TEMP%\abc.vbs

じゃないですか?

QVB2005 ソリューションの中にXMLファイルの読込

VB2005 かなりの初心者です。

現在、XMLファイルを外部(ソリューションエクスプローラに入っていない)
で読込みをしているのですが、管理上面倒なのでソリューションエクスプロ
ーラ内(同一プロジェクト)にXMLファイルを新規で追加して管理をしよう
と思っています。
XMLファイルを外部から読み込む場合には、ファイルパスを指定して簡単に
取得できたのですが、ソリューションへ追加した場合のファイルパス?は
どのようになるのでしょうか。
ファイルパスとかではなく、ソリューションエクスプローラのリストから
取得できるようなクラスが用意されているのでしょうか。

ものすごく初歩的な質問かもしれませんが、調べても全く不明だったので
ご質問させていただきました。
よろしくお願いいたします。

Aベストアンサー

VB2005ですと 実行ファイルは bin\debugまたはbin\Releaseフォルダに作成されます

プロジェクトのプロパティなどを変更していなければ これらの実行ファイルのパスが実行時のカレントフォルダになります

従ってソリューションに追加したファイルなど指示は
XmlDoc.Load("..\..\Test01.xml")
と言った具合で 2階層上のフォルダと言った指示になると思います

または XMLファイルのプロパティの『出力ディレクトリにコピーする』を『常にコピーする/新しい場合はコピーする』などに変更しておけば
『bin\Debug/bin\release』などにコピーされますよ
この場合は xmlDoc.Load( ".\sample01.xml" ) と言った具合でしょう

QVBSだけタスクバーで別に表示される

現在エクセルと、VBAとVBSを起動させています。
タスクバーにはエクセルとVBAは重なって表示されますがVBSだけ独立してタスクバーに表示されます。
「ウィンドウをタスクバーに表示」にしても変わりません。
どういうことでしょうか?
VBSは別物という認識でしょうか?

Aベストアンサー

何をどうやっているのかがわからないので、想像です。

ExcelのVBAからxxx.vbs等を起動している、と言う事だと思いますが、VBSを動かすと言う事は、「wscript.exe(またはcscript.exe)を動かす」と言う事なので、タスクバーがExcelと別になるのは当然だと思います。
(.vbsはExcelでは動きません。wscript/cscriptで動くモノです)

しかし、VBSでできる事は基本的に、VBAでもできるので、全部VBA化してしまえばよいようにも思いますが。

QCSVをVB(input)で読み込んだ場合に数値を文字列として読込みたい。

初めまして。個人的にVB6.0を勉強しています。教えてください。

【概要】
VBを使用し、CSVの読込(input #)→編集→TXTで出力(White #) する場合、inputの読込段階でデータが自動変換されてしまう。

【内容】
CSV(カンマ区切)のデータです。
(例)
シメイ,住所(都道府県),市街局番,番号
小林○○,千葉県○市○○,011,111-1111
佐藤○○,埼玉県○市○○,009,999-9999

input #で読込むと、市外局番の頭0(ゼロ)が省略され【11】や【9】と読込まれてしまう。
なんとか文字列として【011】や【009】と読込みたいです。

【奮闘記】
input #を使用し上記ファイルを+読込んでいます。
(line inputで読み込むと1列全てが結合された文字列となってしまうので、電話番号を結合するなど、編集ができなくなってしまうので)

input #として読込んだ段階で、数値として自動変換されてしまっているので、どうすればよいものなのか。。。
どんなアドバイスでも助かります!!よろしくお願いします。

初めまして。個人的にVB6.0を勉強しています。教えてください。

【概要】
VBを使用し、CSVの読込(input #)→編集→TXTで出力(White #) する場合、inputの読込段階でデータが自動変換されてしまう。

【内容】
CSV(カンマ区切)のデータです。
(例)
シメイ,住所(都道府県),市街局番,番号
小林○○,千葉県○市○○,011,111-1111
佐藤○○,埼玉県○市○○,009,999-9999

input #で読込むと、市外局番の頭0(ゼロ)が省略され【11】や【9】と読込まれてしまう。
なんとか文字列として【011...続きを読む

Aベストアンサー

こんにちは。

> input #として読込んだ段階で、数値として自動変換されてしまっている
ということですが、受け取り変数をString型にすれば
問題ないと思います。

Sub TEST()
Const cnsFILENAME = "D:\TEMP\TEST_DATA.csv"
Dim intFF As Integer
Dim X(1 To 4) As String
intFF = FreeFile
Open cnsFILENAME For Input As #intFF
Do Until EOF(intFF)
Input #intFF, X(1), X(2), X(3), X(4)
Debug.Print "(1)=" & X(1) & ", (2)=" & X(2) & _
", (3)=" & X(3) & ", (4)=" & X(4)
Loop
Close #intFF
End Sub

こんにちは。

> input #として読込んだ段階で、数値として自動変換されてしまっている
ということですが、受け取り変数をString型にすれば
問題ないと思います。

Sub TEST()
Const cnsFILENAME = "D:\TEMP\TEST_DATA.csv"
Dim intFF As Integer
Dim X(1 To 4) As String
intFF = FreeFile
Open cnsFILENAME For Input As #intFF
Do Until EOF(intFF)
Input #intFF, X(1), X(2), X(3), X(4)
Debug.Print "(1)=" & X(1) & ", (2)=" & X(2) & _
...続きを読む

QVBSとVBA

VBSとVBA


VBSとVBAはどこが違いますか。エクセルのVBA勉強してみたいです。

Aベストアンサー

だいたいお話は出ているようですが、位置関係が逆です。VBAが書けても、VBS は書けません。ちょっとした実験コードはともかく、実際には思ったようには書けません。VBSとは、Visual Basic Script のことです。WSHは、このVBScript と、JavaScriptを合わせたもので、表現力は、JavaScriptのほうが上かもしれません。HTMLと組み合わせ、単独のアプリケーションも作成することが可能です。

VBAは、MS-Officeに備え付けられたもので、VBEditor 上でコーディングするものですが、自動的にスペルチェックや構文チェックするので、とっても便利です。そこにいくと、VBSciptは、自動メンバーの出るようなエディタは少ないし、構文自動チェックしてくれるわけではありません。それに、タイプライブラリの呼び出しも簡単には出来ません。

Micorosoft の「Hey, Scripting Guy!」(参照URL)を読んでみるとよいですね。
一番下の 2006/1 からです。最初に、「テキスト ファイルのすべての空白行を削除する方法はありますか?」というスタートからでは、VBSは手が出ない人も多いと思います。Win XPになって、VBScript のステータスが変わりました。WMI(Microsoft Windows Management Instrumentation)が入ってきたからです。

もっと基礎からなら、「Windows Script Host Laboratory」の牟田口さんのサイトを見てみるとよいです。http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/

そもそも、MSの中でもこのScripting の方向性というのは、独自路線のようですね。これが、Vista で使い勝手が悪くなってしまい、暗号化が利かなくなってしまいました。その代わり、PowerShell が登場しました。かと思えば、子ども向けというSmaill Basicも登場しましたが、これが大化けするかもしれません。いずれにしても、一般の人は手が出ません。

だから、VBAで基礎力を付けてからですね。

参考URL:http://technet.microsoft.com/ja-jp/scriptcenter/ee817145.aspx

だいたいお話は出ているようですが、位置関係が逆です。VBAが書けても、VBS は書けません。ちょっとした実験コードはともかく、実際には思ったようには書けません。VBSとは、Visual Basic Script のことです。WSHは、このVBScript と、JavaScriptを合わせたもので、表現力は、JavaScriptのほうが上かもしれません。HTMLと組み合わせ、単独のアプリケーションも作成することが可能です。

VBAは、MS-Officeに備え付けられたもので、VBEditor 上でコーディングするものですが、自動的にスペルチェックや構文チェック...続きを読む

QVB2005でXMLのテキストデータをXMLデータにするには?

VB2005の初心者です。

タグ付きのXMLのテキストデータを読み込んで、項目ごとにDBに登録したいのですが、やり方が分りません。
テキストデータをXMLデータ、もしくはノード、もしくはデータセット型に変換しなければならないと思うのですが、そのやり方を教えていただきたいです。

ちなみに、XMLデータをテキストデータにするのは下記のとおりでできました。この strText を逆にXMLデータに変換したいです。

Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument
Dim strText As String
xmlDoc.PreserveWhitespace = True

xmlDoc.Load("C:XMLData.xml")

strText = xmlDoc.xml

何かヒントでも良いので、たくさんの方の知恵をお借りしたいです。

Aベストアンサー

DataSetのReadXMLメソッドを使えば、XMLファイルから読み込んでDataSetに取り込めると思います。それをDBに登録すればよいかと。

QUWSCからvbsファイルを呼ぶ方法

UWSCからvbsを呼ぼうと思って以下の記述をしてみましたが、上手く動きません。

str="C:\SendMail.vbs"
Exec(str)

SendMail.vbsファイルをマウスでクリックすると正常にメールが届くのでSendMail.vbs内の記述には問題なさそうです。

ググってもUWSCファイル内にvbsのファンクションを記述する方法はありましたが、vbsファイルの呼び出し方は見つけられませんでした。
正しい記述方法があれば教えて下さい。よろしくお願いします。

Aベストアンサー

> 正しい記述方法があれば教えて下さい。

ちょっと試せないですが、

Exec("WScript.exe " + str)

とかでは?

--
> SendMail.vbsファイルをマウスでクリックすると正常にメールが届くので

ファイルをクリックした際、エクスプローラがファイルの種類/拡張子に対応したプログラムを探し、そのプログラムから対象ファイルを開くようにしてくれています。

hoge.txtをマウスでクリックするとメモ帳なんかで開くのと同じ。
hoge.txtをプログラムとして直接実行しようとしたって、実行不能みたいな話。

QVB テキストファイルから1文字だけ読み込みたい

1.txtの中身が

01110
10100

であったとします

open "1.txt" for input as #1
でファイルを開いて、

dim readin(10) as integer
に対して、
readin(0)=0
readin(1)=1
readin(2)=1
・・・   =1
     =0
     =1
     =0
readin(7)=1
readin(8)=0
readin(9)=0
というように、整数の配列にテキストの中にある0と1を代入したいのですが、どうすればよいのでしょうか。

検索をしても、line input のように行で読み込むものや、項目の間にスペースの区切りが必要なものが出てきます。

テキストの中身をスペースで区切る、もしくはlineinputでバッファ変数に読み込んだあと、leftなどでバッファから読み込むことも出来そうですが、それは最終の手段としておいておいて、
一回の操作で直接1文字のみ読み込む方法があれば教えてください。

Aベストアンサー

char = Input(1, #1)

で1文字読み込みができます。

ただし、キャリッジ リターン (Chr(13))、ライン フィード (Chr(10))なども1文字として読み込みますので、それらの文字は無視する必要があります。


人気Q&Aランキング