VBScriptで、
xmlファイルから、あるタグに囲まれた文字列を抜き出して、別のテキストファイルに書き込みたいのですが、どうもうまくいきません。xmlファイル等はどのように開いたり、読み込んだりすればよいのでしょうか。どなたか教えて下さい。
よろしくお願いします。環境はWinNT4.0です。

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

A 回答 (1件)

まず一般にXML文書を解析するときには、「XMLパーサ」というものを使用します。


VBScriptということなので、MicrosoftのXMLパーサであるMSXMLを使用すればよいでしょう。

XML文書をXMLパーサを使用して読みこむと、DOMのオブジェクトが出来ます。
DOMについては↓ここで。
http://www.atmarkit.co.jp/fxml/rensai/msxml01/ms …
で、DOMから欲しい文字列を取ればよいです。

MSのサイトの参考資料も参考URLに示しておきます。

参考URL:http://www.microsoft.com/japan/developer/worksho …
    • good
    • 0
この回答へのお礼

ありがとございます!!
さっそく試してみて、うまくいきました!!

お礼日時:2001/08/07 00:17

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

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

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

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

Q動画の読み込み速度を上げる方法ってありませんか?

現在動画読み込み速度は1秒約100KB(800kbps)です

ファイルやゲームのダウンロードの速度は一秒570~620KB(4.5MB~4.9MB)
プロバイダで契約しているのは5Mbpsです。

なぜ動画の方が遅くなるのでしょうか?
動画がカクカクして見にくいです。(画質を下げろっていう回答はやめてください)
ダウンロード中でもありません。

メモリは8GB
GPUは内臓のでintel HD Graphics3000 を使っています。
CPUはintel corei7 第二世代のを使っています。
OSはwin8.1です。
HDDは750GBあって50GBしかつかってません。

最適化もしました。ブラウザのキャッシュクリアもしました。

Aベストアンサー

驚きの事実 : 相手の送ってくれる以上のモノは受け取れません。

>なぜ動画読み込みのほうが遅いのでしょうか?

動画サイトのサーバーの送り出し速度は1秒約100KB(800kbps)
ファイルサーバーやゲームサーバーの ア ッ プ ロ ー ド の速度は一秒570~620KB(4.5MB~4.9MB)

動画サイトのサーバーの方がそもそも能力が低いか、そのとき混雑していたのでしょう。

自宅--回線--プロバイダ--(インターネット)--各種サーバー
質問者は自分の側の事情しか考えたことないようですが、通信ってのは「相手」の存在するものです。
インターネットの向こう側にあるサーバーの能力・混雑具合はまちまちです。

有料・無料で区別しているところなら、お金払うといいでしょう。

参考URL:https://secure.nicovideo.jp/secure/register?from=header

QVBScriptにて、テキストファイルAの中身を、テキストファイルBに行を指定して追加書きしたい

以下のように記述されたc:\tmp\test.txtの3行目に、
test.txt######################ここから
test1
test2
test3
test4
test5
##############################ここまで

以下のように記述されたc:\tmp\insert.txtの中身全てを追加書きして、
insert.txt####################ここから
insert1
insert2
insert3
insert4
insert5
#############################ここまで

c:\tmp\test.txtが以下のような結果になるVBScriptを作成したいです。
test.txt#####################ここから
test1
test2
insert1
insert2
insert3
insert4
insert5
test3
test4
test5
#############################ここまで

色々調べたのですがどうしても上手くいきません。
もし上記結果が得られる方法がありましたらご教授ください。

以下のように記述されたc:\tmp\test.txtの3行目に、
test.txt######################ここから
test1
test2
test3
test4
test5
##############################ここまで

以下のように記述されたc:\tmp\insert.txtの中身全てを追加書きして、
insert.txt####################ここから
insert1
insert2
insert3
insert4
insert5
#############################ここまで

c:\tmp\test.txtが以下のような結果になるVBScriptを作成したいです。
test.txt#####################ここから
test1
test...続きを読む

Aベストアンサー

#1 Wizard_Zeroです。
雑なコードですが・・・


Dim objFSO
Dim fileRead, fileWrite
Dim strTestLines
Dim i

Set objFSO = CreateObject("Scripting.FileSystemObject")

' test.txt を読み込んで配列化
Set fileRead = objFSO.OpenTextFile("test.txt")
strTestLines = Split(fileRead.ReadAll, vbCrLf)
fileRead.Close

' inset.txt を読み込み、test.txt を書き込み(上書き)で開く
Set fileRead = objFSO.OpenTextFile("insert.txt")
Set fileWrite = objFSO.CreateTextFile("test.txt", True)

