アットウィキロゴ

WSHのページ

WSH 外部ファイル のキーワードで検索したが、目ぼしい結果は無し。
WSH 外部ファイル 行目 MsgBox で検索しても目ぼしい結果は無し。
WSH 外部ファイル 指定行 MsgBox で検索しても同じ。
なんでもいいので、外部ファイルを読み込んで出力するような WSHプログラムを作成する事にした。
【ソース01】[外部ファイルの出力]
Option Explicit
 
Dim objFs        'File System Object
Dim objFile    '読み込み対象ファイル
 
'FileSystemObject取得
Set objFs = CreateObject("Scripting.FileSystemObject")
 
'読み込みファイルオブジェクト作成
Set objFile = objFs.OpenTextFile("C:\readme.txt")
 
'全部読み込み
Do Until objFile.AtEndOfLine
    MsgBox objFile.ReadLine    '1行づつ表示
Loop
 
objFile.Close    'ファイルを閉じる
 
'終了処理
Set objFile = Nothing
Set objFs = Nothing




自分で考えてやってみた。
【ソース02】[外部ファイルの出力]
Option Explicit
 
Dim objFs        'File System Object
Dim objFile    '読み込み対象ファイル
Dim cnt

cnt = 0
 
'FileSystemObject取得
Set objFs = CreateObject("Scripting.FileSystemObject")
 
'読み込みファイルオブジェクト作成
Set objFile = objFs.OpenTextFile("C:\readme.txt")
 
If cnt = 3 Then
'全部読み込み
Do Until objFile.AtEndOfLine
    MsgBox objFile.ReadLine    '1行づつ表示
Else cnt = cnt + 1

Loop

End If
 
objFile.Close    'ファイルを閉じる
 
'終了処理
Set objFile = Nothing
Set objFs = Nothing



If文を含んだサンプルプログラムを動かす。
If文 サンプル で検索~
【ソース03】[If文の実験]~
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If




【NAVI】> 誤り01 > Else の後ろに何か書くことは出来ない。

【NAVI】> 誤り02 > Ifのブロックが、ループブロックの外側にあるので、
Ifが偽になれば、ループ全体が実行されない。
今回の話は、ループの内側もIfブロックが無いといけない。



【NAVI】> 細分課題01 >「飲みすぎ」が表示される場合と、体調不良が表示される場合のプログラム両方を作って欲しい。



細分課題01 >「飲みすぎ」が表示される場合と、体調不良が表示される場合のプログラム両方を作る。
【ソース04】[If文の実験]
Beer=6
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If



【ソース05】[If文の実験]
Beer=2
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If




Beer=6 とかの部分が InputBoxにてユーザ入力できるように改造したソースを別途作る。

【ソース06】[ユーザ入力の実験]
Beer = InputBox("ビールの本数を入力して下さい",,"")
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If




ElseIfを含んだプログラムを作成する。

【ソース07】[ElseIfの理解]~
Option Explicit
'MsgBox関数の戻り値を格納する変数
Dim Msg
'MsgBoxのダイアログ・タイトルを示す定数
Const TITLE = "ダイアログ・クイズ"

'MsgBox関数の戻り値がMsgという変数に代入される
Msg = MsgBox("「アルプスの少女○○ジ」○○のところになにがくる?", vbQuestion + vbYesNoCancel, TITLE)

If Msg = vbYes Then 'もしMsgがvbYesなら
       MsgBox "正解!たいしたもんだ。" , vbInformation, TITLE
ElseIf Msg = vbNo Then 'もしMsgがvbNoなら
       MsgBox "ブー!「アルプスの少女イイエジ」ってことはないだろ。" , vbCritical, TITLE
Else 'それ以外の場合なら
       MsgBox "キャンセルを押しました。" ,vbExclamation, TITLE
End If


http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh03/cformwsh03_02.html 
@IT - アットマーク・アイティ
参考にした。




ビールのプログラムをベースにそれを改修して、ElseIfを含んだものとする。