' test.txt へ上書き
fileWrite.WriteLine strTestLines(0) ' 元の1行目
fileWrite.WriteLine strTestLines(1) ' 元の2行目
fileWrite.WriteLine fileRead.ReadAll ' insertのすべて

' 元の残り - 1行
For i = 2 To UBound(strTestLines) - 1
fileWrite.WriteLine(strTestLines(i))
Next

' 最後の1行は改行なし
fileWrite.Write strTestLines(UBound(strTestLines))

fileWrite.Close
fileRead.Close

#1 Wizard_Zeroです。
雑なコードですが・・・


Dim objFSO
Dim fileRead, fileWrite
Dim strTestLines
Dim i

Set objFSO = CreateObject("Scripting.FileSystemObject")

' test.txt を読み込んで配列化
Set fileRead = objFSO.OpenTextFile("test.txt")
strTestLines = Split(fileRead.ReadAll, vbCrLf)
fileRead.Close

' inset.txt を読み込み、test.txt を書き込み(上書き)で開く
Set fileRead = objFSO.OpenTextFile("insert.txt")
Set fileWrite = objFSO.CreateTextFile("test.txt"...続きを読む

Qファイル読み込み/書き込み速度を上げるには

下記のようなファイルの読み込み/書き込み処理において、もっと効率よく(速く)読み込み・書き込みをしたい場合どのような工夫をすれば良いでしょうか?

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("sample2.data"));
BufferedInputStream in = new BufferedInputStream(new FileInputStream("sample1.data"));
int c ;
while((c = in.read()) != -1)
{
out.write(c);
}
in.close();
out.flush();
out.close();

Aベストアンサー

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom() で FileInputStream 側から取り出した FileChannel のインスタンスを指定する。

例) in は FileInputStream のインスタンス, out が FileOutputStream のインスタンスの場合。

FileChannel fcin = in.getChannel(), fcout = out.getChannel();
fcout.transferFrom(fcin, 0, fcin.size());

速くなるかどうかは環境によって微妙に違うと思いますが、効率よくやる方法が2つあります。

1. 1バイトづつ読み書きするのではなくて byte[] で1000バイトとかの塊を読んでそのまま塊を書くようにする。(こうすると read, write をする回数が減るので少し速いと思います)。

2. FileInputStream と FileOutputStream のインスタンス双方から getChannel() で java.nio.channels.FileChannel のインスタンスを取り出し、FileOutputStream 側から取り出した FileChannel のインスタンスに対して transferFrom()...続きを読む

Q[VBScript]ファイルの削除

ファイルの削除を行うために以下のように書いて実行したところ。

「Microsoft VBScript 実行時エラー '800a0046'
- 書き込みできません。」
というエラーメッセージがでてしまいました。

-------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
Set src = fso.GetFile(FileName.txt)
src.Delete
-------------------------------

ファイルのプロパティを見てもフルコントロールを許可していますし、実行者もAdmin権限です。
どこをチェックすればよろしいでしょうか?
または、どのようにコーディングすればよいでしょうか?

Aベストアンサー

指定のファイルを他のアプリで開いてませんか?
若しくは、他のアプリで開いて、そのアプリが落ちたり
してませんか?(Excelの場合、掴みっぱなしになる)

Qプレステ2の読み込み速度について

SCPH-15000→SCPH-79000(90000)は、SONYによると読み込み速度は変わらないとの返答を得たのですが、読み込み速度が速いという噂も聞きました。実際のところどうなのでしょうか?

Aベストアンサー

そうですね。若干早いような気がしますね。基本的にどんどん高性能になってきていますから、読み込み速度、処理能力などよくなってるはずですよ。

Qvbscriptによる条件分岐とファイル出力

vbscript初心者です。ご教授頂けますと幸いです。

ネットワーク監視ログが毎朝出力され、そのログの中身を、各サーバにログインし手作業で確認を行っています。
この作業を、VBscriptで行いたいと思っているのですが、どうもうまくいかず困っています。

正常時のログには必ず「1,2」と文字列が出力されます。
この文字列を検索対象にして、「1,2」の記述があれば、新規の結果確認ログに「ネットワークは正常です」とコメントを付けて、ファイルを出力し、

「1,2」が見つからなかった場合は、そのログファイルの3行目のみを、新規の結果ログファイルに抽出する、VBscriptを作成したいと思っています。

異常時のログファイルには、異常を知らせるコメントが3行記述されてます。必要な行は、3行目だけなので、3行目を結果ログとして出力したい。

以下、構文ですがVB初心者であり、色々なサイトを見て作ってみましたが全然動かず今回、ここに投稿しました。

'検索対象のテキストファイルのオープン
Set WshShell = WScript.CreateObject("WScript.Shell")
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objFs = Fs.OpenTextFile(NlbTmp)

If Instr(A,"1,2") > 0 Then
MsgBox "ネットワークは正常です"
Else

”異常の場合の条件分岐が分からず・・・”


Set oText = CreateObject("Scriptting.FileSystemObject").CreateTextFile( 結果ログ.log, True )

str = Fs.ReadLine
Fs.WriteLine(str)
End If


自分で作成するのが初めてな物で本当によろしくお願い致します。

vbscript初心者です。ご教授頂けますと幸いです。

ネットワーク監視ログが毎朝出力され、そのログの中身を、各サーバにログインし手作業で確認を行っています。
この作業を、VBscriptで行いたいと思っているのですが、どうもうまくいかず困っています。

正常時のログには必ず「1,2」と文字列が出力されます。
この文字列を検索対象にして、「1,2」の記述があれば、新規の結果確認ログに「ネットワークは正常です」とコメントを付けて、ファイルを出力し、

「1,2」が見つからなかった場合は、そのログフ...続きを読む

Aベストアンサー

1.変数の誤用を避けるため、最初にOption Explicit文を置きます。
 この文があると、変数を事前定義せずに使うとエラーになります。
 この文が無いと変数名を間違えてもエラーにならないので、誤動作
 する可能性が高くなります。
2.Set WshShell = WScript.CreateObject("WScript.Shell") ?
 使わないオブジェクトは作らないようにします。
3.ファイルアクセスオブジェクト
 Dim objFs
 Set objFs = CreateObject("Scripting.FileSystemObject")
4.入力ファイルオブジェクト
 Dim inFle
 Set inFile = objFs.OpenTextFile("C:\~", 1) '1は入力モード
5.出力ファイルオブジェクト
 Dim outFile
 Set outFile = objFs.CreateTextFile("C:\~", True) 'Trueは上書き可
6.テキストの読み込み
 Dim text
 text = inFile.ReadLine() '1行分の読み込み
7.テキスト内に"1,2"があるかを調べる
 掲題のようにInStrでも良いし、RegExpを使っても良いでしょう。
 http://msdn.microsoft.com/ja-jp/library/cc392403.aspx
8.条件分岐
 If InStr(text, "1,2") > 0 Then
    WScript.Echo "ネットワークは正常です"
 Else
    '3行目をtextに読み込む
    outFile.WriteLine text '改行付きで書き込む
 End If
 '終了

1.変数の誤用を避けるため、最初にOption Explicit文を置きます。
 この文があると、変数を事前定義せずに使うとエラーになります。
 この文が無いと変数名を間違えてもエラーにならないので、誤動作
 する可能性が高くなります。
2.Set WshShell = WScript.CreateObject("WScript.Shell") ?
 使わないオブジェクトは作らないようにします。
3.ファイルアクセスオブジェクト
 Dim objFs
 Set objFs = CreateObject("Scripting.FileSystemObject")
4.入力ファイルオブジェクト
 Dim inFle
 Se...続きを読む

Qパソコンのドライブを購入したのですが、安いためか最大読み込み速度と書き込み速度がCD-Rで24xと記

パソコンのドライブを購入したのですが、安いためか最大読み込み速度と書き込み速度がCD-Rで24xと記載してありました。しかし、自分は48x対応のCDをパソコンにコピーしたいのです。このドライブに自分が持っているCDを挿入しても非対応なのでしょうか?それとも、読み込み速度が遅いだけで、一応対応するのでしょうか?

Aベストアンサー

>読み込み速度が遅いだけで、一応対応するのでしょうか?

結論は、問題なく対応します。
そもそも
>自分は48x対応のCDをパソコンにコピーしたいのです。

読み込みが48x 対応のCDなんて存在しません。
CDの読み込み速度は、乱暴な言い方をすると無限大で、
使用するドライブによって、x倍速の制限がかかります。
48x 対応などの表示は書き込み速度の表示です。

QVBScriptでフォルダ内の全ファイル名取得

こんにちは

VBScriptでツールを作成しています。
フォルダA内の全ファイルをリネームして
別フォルダB内に同じファイル名があればリネームして
フォルダA内のファイルをコピーしたいのですが
一度にフォルダ内の全ファイル名を取得する方法が分かりません。

なにかいい方法は無いでしょうか?よろしくお願いします。

Aベストアンサー

VBスクリプトサンプルです。

以下のプログラムをVBSファイルとして保存してください。
(※※※※全角スペースは半角スペース2個と置換してください※※※※)