【ソース08】[ElseIfの理解]~
Beer = InputBox("ビールの本数を入力して下さい",,"")
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
ElseIf Beer = 4 Then
    WScript.Echo "公園で裸にならないでくださいよ!まささん"    
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If





ビールプログラムをさらに改修して、何でもいいので、For文も含んだプログラムとする。

【ソース09】[For文の理解]
cnt = 0
Beer = InputBox("ビールの本数を入力して下さい",,"")
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
ElseIf Beer = 4 Then
    WScript.Echo "公園で裸にならないでくださいよ!まささん"    
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If
i = Beer
For Beer = i To 1 Step -2
    cnt = cnt + 1 
Next
Cnt = cnt - 1
WScript.Echo "2の",Cnt,"倍以上飲んだね?まささん"


InputBoxによるビール飲用本数指定の回数だけ、「ビールを飲みました」を表示するようにする。

【ソース10】[For文の実施]

Beer = InputBox("ビールの本数を入力して下さい",,"")

For i = 1 To Beer
    WScript.Echo "ビールを飲みました"
Next
If Beer >= 5 Then
    WScript.Echo "飲み過ぎっすよまささん"
ElseIf Beer = 4 Then
    WScript.Echo "公園で裸にならないでくださいよ!まささん"    
Else
    WScript.Echo "今日は体調不良ですか?まささん"
End If

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Beer_if_2009_7_25_03.jpg)




ビールを飲みすぎかどうかの判定結果をファイルに出力するようにする。

とりえあず、WSH ファイルに出力 で検索。
結果、参考になるページ無し。うーむ、難しい。
http://www1.u-netsurf.ne.jp/~tomo_c/tips/WSH003.html#WSH028
Tech-Ezo - tomoより抜粋

【ソース11】[ファイル出力の実行]

Set objFs = CreateObject("Scripting.FileSystemObject")
Set tmpFile = objFs.CreateTextFile("C:\Beer01.txt")
Beer = InputBox("ビールの本数を入力して下さい",,"")
If Beer >= 5 Then
    tmpFile.WriteLine("飲み過ぎっすよまささん")
ElseIf Beer = 4 Then
    tmpFile.WriteLine("公園で裸にならないでくださいよ!まささん")    
Else
    tmpFile.WriteLine("今日は体調不良ですか?まささん")
End If
tmpFile.close
Set tmpFile = Nothing
Set objFs = Nothing

出来たかな?
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Beer_2009_7_25_04.jpg)




InputBoxでなくて、テキストファイルからの入力により、ビールの本数が決まるようにする。ファイルには、1行だけあって、そこに整数値が書かれているものとする。

【ソース12】[テキストファイルからの入力のテスト]~
Set objFs = CreateObject("Scripting.FileSystemObject")
Set tmpFile = objFs.OpenFile("C:\Beer02.txt")
Do Until tmpFile.AtEndOfStream
    tmpLine = tmpFile.ReadLine
Loop
Beer = tmpLine
Set tmpFile02 = objFs.CreateTextFile("C:\Beer01.txt")
If Beer >= 5 Then
    tmpFile02.WriteLine("飲み過ぎっすよまささん")
ElseIf Beer = 4 Then
    tmpFile02.WriteLine("公園で裸にならないでくださいよ!まささん")    
Else
    tmpFile02.WriteLine("今日は体調不良ですか?まささん")
End If
tmpFile02.close
Set tmpFile02 = Nothing
Set objFs = Nothing
~~
出来たかな?
~~
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (error_beer_2009_7_25.jpg)
エラー出現。よーわからんっす。



関数名が違った模様。
http://wsh.style-mods.net/tips/wshtips_2-01.htm
WSH@Workshop - WSHのサンプル集&リファレンス を参考にした。

【ソース13】[errorの修正]

Set objFs = CreateObject("Scripting.FileSystemObject")
Set tmpFile = objFs.OpenTextFile("C:\Beer02.txt")
Do Until tmpFile.AtEndOfStream
    tmpLine = tmpFile.ReadLine