そのファイルにエクスプローラなどから、フォルダをドラッグしてみてください。
プログラム先頭で切った出力先に、ログとして残ります。



Option Explicit
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Const LIST_FILE = "C:\FileList.txt" '←ログ出力先
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


'-----------------------------------------------

Dim objArgs
Dim fsoObj
Dim objText

'オブジェクト生成
Set objArgs = WScript.Arguments
Set fsoObj = CreateObject("Scripting.FileSystemObject")

'ログファイルがあったら抹消
If fsoObj.FileExists(LIST_FILE) Then
  Call fsoObj.DeleteFile(LIST_FILE)
End If

'ログファイル準備
Set objText = fsoObj.OpenTextFile(LIST_FILE, 8, True, 0)

'メイン実行
Call MainProc(objArgs)

'ログファイルクローズ
objText.Close


'オブジェクト開放
Set objText = Nothing
Set fsoObj = Nothing
Set objArgs = Nothing
'-----------------------------------------------



'-----------------------------------------------
'メイン実行部
'-----------------------------------------------
Sub MainProc(arg)
  Dim objParam

  'パラメータループ
  For Each ObjParam in arg
    'フォルダであるかをチェック
    If fsoObj.FolderExists(objParam) Then
      'リスト作成メイン実行
      Call CreateFileList(objParam)
    End If
  Next
End Sub


'-----------------------------------------------
'リスト作成メイン
'-----------------------------------------------
Sub CreateFileList(inFolderName)
  Dim fsoFolder
  Dim fsoSubFolder
  Dim fsoFile
  
  'フォルダオブジェクト取得
  Set fsoFolder = fsoObj.GetFolder(inFolderName)
  
  'フォルダ内/ファイルループ
  For Each fsoFile In fsoFolder.Files
    'ログに出力
    objText.WriteLine fsoFile.Path
  Next
  
  'フォルダ内/サブフォルダループ(サブフォルダが不要なら、このループは不要)
  For Each fsoSubFolder In fsoFolder.SubFolders
    'サブフォルダで再帰
    Call CreateFileList(fsoSubFolder)
  Next
End Sub

VBスクリプトサンプルです。

以下のプログラムをVBSファイルとして保存してください。
(※※※※全角スペースは半角スペース2個と置換してください※※※※)

そのファイルにエクスプローラなどから、フォルダをドラッグしてみてください。
プログラム先頭で切った出力先に、ログとして残ります。



Option Explicit
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
Const LIST_FILE = "C:\FileList.txt" '←ログ出力先
'-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*


'-----------------...続きを読む

Q新旧2台のPCでDVD Decrypterの読み込み速度が違うのはナゼ??

新旧2台のPCがあるのですが…
DVDをDVD Decrypterで読み込まして見ると読み込み速度が3倍ぐらい違います。
しかもスペックが劣る旧型のPCの方が新PCより早いのです。

●旧型 WindowsXP SP2
    Pentium4 3.2G
ドライブ GSA-4163B
DVD-DL 読み込み 2.4X~4X

●新型 WindowsXP SP3
    Quad Q6600 2.4G
ドライブ LH-20A1P
DVD-DL 読み込み 不明

多分、ReadSpeedもLH-20A1Pの方が早いかと…。
DVD Decrypterの設定も両PC共に「デバイス」の「オプション」の読み込み速度を「最大」に設定しています。

こういった環境でDVD-DLを読み込ませると旧型は20分ほどで、
新型は1時間ぐらいかかってしまいます。

これは何故でしょうか??

Aベストアンサー

アプリケーション・プログラム(DVD Decryter)が、

マルチスレッド対応プログラムでないからです。

QVBScript で未作成ファイルの親フォルダを調べたい

ファイルシステムオブジェクトのCopyFile()を使って、例えば次のパスへファイルをコピーするときに、まずFolderExists()で親フォルダの有無を確認するようにしたいと思っています。
C:\rootdir\lv2dir\lv3dir\newfile.txt
このとき、正規表現を使って次のようなパスを取得したいのですが、書き方がいまいち分かりません。どのようにすればよいのでしょうか。
C:\rootdir\lv2dir\lv3dir
ちなみに、正規表現を使わなくても存在しないファイルのパスから親フォルダのパスを取得する方法があればそちらもぜひお教えください。

よろしくお願いします。

Aベストアンサー

こんにちは。

File System Object の GetParentFolderNameメソッド ですね。

書式:FileSystemObject.GetParentFolderName(path)

指定するパスは実在しなくてもかまいません。

Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
MsgBox FSO.GetParentFolderName("C:\rootdir\lv2dir\lv3dir\newfile.txt")


人気Q&Aランキング

おすすめ情報