Loop
Beer = tmpLine
Set tmpFile02 = objFs.CreateTextFile("C:\Beer01.txt")
If Beer >= 5 Then
    tmpFile02.WriteLine("飲み過ぎっすよまささん")
ElseIf Beer = 4 Then
    tmpFile02.WriteLine("公園で裸にならないでくださいよ!まささん")    
Else
    tmpFile02.WriteLine("今日は体調不良ですか?まささん")
End If
tmpFile02.close
Set tmpFile02 = Nothing
Set objFs = Nothing

出来たかな?
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (Beer_text_file_2009_7_25.jpg)




読み込みファイルの内容を3行にして、1行目にビールの本数が書かれていて、2や3行目には、無関係の文字列が入っているようにする。


#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (3gyou_2009_7_25.jpg)

文字を2行目と3行目に入れたら、型が違うと出た。~




何でもいいからForループするプログラム (ただしStepを設定しない) を作成して、ループの3回目だったら、MsgBoxするプログラムを作成する。

【ソース14】[For文の理解促進]

For i = 1 To 9
    If i = 3 Then
	MsgBox "ループの3回目です。"
    End If
Next

出来たくさい。
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (loop_2009_7_25.jpg)



読み込みファイルの内容を3行にして、1行目にビールの本数が書かれていて、2や3行目には、無関係の文字列が入っているようにする。
ReadLineしているループ中で、カウンタの役割を果たす変数にカウントさせるようにする。そうして、1行目なら1行目とかechoするようにする。

【ソース15】[カウンタの理解]

i = 0
Set objFs = CreateObject("Scripting.FileSystemObject")
Set tmpFile = objFs.OpenTextFile("C:\Beer02.txt")
Do Until tmpFile.AtEndOfStream
	tmpLine = tmpFile.ReadLine
	i = i + 1
	WScript.Echo i,"行目"	
Loop


#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (cnt_gyou_2009_7_25.jpg)




2行目のときだけ、「2行目だー!」と、それらしい表示をするようにする。


【ソース16】[If文の理解]


i = 0
Set objFs = CreateObject("Scripting.FileSystemObject")
Set tmpFile = objFs.OpenTextFile("C:\Beer02.txt")
Do Until tmpFile.AtEndOfStream
	tmpLine = tmpFile.ReadLine
	i = i + 1
	If i = 2 Then
		WScript.Echo "2行目だぁー!"
	Else
		WScript.Echo i,"行目"	
	End If
Loop
~~

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (2gyoume_2009_7_25.jpg)



読み込みファイルの内容を3行にして、1行目にビールの本数が書かれていて、2や3行目には、無関係の文字列が入っているようにする。
2行目や3行目だったら、ReadLineした内容を空読みにすれば良い。1行目とは違う変数に入れてしまうようにする。
~~
【ソース17】[空読みの理解]

i = 0
Set objFs = CreateObject("Scripting.FileSystemObject")
Set objTmpFile = objFs.OpenTextFile("C:\Beer02.txt")
Do Until objTmpFile.AtEndOfStream
    	i = i + 1
	If i >= 2 Then
		tempCase = objTmpFile.ReadLine
	Else
	        tmpLine = objTmpFile.ReadLine
	End If
Loop
Beer=tmpLine
Set objTmpFile02 = objFs.CreateTextFile("C:\Beer01.txt")
If Beer >= 5 Then
    objTmpFile02.WriteLine("飲み過ぎっすよまささん")
ElseIf Beer = 4 Then
    objTmpFile02.WriteLine("公園で裸にならないでくださいよ!まささん")    
Else
    objTmpFile02.WriteLine("今日は体調不良ですか?まささん")
End If
objTmpFile02.close
Set objTmpFile02 = Nothing
Set objFs = Nothing

#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (3gyou_kara_2009_7_25.jpg)


最終更新:2009年08月02日 12:03