アオタ さん (no_tak@kcn.ne.jp) 2001年 09月 04日 21時 31分 54秒
URL:null

To: なかやん さん

はじめまして アオタと申します

> Accessのmdbファイルを、エクセルに出力するWSHを作成したいのですが、
> 上手くつくれません。
とのことですが、AccessがあるということはADO が
使えると思いますので、ADO をご使用になってみて
はいかがでしょうか?

# と言うよりも、私自身がAccessをもっていないた
# めに、確認にはもっぱらADO + VBを使用していま
# すので

で、一応ADO を使用した例を作成しましたのでご活
用ください
[データベースの絶対パス]と言う行にデータベース
へのパスを設定してください

' --ここからソース--

Option Explicit

Dim objCn ' データベースとの接続するオブジェクト
Dim objRs ' SQL で抽出したレコードセットを格納
Dim objFld ' フィールドオブジェクト格納
Dim strSQL ' 実行するSQL を格納
Dim objExcel ' Excel アプリケーション
Dim objSheet ' 現在のシート
Dim x, y ' セルの場所

' SQL を設定
strSQL = "SELECT * FROM flist ;"

' データベースと接続する
Set objCn = CreateObject( "ADODB.Connection" )
objCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=[データベースの絶対パス]\dbtest.mdb;"
'~~~~~~~~~~~~~~~~~~~~~~~
' データベースの絶対パスを設定する(c:\xxxx\xxx\)
objCn.Open

' SQL を実行し結果をレコードセットに格納
Set objRs = CreateObject( "ADODB.Recordset" )
objRs.Open strSQL, objCn

' Excel アプリケーションを作成
Set objExcel = CreateObject( "Excel.Application" )
objExcel.Visible = True ' Excel を表示する
objExcel.Workbooks.Add ' ワークブックを追加する
Set objSheet = objExcel.ActiveSheet ' アクティブなシートを格納


' データが無い場合 EOF がTrue になる
' この場合False のとき
If Not objRs.EOF Then

' 最初のセルの場所(左上[1,1]に設定)
x = 1: y = 1

' objRs.Fields から、一つずつフィールドを取り出し objFld に格納し
' フィールドが無くなるまで繰り返す
For Each objFld In objRs.Fields
' フィールドの名前をExcel に書き込む
objSheet.Range( objSheet.Cells( y, x ), objSheet.Cells( y, x )).Value = objFld.Name
x = x + 1
Next

' objRs.EOF がTrue になるまで
Do Until objRs.EOF
' X軸を初期化
x = 1

' Y軸を一つ下に移動
y = y + 1

' objRs.Fields から、一つずつフィールドを取り出し objFld に格納し
' フィールドが無くなるまで繰り返す
For Each objFld In objRs.Fields
' [x,y]の位置に値を格納
objSheet.Range( objSheet.Cells( y, x ), objSheet.Cells( y, x )).Value = objFld.Value

' Xの位置を移動
x = x + 1
Next

' 次のレコードを取り出す
objRs.MoveNext
Loop
End If

' レコードセットを閉じる
objRs.Close

' データベースとの接続を閉じる
objCn.Close

' オブジェクト変数を開放
Set objSheet = Nothing
Set objExcel = Nothing
Set objRs = Nothing
Set objCn = Nothing

' --ここまでソース--

To: むたぐちさん

毎回投稿記事が長くなって申し訳ございません
これからは別な方法を考えます


横槍失礼します
> あはは、やっぱりY!BBは、相当ダメなのかも。
> 登場当初は友人にも勧めていたんですが、今は「あれだけはやめといた方がいいかも」
> とか言ってます(^^;
そうなんですか?
友達がこれに加入しようとしているのですが…
今からやめさせるべきでしょうか?

なかやん さん 2001年 09月 04日 16時 45分 41秒

はじめまして。
Accessのmdbファイルを、エクセルに出力するWSHを作成したいのですが、
上手くつくれません。

やりたい事は、dbtest.mdb のテーブル flist を任意のエクセルファイルに
出力したいのです。
どなたか、ご教授のほど宜しくお願いします。

下記の様のPGを書いてみたのですが、駄目でした。
エラーで怒られてしまいました。
****************************************************************
Dim acc
Set Acc = Wscript.CreateObject("Access.Application")
acc.visible=TRUE
acc.OpenCurrentDatabase "d:\dbtest.mdb"
acc.DoCmd.TransferSpreadsheet acExport,acSpredsheetTypeExcel9,"flist","d:\dbtest.xls", False

Set acc = Nothing
*****************************************************************

ひろすけ さん 2001年 09月 04日 13時 38分 06秒

WSHでフォルダーを作成するときそのフォルダ−の
属性なども設定したいのですが、どなたかご存知
ないでしょうか?

環境はW2000 Serverです。
W2000 Serverのフォルダーのプロパティ−を開くと
セキュリティータブがあり、そこで"IUSR_(コンピューター名)"
を追加したいのです。
IUSRは第3者がインターネット経由でこのフォルダーにアクセスするときの
ユーザー名です。

HenkanFolderPath="C:\test"
Set aspFS=WScript.CreateObject("Scripting.FileSystemObject")
aspFS.CreateFolder HenkanFolderPath

よろしくお願いします。




たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 09月 04日 11時 08分 38秒

TO: むたぐちさん

いろいろ有り難うございます。

>DCOMの構成をきちんとしてから、もう一度トライしてみては?
お勧めで、DCOMを調べてみることに致しました。
途上、
  http://www.users.gr.jp/ml/archive/wsh/175.asp
に行き当たりました。 約一年前の記事でしたがサーバー中のExcelの起動に
関して投稿者も今日まで解決を見ていないようです。

>2000年1月分からほぼ全記事(約23,000)保存しています。

これはすごいですね。OutLookExpress5.5ではNewsの保存設定を無期限に
してもどんどん消えていく!! ので別フォルダにドラッグ保存する必要があり
ました。
むたぐちさんはどのような方法で保存しているのかできましたら教えていただけませんか。内容のDLとドラッグには疲れましたし電話代が堪りませんね。
WSHの話とはちょっと外れますが。

UK さん 2001年 09月 04日 01時 21分 08秒


説明不足で申し訳ありませんでした。
Vectorなどのソフト(.lzh)をダウンロードするのですが
種類が多くて何が何やらさっぱりわからなくなっています。
そこで定期的にフォルダーを替えたいのです。

Webの http://www・・・・.lzh
のファイルをダウンロードし
C:\abc\def のフォルダーに入れる
作業をWSHを使ってダウンロードそのものを実行したいのですが
教えていただけますか?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 09月 04日 00時 40分 21秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 筑集眺餅 さん

> なら、WScript.Sleep 10000 で、10秒スリープすればいいかな。

かぶっちゃいました、すいません。

> 時間をきっちり測りたいなら Time関数を使って時刻を調べながらループ
> させるとか。

10secくらいならあまり問題ないですが、数時間とかなると、そうした方が
よさそうです。

> J&Pとかに並んでいるパッケージのリナックスって数千円のレベルですよね。

雑誌の付録だとタダですよ(^^;
もちろんインターネットでダウンロードしたら、おまけの雑誌を買わなくてすみます。

> 安いなー、と思いながら、今ある Win環境を捨てるに忍びなく、悩ましいです。

古いPCが余っていたりしませんか?
デュアルブートという手もありますし。

> 本屋に「できる」シリーズの「できる! リナックス」があったのにはビックリ
> しましたが。 初心者のすそ野が広がっているんですねぇ。

「できる! WSH」は、ないのか!?

Linux本の多くが、インストールの解説だけで半分以上(ほぼ全部の場合も!)を
占めているという現状、これがLinuxの現実なんだと思います。

もちろんサーバー用OSとしてみればたいしたもんです。
別にサーバーを構築する予定もないのですが、
「Linux magazine books Linuxサーバ入門 Red Hat系対応」 清水正人 著 (ASCII)
という本が手元にあって、なかなか良いですよこの本。
サーバーのことが何にもわからなかった私でも、なんとなく雰囲気をつかむことが
できました。

> ※)最近話題の常時接続を夢見て、Yahoo BB!に申し込みはしたが音沙汰なし。

あはは、やっぱりY!BBは、相当ダメなのかも。
登場当初は友人にも勧めていたんですが、今は「あれだけはやめといた方がいいかも」
とか言ってます(^^;

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 09月 04日 00時 22分 23秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

ああ、HDDの異音は心臓に悪いなあ。



To: TOYAマン さん

> プリンターを変数obj_Itemに取得したとして、
> obj_Item.InvokeVerb”プロパティ(&R)”
> とやると、確かにプリンターのプロパティが表示されるのですが
> 設定の終了=つまり「OK」ボタンを押す前に次の処理が実行されてしまいます。
> プロパティ・ウィンドウの終了待ちを行う方法ってあるんでしょうか?

WshShell.AppActivateの戻り値で判断するという手がありますが、
AppActivateするたびにプロパティウィンドウが前面表示されるので、
あまり良くはないです。
(詳しいやり方はログを参照してください)

もし、プロパティウィンドウで設定することが、単なるレジストリの変更と
等価なのであれば、WshShell.RegWriteなどが使えるのですが…。



To: UK さん

> WSHでインターネットからのダウンロードで圧縮ファイルを
> 自分のパソコンの指定したフォルダーに整理したいのですが
> 御教授いただけないでしょうか

非常に曖昧なご質問で、正直何とお答えしたものかわかりません。

1. WSHを使ってダウンロードそのものを実行するのか、単にダウンロードした
ファイルを操作対象とするのか。

2. 圧縮ファイルの形式は何か。圧縮ファイルはWSHを使って展開するのか。

3. どのように整理するのか。拡張子毎? 日付?

少なくともこれくらいの情報がないと、何をなさりたいのかすら
私にはわからないです。
さらに、以上を踏まえて、どこが不明な部分なのかを明らかにしてください。
# 全部ってのは、なしです(^^;



To: たなかやすお さん

> わざわざNGまで検索いただきましてありがとうございます。社内ではこのマ社の
> NGサーバーには接続できないもので....

まあ、ずいぶん古い記事なので、現在はダウンロードできないでしょうね。
microsoft.public.scripting.wshの記事なら、2000年1月分からほぼ
全記事(約23,000)保存しています。
私にとっては貴重なデータベースです。

> そうなりますと、マ社からDLしたVBScript5.5ドキュメントのヘルプファイル
> の表現は間違いなのか、という気がしてきました。

WSHのヘルプは間違いが多いことで有名ですが、VBSのヘルプもそうなのかもしれません。

が、DCOMの構成をきちんとしてから、もう一度トライしてみては?
DCOMに関してはこの掲示板の過去記事に、WMIと絡んで何回か出てきます。
ただし、私自身がDCOMに関してあまり詳しくないので、嘘を書いているかもしれません(^^;

Excelのバージョン情報くらいなら、WMIのレジストリプロバイダを使って
他PCのレジストリにアクセスして調べることができるかもしれません。
(やり方はログ参照)

また、WSH5.6(現在はβ)のWSHRemoteを使えば、他PCでスクリプトを実行できます。
これはどうでしょうか?



To: チョコ さん

> 「あるウインドウ(a.txt)が表示されてから10秒たったら、b.exeという
> モジュールを実行する」

WScript.Sleep 10000
でOKです。
Sleepメソッドの引数の単位はミリ秒です。


To: 松島 さん

> またもや御無沙汰してしまいました。
> 2週間以上の遅レスですが、御勘弁を(^^;;)。

まだ2週間くらいしか経ってないんですか。
ログが流れるのがずいぶん速かったからなあ…。

> ありがとうございます。どこを調べれば良かったんでしょうか。
> ヘルプやコマンドラインで/?を付けたりしても出て来なかったので……。
> #解法より解法の見付け方が知りたい教エテ君(^^;)。

たしか、Win95とかでは、wavファイルがsndrec32.exeに関連付けられていたんですが、
その関連付けのデフォルトアクション「再生」がsndrec32.exe /play /stop "%1"だったのです。
それでこのオプションが広く知られることになったのです。(ほんとかな)

> さすがは、元・乙女の園、だけはある……のか??(いつの昔だ^^;)
> 一般ゲーム機やギャルゲーをモチーフにした同人誌のブースは多いのに、
> その元となったものに通じるソフト/ハード系の扱いは冷たい。

ソフト/ハード系…。
形容詞かと思った。

> m1v(MPEG1の画像のみフォーマット)だったので、うまく扱えなかったような…(気の性かも)。
> 直前に知人宅でNetShowのActiveXコントロールをVBに張り付けたら、VBが落ちるし(これはSP当ててないのが原因かも^^;)。

MediaPlayerなら問題なかったんじゃないかと。

> 敢えて言うなれば、1つのファイルに、XHTMLとCSSとJavaScriptとVBScript……
> というケースに対応し得るものが欲しいかなあ(困難?)。

HTAではこれが現実にありますからね。

> いくつか、便利なものが出ているみたいです。
> 「選択範囲をgoogleで検索する」とか。

これはGoogle Toolbarにもれなくついてきますよね。
そういえばGoogle Toolbarの日本語版が出てます。
http://toolbar.google.com/intl/ja/

> 少し毛色が異りますが、Linux系で出来る
> 「ホイールボタン+リンク=新しいウィンドウで開く」
> 「何もないところでホイールボタン=クリップボードor選択範囲のURLを開く」
> をWindowsで再現させたいなあと思うところ。

IE5.5だったかIE6.0だったかには、ホイール関係のイベントが実装されたので、
再現も可能でしょう。
幸い、WSHとかからIEのDOMに簡単にアクセスできますので、やってみる
価値はありそう。

> 上位互換性は、上位仕様の下位互換性によって「保たれる」ものだと思います。
> (下位仕様側の)上位互換性を徹底(つまり改良)というのは、変だと思います。
> #言葉の表現的に、ちょっと気になって(^^;)。

すいません、上位互換、下位互換という言葉を使うときはいつも頭が混乱します。
ご指摘もよくわかりません…精進します。

> それよりも、Win 9x 4.90 (つまりME)なUAがかなり多いのが興味深かったり。

MEってやっぱり増えてるのか。

> > 返値もへんちと読み…ません。
> > 変換すると「返り血」になるので怖い。
>
> 「戻り値」と書きましょう(笑)。

はーい(笑)
というか、返り値って言葉は、あまり一般的でないのかも。
# まさか私が勘違いして覚えた言葉?

> ついでに「値渡し」「参照渡し」にならって、「引数」改め「渡し値」とか(変かも)。

渡値

わたち
と読むのはいかが。

関係ないですけど、「閾値」何と読みますか?
しきいち、は実は間違い。正解は「いきち」。これも「生き血」なんで怖い。

> > Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.2914)
>
> うちのログに残っていたの謎のUAはむたぐちさんだったんですね(笑)。

にくいよ。(謎)
って、このUAな人は全世界で見てもかなり少数派のはず。
もしこのUAを見かけたら私かもしれません。
でも、どこで見かけたかは言わないように。

> UAが書き変わるということは、どこか関連コンポーネントが置き換わったのかなあ。

UA名ってコンポーネントのDLLに直書きなんですかねえ。
IEコンポなタブブラウザとかでは、自由に書き換えできるものもありますし、
案外レジストリあたりにあるのかも。

> > リナックスは難しいから触りたくないしー。
>
> Windowsと同程度に容易に扱う方法がないこともないのですが、そうすると
> デフォルト設定のWindowsと同程度に穴だらけ/システム混乱に陥り易いです(^-^;)。
> きっちり適切に扱うためには、WindowsでもLinuxでもそれなりの学習が必要です。
> #商用版のディストリビューションを見てみると、印象が変わるかも。

そうなんですよね。
わかっていないと逆にWindowsよりも怖いかもしれません。
という私自身も、よくわからないままインターネットにつなげてみたりしていましたね。

> 私は同じ気軽でも、悪い習慣と、素晴らしい簡潔さ、は区別したいなあ、と思ってます。
> 良くない手抜きを気軽と称して推奨される事が多くて、ときどき小さな胸(?)が痛みます。

まあスクリプトはプログラマだけのものじゃないですし、みなさんに気軽に使って
いただければいいんじゃないかと、個人的には思います。

> > 2chは…もうどうでもいいや。
>
> ぷぷっ。(笑)

まあ、あのオークションは、なかなか壮大なネタではありました。
# 転送量云々の話はネタじゃないらしいですが。

筑集眺餅 さん 2001年 09月 03日 23時 53分 41秒

To:チョコさん

>今回は、時間に関する質問です。例えば・・・・
>「あるウインドウ(a.txt)が表示されてから10秒たったら、b.exeという
>モジュールを実行する」
>というような使い方って出来るのでしょうか??

ども。 初心者に毛の生えた筑集眺餅です。
ウィンドウを表示しておいて、10秒待ってから b.exeを実行する、って
ことでしょうか?
なら、WScript.Sleep 10000 で、10秒スリープすればいいかな。
時間をきっちり測りたいなら Time関数を使って時刻を調べながらループ
させるとか。

To:松島さん

>Windowsと同程度に容易に扱う方法がないこともないのですが、そうすると
>デフォルト設定のWindowsと同程度に穴だらけ/システム混乱に陥り易いです(^-^;)。
>きっちり適切に扱うためには、WindowsでもLinuxでもそれなりの学習が必要です。
>#商用版のディストリビューションを見てみると、印象が変わるかも。

J&Pとかに並んでいるパッケージのリナックスって数千円のレベルですよね。
安いなー、と思いながら、今ある Win環境を捨てるに忍びなく、悩ましいです。
本屋に「できる」シリーズの「できる! リナックス」があったのにはビックリ
しましたが。 初心者のすそ野が広がっているんですねぇ。

※)最近話題の常時接続を夢見て、Yahoo BB!に申し込みはしたが音沙汰なし。
地方都市では、やっぱり NTT に頼るべきか・・・。
でも、千円亭主には辛い選択だよなー。

松島 さん (matsushima@popup.org) 2001年 09月 03日 18時 12分 12秒
URL:http://www.popup.org/ai/

またもや御無沙汰してしまいました。
2週間以上の遅レスですが、御勘弁を(^^;;)。


To: あきらさん

> /Play /Close とオプションつければできるはずですけど。
> 外してたらごめんなさい。

ありがとうございます。どこを調べれば良かったんでしょうか。
ヘルプやコマンドラインで/?を付けたりしても出て来なかったので……。
#解法より解法の見付け方が知りたい教エテ君(^^;)。


To: むたぐちさん

> たしかに大雑把ですけど、要するに「その他」の括りなんじゃないですか。
> 大多数は同人誌だし。

さすがは、元・乙女の園、だけはある……のか??(いつの昔だ^^;)
一般ゲーム機やギャルゲーをモチーフにした同人誌のブースは多いのに、
その元となったものに通じるソフト/ハード系の扱いは冷たい。
コミケ委員会のIT革命は遠いのか!?(苦笑)

> mci32.ocx(マルチメディアMCIコントロール)はダメでしょうか。

m1v(MPEG1の画像のみフォーマット)だったので、うまく扱えなかったような…(気の性かも)。
直前に知人宅でNetShowのActiveXコントロールをVBに張り付けたら、VBが落ちるし(これはSP当ててないのが原因かも^^;)。

> > 暗号化には、可逆的な暗号化と、不可逆的な暗号化があると思うのですが、
> 参考になります。というか、その区別さえできていなかったです。

ボケてました。秘密鍵方式と公開鍵方式です。
ダイジェスト(MD5やCRC32)等によるハッシュ化とは別に考えないといけませんでした。
またいい加減なことを書いてしまいました。反省(^^;)。

To: いちにいさん

> 60種類近くのプログラム言語のキーワードを色分け表示しながら編集できる。

パーサ(文法解析)とスタイラ(色づけルールとか)が分離されてて、
パーサはネット経由で自動更新が出来ると便利そうな気がします。
パーサ部分は、誰がルールを作っても、
「これは制御構文」「これは変数」「これは演算子」「これはユーザ関数」というのは
同じでしょうから、CVS的に誰でも容易に改変できるようにしたり、というのが理想かも。
#複数のツールでルールを共有できるようになれば、
#「車輪をみんなで再発明」するような苦労もないでしょうし(笑)。

敢えて言うなれば、1つのファイルに、XHTMLとCSSとJavaScriptとVBScript……
というケースに対応し得るものが欲しいかなあ(困難?)。


To: むたぐちさん

> IEのコンテキストメニューに組み込むタイプのスクリプトを書いてみました。

いくつか、便利なものが出ているみたいです。
「選択範囲をgoogleで検索する」とか。

少し毛色が異りますが、Linux系で出来る
「ホイールボタン+リンク=新しいウィンドウで開く」
「何もないところでホイールボタン=クリップボードor選択範囲のURLを開く」
をWindowsで再現させたいなあと思うところ。

> そもそも連想配列って何が便利なんだろうか。

数値でなく「名前」で対応付けられる所に手軽さと魅力を感じます。

> 上位互換性が徹底すれば問題ないと思います。

上位互換性は、上位仕様の下位互換性によって「保たれる」ものだと思います。
(下位仕様側の)上位互換性を徹底(つまり改良)というのは、変だと思います。
#言葉の表現的に、ちょっと気になって(^^;)。


To: いちにいさん

> アクセスログ見て、ネスケユーザって、どの位居ます?
> WSH系サイトで。(笑)

うちはWSH系サイトじゃないですけど、Netscape4.x系はMacな人以外では少ないです。
#Mozilla/3.x と偽る検索ロボットは多いですけど。
あと、ぼちぼち、Mozilla/5.0系(Mozilla or Netscape6.x)も増え始めようとしているっぽいです。
それよりも、Win 9x 4.90 (つまりME)なUAがかなり多いのが興味深かったり。


To: Lib30さん

> ZDNNに出てた「特定WebにアクセスするとPCに致命傷」
> を与えるJavaScriptに対してパッチでも当てたのでしょうか。

1年ほど昔にfixが出ているjavaに関するバグが原因です。
ユーザの怠慢、メディアの怠慢、Microsoftの怠慢、とも言えると思います(^^;)。


To: むたぐちさん

> 返値もへんちと読み…ません。
> 変換すると「返り血」になるので怖い。

「戻り値」と書きましょう(笑)。
ついでに「値渡し」「参照渡し」にならって、「引数」改め「渡し値」とか(変かも)。

> Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.2914)

うちのログに残っていたの謎のUAはむたぐちさんだったんですね(笑)。
UAが書き変わるということは、どこか関連コンポーネントが置き換わったのかなあ。


To: Lib30さん

> ただでさえ「なんかJavaと関係ありそう」というのが
> さらに強まってしまい、初心者に無用な誤解を与えてしまいそうだからです。

ECMAScript互換(っぽい)スクリプト言語、と言ってみたり。


To: 筑集眺餅 さん

> なんだが、Set Nothing しないでスコープ外になった時にどうなるかってのが
> 判らんです。

理想的なガベージコレクションが備わっていれば、その時点でメモリが開放されるはずです。

> リナックスは難しいから触りたくないしー。

Windowsと同程度に容易に扱う方法がないこともないのですが、そうすると
デフォルト設定のWindowsと同程度に穴だらけ/システム混乱に陥り易いです(^-^;)。
きっちり適切に扱うためには、WindowsでもLinuxでもそれなりの学習が必要です。
#商用版のディストリビューションを見てみると、印象が変わるかも。


To: むたぐちさん

> スクリプトはプログラムとは違うんだから、もっと気軽に書いてもいいんじゃないか、
> というスタンスです。

私は同じ気軽でも、悪い習慣と、素晴らしい簡潔さ、は区別したいなあ、と思ってます。
良くない手抜きを気軽と称して推奨される事が多くて、ときどき小さな胸(?)が痛みます。

> XPのメインターゲットはWin98ユーザーですからね。

XPの次のOSでは、NT4やWin98がサポート打ち切りになって直接アップグレードが
出来なくなるのではないか、という噂がちらほらと……。

> 2chは…もうどうでもいいや。

ぷぷっ。(笑)


To: 筑集眺餅 さん

> (でも、職場では95が結構現役だったりする。 (^^;)

企業のライセンス管理者/マシン管理者にMicrosoftの評判が悪いゆえんです。
趣味的個人用途ならまだしも、ビジネス用途では踏んだり蹴ったりな場面が多いです。



チョコ さん 2001年 09月 03日 17時 47分 24秒

いつも親切に回答して頂いて本当に皆さんには感謝しております。
何回も投函させていただいてますが、未だに初心者ですので、よく
わからない事だらけですみません。
今回は、時間に関する質問です。例えば・・・・

「あるウインドウ(a.txt)が表示されてから10秒たったら、b.exeという
モジュールを実行する」

というような使い方って出来るのでしょうか??


たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 09月 03日 09時 25分 28秒

TO: むたぐち さん

>もしかすると、それでは希望どおりの動作(myServerのExcelのバージョン表示)を
>しないということでしょうか。

そうなんです。
リモート上のExcelバージョンが返ると思っていましたが、
自機にあるExcelのバージョンしか返ってきません。

>一応microsoft.public.scripting.wshを検索してみたところ、
<Start Excel on remote Win9x machine? というSubjectのスレッドがありま
>した。
>それによると、VBSのバージョンが5.1以上で、リモート・呼び出し側双方がNT
>で、DCOMの構成が適切である場合、(Excelではなく)MTSのコンポーネントの
>インスタンスをリモートマシン上で作成できたということです。
>Excel等のOffice系のオブジェクトで成功したという報告例は、私の見た限り
>なかったです。

わざわざNGまで検索いただきましてありがとうございます。社内ではこのマ社の
NGサーバーには接続できないもので....
そうなりますと、マ社からDLしたVBScript5.5ドキュメントのヘルプファイル
の表現は間違いなのか、という気がしてきました。

UK さん 2001年 09月 03日 02時 51分 45秒

WSHでインターネットからのダウンロードで圧縮ファイルを
自分のパソコンの指定したフォルダーに整理したいのですが
御教授いただけないでしょうか

TOYAマン さん 2001年 09月 02日 14時 48分 18秒

こんにちは。はじめまして
時折,ROMさせていただいていますが、はじめてのカキコです。

何しろ、初心者モードですので、
よくわからない事だらけなのですが

プリンターを変数obj_Itemに取得したとして、
obj_Item.InvokeVerb”プロパティ(&R)”
とやると、確かにプリンターのプロパティが表示されるのですが
設定の終了=つまり「OK」ボタンを押す前に次の処理が実行されてしまいます。
プロパティ・ウィンドウの終了待ちを行う方法ってあるんでしょうか?

仙人のような熟達された皆様、
どうかさまよえる子羊ならぬ子豚に愛の手を...m(_ _)m

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 09月 01日 14時 25分 26秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 筑集眺餅 さん

> え、Win95って、サポート打ち切られてましたか? (; ;)

http://www.microsoft.com/japan/win95/availsupport.htm
によると、販売は終了、有償サポートのみは継続されるものの、無償サポートは
打ち切りみたいです。

> 記事だと、「Windows98までのOSは、・・・不安定な土台の上に
> 増築を繰り返した建物が乗っているような状態であったといえる。」
>
> おいおい、そんなの売ってたの?

そんなのでもみんな買うくらいの、まだまだ発展途上な世界です。



To: 福島 さん

> IE 4 から IE の左側にお気に入り一覧が出るじゃないですか。
> WSH であのバーを開くことって出来るのでしょうか?

http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/src/showbar.lzh
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/src/showbar2.lzh
をどうぞ。

福島 さん 2001年 09月 01日 12時 39分 11秒

はじめまして福島です。
IE 4 から IE の左側にお気に入り一覧が出るじゃないですか。
WSH であのバーを開くことって出来るのでしょうか?



筑集眺餅 さん 2001年 09月 01日 09時 03分 45秒

To:むたぐちさん

>Win95はもうサポートが打ち切られたんじゃなかったでしたっけ。
>XPのメインターゲットはWin98ユーザーですからね。
>(MEユーザーは数が少ないので主力ではない)

え、Win95って、サポート打ち切られてましたか? (; ;)
ま、個人的には もう使ってないからいいけどね。
(でも、職場では95が結構現役だったりする。 (^^;)

アスキー9月号を買ってきてWinXPの記事を見ましたが、確かに
パッケージ買いはWin98ユーザがターゲットですね。
記事だと、「Windows98までのOSは、・・・不安定な土台の上に
増築を繰り返した建物が乗っているような状態であったといえる。」

おいおい、そんなの売ってたの?

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 09月 01日 01時 53分 59秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

2chは…もうどうでもいいや。


To: たなかやすお さん

> HTMLにこのFunctionを組み込んで "myServer" にネットワークコンピュタ
> 名を入れて動作するようにするにはどうしたらいいのでしょうか?

単にGetVersionの内容を置き換えればいいだけでは?

もしかすると、それでは希望どおりの動作(myServerのExcelのバージョン表示)を
しないということでしょうか。

一応microsoft.public.scripting.wshを検索してみたところ、
Start Excel on remote Win9x machine? というSubjectのスレッドがありました。
それによると、VBSのバージョンが5.1以上で、リモート・呼び出し側双方がNTで、
DCOMの構成が適切である場合、(Excelではなく)MTSのコンポーネントのインスタンスを
リモートマシン上で作成できたということです。Excel等のOffice系の
オブジェクトで成功したという報告例は、私の見た限りなかったです。

ASPは今回は関係ないみたいでした。そもそもASPではServer.CreateObjectを
使うのが定石みたいですし…。



To: kenji matuzaki さん

> クリップボード(テキスト)の内容をファイル名にして、テキストファイルを作りたいのですが、どのようにすればいいのか”とんと”わかりません。
> よろしければ教えていただきたいのですが・・・・

テキストファイルの作り方はLesson15を、クリップボードの内容を取得する方法は
22-10 管理人むたぐち 2000-09-15 02:20 等を参照してください。

kenji matuzaki さん (cbs49310@pop21.odn.ne.jp) 2001年 08月 31日 17時 18分 09秒

はじめまして、松崎です。

クリップボード(テキスト)の内容をファイル名にして、テキストファイルを作りたいのですが、どのようにすればいいのか”とんと”わかりません。
よろしければ教えていただきたいのですが・・・・

たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 08月 31日 17時 01分 29秒

TO: むたぐちさん

すみません、初回投稿のASPの件ですがもう少し教えていただけませんか。

>あれはASP(HTMLも?)から呼ぶVBSだけに有効で、WSHから指定しても無効だった
>ような気がします
**********************************************
次のコードは、"Myserver" という名前のリモート ネットワーク コンピュータ上で実行されている、Excel のインスタンスのバージョン番号を返す例です。
Function GetVersion
Dim XLApp
Set XLApp = CreateObject("Excel.Application", "MyServer")
GetVersion = XLApp.Version
End Function
**************************************************************

HTMLにこのFunctionを組み込んで "myServer" にネットワークコンピュタ
名を入れて動作するようにするにはどうしたらいいのでしょうか?


たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 08月 31日 16時 45分 57秒

TO: むたぐちさん

> Function GetVersion()
>> Dim XLApp
>GetVersionは関数名なのでDimしてはいけません。

削りましたが、まだ動作しませんでしたので、

>> Set XLApp = CreateObject("Excel.Application")
>> GetVersion = XLApp.Version
>> XLApp.close   -------------- ここと
>>Set XLApp = Nothing ----------- ここを削りました。
>>End Function

VBScriptとして *.vbsファイルで実行していたときには、Excelをクローズ
して後始末するのにこの2行が必要でしたが、HTMLでは返って災いになっていた
ようです。この2行をけずったら正常に動作しました。

後半の件は全文に近い形式で教えていただきありがとうございました。
Function文の個所は上記同様に災いの2行を削った状態で実行できました。
spanの意味がよく分かりました。このタグの場所に msg.innnertextが
id に関係して実行結果を書き出すと理解しました。
どうもありがとうございました。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 08月 31日 11時 39分 30秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 筑集眺餅 さん

> それと、もひとつ気になるのがWin95からの直接のアップグレードが
> なさそうな事。(一度、98とかにアップグレードすればいいけど)

Win95はもうサポートが打ち切られたんじゃなかったでしたっけ。
XPのメインターゲットはWin98ユーザーですからね。
(MEユーザーは数が少ないので主力ではない)



To: たなかやすお さん

> <HTML>
> <HEAD><TITLE>A Simple First Page</TITLE>
> </HEAD>
> <BODY>
> <H3>A Simple First Page<BR>
> Excel Version TEST 2</H3><HR>
> <SCRIPT LANGUAGE="VBScript">
> document.write GetVersion
> Function GetVersion()
> Dim XLApp,GetVersion

GetVersionは関数名なのでDimしてはいけません。

> Set XLApp = CreateObject("Excel.Application")
> GetVersion = XLApp.Version
> XLApp.close

closeメソッドというのはないのでは?

あと、ブラウザのセキュリティ機構により、ローカル実行時でも
警告ダイアログが出ます。HTAにすれば問題ありません。

> 後半のお勧めについてですが、
> >本来なら、<head>内に<script>を入れておき、<body>に<span id="msg">とか
> >を用意しておき、
> >Sub window_onload()
> >msg.innerText=GetVersion
> >End Sub
> >のようなコードを書いたほうが
>
> ここも書き方がよく分からなくてすみません。
> このケースについても私のコードを直して全文を教えていただけませんで
> しょうか?

<html>
<head><script language="vbscript">
Sub window_onload()
msg.innerText=GetVersion
End Sub

Function GetVersion()

End Function
</script></head>
<body><span id="msg"></span></body></html>

たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 08月 31日 10時 28分 06秒

TO: むたぐちさん

お返事ありがとうございます。
  <body>内に<script>を入れる場合、Functionの前に
  document.write GetVersion 
  を入れるといいと思います。
とのお勧めを早速やってみました。が、動作しません。
コードの間違いがありましたら教えていただけませんか?
***********************************************
<HTML>
<HEAD><TITLE>A Simple First Page</TITLE>
</HEAD>
<BODY>
<H3>A Simple First Page<BR>
Excel Version TEST 2</H3><HR>
<SCRIPT LANGUAGE="VBScript">
document.write GetVersion
Function GetVersion()
Dim XLApp,GetVersion
Set XLApp = CreateObject("Excel.Application")
GetVersion = XLApp.Version
XLApp.close
Set XLApp = Nothing
End Function
</SCRIPT></BODY></HTML>
*************************************************
後半のお勧めについてですが、
>本来なら、<head>内に<script>を入れておき、<body>に<span id="msg">とか
>を用意しておき、
>Sub window_onload()
>msg.innerText=GetVersion
>End Sub
>のようなコードを書いたほうが

ここも書き方がよく分からなくてすみません。
このケースについても私のコードを直して全文を教えていただけませんで
しょうか?
よろしくお願いします。

筑集眺餅 さん 2001年 08月 31日 06時 17分 31秒

To:WSHShell.Sendkeys "^%{DEL}"さん、管理人むたぐちさん

>スクリプトA:
>プロシージャ外で、はじめて未宣言の変数を使うと、それは暗黙のうちにグローバ>ルな変数として扱われる。
>
>スクリプトB:
>プロシージャ内で、はじめて未宣言の変数を使うと、それは暗黙のうちにプライベ>ートな変数として扱われる。

あぁ、そういうことだったんスか。 ぅーん、ナットク。(^^;;)
前言撤回します。m(_ _)m

>XPは強気な価格設定だとは思いますが、買う人は買うでしょう。
>まあ、Win2000持っている人は要らない気がします。
>Win2000から移行してもらいたいなら、Win2000とWinMEからのアップグレード版を
>同じ値段にはしないでしょうし。

それと、もひとつ気になるのがWin95からの直接のアップグレードが
なさそうな事。(一度、98とかにアップグレードすればいいけど)

Win2kを買う時にRCからアップグレードしたから前のWin95の
使用権が残っているんだが、今更Meにアップグレードするのもなぁ。
ま、いっか。(^^;)

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 08月 31日 01時 42分 21秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 筑集眺餅 さん

> で、プロシージャの中でしか使ってなくてもグローバルな変数になるんだと
> すると、再帰呼び出しで使うとカナリ ヤバイっすよ。

え?
WSHShell.Sendkeys "^%{DEL}"さんのスクリプトをよく見て、実行してみてくださいな。

スクリプトA:
プロシージャ外で、はじめて未宣言の変数を使うと、それは暗黙のうちにグローバルな変数として扱われる。

スクリプトB:
プロシージャ内で、はじめて未宣言の変数を使うと、それは暗黙のうちにプライベートな変数として扱われる。

という意味ですよん。

> For SubFolder In Fol.SubFolders
> Search SubFolder.Path
> Next
>
> For 文の中で呼び出した Searchプロシージャの中で、元のFor文に使ってる
> SubFolder や Fol の中身を書き換えてるッてことっすよ。

ですから、プロシージャ外でFolやSubFolderという変数を使っていない限り問題ないです。

> プロシージャでしか使わない変数はプロシージャの頭で Dim 宣言しとくに
> 限りますぜィ。

それはそうかもしれないですが、私はスクリプトの記述の容易さを生かすべく、
なるべく変数の宣言は避けるようにしてます。
スクリプトはプログラムとは違うんだから、もっと気軽に書いてもいいんじゃないか、
というスタンスです。
Option Explicit嫌い。

> ところで、WindowsXPの値付けってどうなってるんすかねー。
> ゲートウェイが撤退してコンパックが58900円パソコンを売るような
> PC激安時代に突入しているのに、Win2kやWinMeより高いって
> のは納得いかん。 競争のない独占企業は好き放題だなー。

XPは強気な価格設定だとは思いますが、買う人は買うでしょう。
まあ、Win2000持っている人は要らない気がします。
Win2000から移行してもらいたいなら、Win2000とWinMEからのアップグレード版を
同じ値段にはしないでしょうし。

バンドルされるWindowsがMEじゃなくなるというのは、すばらしいことです。



To: たなかやすお さん

> Function GetVersion
> Dim XLApp
> Set XLApp = CreateObject("Excel.Application", "MyServer")
> GetVersion = XLApp.Version
> End Function
> を HTLMに埋め込んだ例文を教えていただけませんか。
> <Script Langage="VBScript">......</script>
> を置く位置(<BODY></BODY>の間ですか?)と Functionの使い方が
> よく理解できないのです。

<body>内に<script>を入れる場合、Functionの前に
document.write GetVersion
を入れるといいと思います。
でも、あまり美しくはないですね(^^;

本来なら、<head>内に<script>を入れておき、<body>に<span id="msg">とかを用意しておき、
Sub window_onload()
msg.innerText=GetVersion
End Sub
のようなコードを書いたほうが、"それらしい"気がします。



To: てる さん

> 今、動作を確かめましたが、なんかそのように動いてるようですね。
> まだ、分からないのですが、なぜ、ループを2つに分けてるのに、
> このように動作するのでしょうか?

DocumentCompleteイベントは、ページがロード完了するたびに発生するからです。



To: WSHShell.Sendkeys "^%{DEL}" さん

> >Registry Keyが存在するかどうか知りたい時には、どうしていますか?
>
> RegRead して、文字列が何も返ってこなかったら、Keyがないと判断すればいいでしょう。
> その前に On Error Resume Next しておく必要がありますけど。

それだと、空のキーだった場合と区別できないですね。
RegReadして、エラーが発生した場合Keyがないと判断する方が良いでしょう。

筑集眺餅 さん 2001年 08月 31日 00時 07分 39秒

To:WSHShell.Sendkyes "^%{DEL}"さん
(ソースの引用する所で、「さん」付け抜けてました。ごめんなさい。m(__)m)

スクリプトまで書いてもらってどうもです。(^^)

で、プロシージャの中でしか使ってなくてもグローバルな変数になるんだと
すると、再帰呼び出しで使うとカナリ ヤバイっすよ。

For SubFolder In Fol.SubFolders
Search SubFolder.Path
Next

For 文の中で呼び出した Searchプロシージャの中で、元のFor文に使ってる
SubFolder や Fol の中身を書き換えてるッてことっすよ。
プロシージャでしか使わない変数はプロシージャの頭で Dim 宣言しとくに
限りますぜィ。

ところで、WindowsXPの値付けってどうなってるんすかねー。
ゲートウェイが撤退してコンパックが58900円パソコンを売るような
PC激安時代に突入しているのに、Win2kやWinMeより高いって
のは納得いかん。 競争のない独占企業は好き放題だなー。
(でも、欲しい気もするしー。リナックスは難しいから触りたくないしー。)

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 30日 21時 28分 32秒

To:筑集眺餅 さん

>このソースだと、Searchプロシージャでしか使っていない変数が、
>Fol, File, SubFolder の3つで、プロシージャの中では Dim で
>宣言してませんよね。
>そうすると、この3つの変数の適用範囲はどうなるんすか?
>ローカルなプロシージャレベル変数?、それともグローバルな
>スクリプトレベル変数?

下の2つのスクリプトを比べてみましょう。


スクリプトA---------------------------------------------

On Error Resume Next
Dim str_g
str_g = "Global"

Msgbox "str_g : " & str_g & VBCR & "str : " & str
TestScript
Msgbox "str_g : " & str_g & VBCR & "str : " & str

Sub TestScript
str = "Global"
End Sub


スクリプトB---------------------------------------------

On Error Resume Next
Dim str_g
str_g = "Global"

TestScript
Msgbox "str_g : " & str_g & VBCR & "str : " & str

Sub TestScript
str = "Global"
End Sub


To:Namng

>IMEがMS-IMEであれば、プロパティのダイアログのオートコレクトタブにある
>「全角/半角」で句読点を全角に変換するように設定できます。

とりあえず設定してみました。文字化けしてないかな?

To: いなの さん

>Registry Keyが存在するかどうか知りたい時には、どうしていますか?

RegRead して、文字列が何も返ってこなかったら、Keyがないと判断すればいいでしょう。
その前に On Error Resume Next しておく必要がありますけど。


To: むたぐち さん

>関係ある話ですが、SendKeysであのコマンドを送出できましたっけ?
PC上ではなく、私の頭の中で動くんです。

てる さん 2001年 08月 30日 16時 23分 33秒

今、動作を確かめましたが、なんかそのように動いてるようですね。
まだ、分からないのですが、なぜ、ループを2つに分けてるのに、
このように動作するのでしょうか?

てる さん 2001年 08月 30日 15時 44分 16秒

むたぐちさん

ありがとうございます。
でも、...なんか、私のやりたかったこととはちがうようです。私の目的と
しては、株価情報等をリアルタイムで取得したかったのです。こういうプログ
ラムってできないものなのでしょうか?

作って頂いたコードでは、ループが2つに別れてますので、刻々と変化するソ
ースコードを取得できません。変化し終わってから、後でトレースすることし
かできないです。

なんか、不思議ですが、下のjのループで表示しているソースは過去の履歴を
ずっと覚えてるんですね。

いなの さん (Gaku.inano@excite.co.jp) 2001年 08月 30日 14時 22分 35秒

はじめまして。
WSHではRegistryを扱うMethodは RegDelte, RegRead, RegWrite
の3つだけのようです。 Registry Keyが存在するかどうか知りたい
時には、どうしていますか? 
もし知っていたら教えてください。 

たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 08月 30日 10時 20分 16秒

TO: むたぐち さん

>あれはASP(HTMLも?)から呼ぶVBSだけに有効で、WSHから指定しても無効だった
>ような気がします。

ありがとうございます。もう少し補足していただけませんでしょうか。
Function GetVersion
Dim XLApp
Set XLApp = CreateObject("Excel.Application", "MyServer")
GetVersion = XLApp.Version
End Function
を HTLMに埋め込んだ例文を教えていただけませんか。
<Script Langage="VBScript">......</script>
を置く位置(<BODY></BODY>の間ですか?)と Functionの使い方が
よく理解できないのです。

kia さん 2001年 08月 30日 06時 50分 23秒

>WSHShell.Sendkeys "^%{DEL}" さん
>まずファイルパスを全て記憶して、それから不要かどうかを調べているといった感じですが、
>そうする意味がよくわかりません。
ファイルのパスまではいちいち記憶してませんが、Folderだけ先に取得しています。
setTimeout()で実行される部分をできるだけ偏り無く実行したいと思いました

>ちょっとSlowlyな気が・・・
フリーズさせないつもりで間延びさせてるわけだから…。

筑集眺餅 さん 2001年 08月 30日 06時 31分 02秒

To:むたぐちさん

ファイルの再帰検索でフリーズする、という一件に関連して、
この辺どうなのか、教えてもらいたい事があるんですけど。

44-23 WSHShell.Sendkeys "^%{DEL}"のソース(一部省略)

>Sub Search(Obj)
> Set Fol=Fs.GetFolder(Obj)
> For Each File In Fol.Files
>  If UCase(Fs.GetExtensionName(File.Name))="TMP" Or ... Then
>   Count.InnerText=Count.InnerText+1
>   TrashList.InnerHTML=TrashList.InnerHTML&File.Path&" "&File.Size&"<BR>"
> End If
> Next
> For Each SubFolder In Fol.SubFolders
>  Search SubFolder.Path
> Next
>End Sub

このソースだと、Searchプロシージャでしか使っていない変数が、
Fol, File, SubFolder の3つで、プロシージャの中では Dim で
宣言してませんよね。
そうすると、この3つの変数の適用範囲はどうなるんすか?
ローカルなプロシージャレベル変数?、それともグローバルな
スクリプトレベル変数?

もしグローバルなものなら、再帰呼び出しっつーのはヤバいっすよね。

それと、もう一つ 気になっているのが・・・

>43-33のスクリプトを流用して、検証してみようと思ったんですが、
>あのスクリプト、Setしているところがないので検証しようがなかった(^^;
>返り値がオブジェクトになるプロパティやメソッドを、変数に入れることなく
>その場で使えば、そのオブジェクトの参照はその場限りになると思うのですが
>どうなんでしょう。

43-33 むたぐちさんのソース(一部略)
>Sub FileSearchByString(folder) '文字列として渡した場合
> Set oFolder = Fs.GetFolder(folder)
> iFiles = iFiles + oFolder.Files.Count
>
> For Each oSubFolder In oFolder.SubFolders
>  Call FileSearchByString(oSubFolder.Path)
> Next
>End Sub

oFolder は一度フォルダーオブジェクトを Set されて、Set Nothing され
ないままプロシージャが終わっていますよね。 これ、どうなるんでしょ?

それと、For Each oSubFolder In ... で、ループ変数の oSubFolder
にファイルオブジェクトを Set してますよね。(Set って言葉はないけど)
ループが回っている間は、次のファイルオブジェクトが Set される時に
前のオブジェクトの参照がなくなって前のオブジェクトは解放されるん
だろうけど、ループの最後で oSubFolder にSet されたファイルオブジェクト
は、Set Nothing されないままプロシージャが終わりますよね。
これ、どうなるんでしょ?

VBSのマニュアルだと、Nothin オブジェクトの項で
「メモリとシステム リソースは、Set ステートメントを使ってすべての変数を明示的にキーワード Nothing に設定するか、またはキーワード Nothing に設定した最後のオブジェクト変数が暗黙的に適用範囲 (スコープ) 外になった後でなければ解除されません。」
なんだが、Set Nothing しないでスコープ外になった時にどうなるかってのが
判らんです。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 08月 30日 01時 25分 38秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

To: 筑集眺餅 さん

> 文字列の処理だと思って、ダブッたスペースがなくなるまで
> スペース2個をスペース1個に縮めてやります。

なるほど、あまりスペースがたくさん入っていないデータなら、
この方法も有効だと思います。

> >hs = oRxp.Execute(Dat(1))
>
> こまかいツッコミ
> hs は、オブジェクトになるので、
> Set hs = oRxp.Execute(Dat(1))
> ですね。

ツッコミ返しですか(^^;
よくSetを付け忘れます。
また、配列を代入するときSetを間違えてつけちゃうことがよくあります。

> oRxp.Pattern = "\w+"

あ、そうか。難しく考えすぎだった。



To: てる さん

> 以下がソースのすべてで、1回ループをまわすたびに
> 5秒待ってます。その間に d.htm を書き換えてますが、
> ソースの表示は変わりません。

よくわからない部分があるので、ちょっと書き直してみました。
Refreshを使うのをやめてみました。
試してみてください。
うちの環境ではうまくいきました。

Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")

Ie.Visible=True

For i=0 to 7
Ie.Navigate "g:\a\d.htm"
Wscript.Sleep 5000
Next

Sub IE_DocumentComplete(pdisp,url)
Set document=IE.Document
Set form=document.Forms(0)

For j = 1 To IE.Document.All.Length - 1
Source = Document.All(j).InnerHTML
MsgBox j & " --> " & Source
Next
End Sub



To: yanmama さん

> 2000Pro、NTWSで同じスクリプトを実行してみたところ正常でした。
> 今のところダメなのは2000Serverのみです。
> 今度はNTSeverでも試してみます。
>
> むたぐちさんが試された環境は、2000のPro?Server?どちらでしょうか。

Proです。
Serverは何か特殊なんですかねえ?



To: kia さん

> フリーズのことなのですが、サブフォルダを探しながらファイルを探索するのではなくて
> サブフォルダを見つける部分とフォルダ内のファイルを処理する部分を分けてみたらどうですかね?
>
> JScriptで申し訳ないですが、下のスクリプトは
> 先にフォルダを全部拾ってから順に探索していきます。
> 開始でstart_search()、中止でstop_search()を呼び出します。
> これでもまだ固まると思いますが、ウチの環境ではかなりマシな印象です。
> サブフォルダを探索するところもsetTimeoutを使うとさらにマシになるかも。

これまたいい意味でこてこてのJSなので、VBS使いな私はちょっと読んだだけでは
わかりません(^^;
またじっくり検討させていただきます。



To: 筑集眺餅 さん

> プロシージャの中で作ったファイルやフォルダーがきちんと開放されない
> で、再帰処理で どんどんたまっていくからじゃないかと疑ってます。
>
> For Each oElement In oCollection
> (何か処理)
> Next
> Set oElement = Nothing
>
> ってな感じで、File や Folder の参照をその都度消しておけば良いと
> 思うが。

43-33のスクリプトを流用して、検証してみようと思ったんですが、
あのスクリプト、Setしているところがないので検証しようがなかった(^^;
返り値がオブジェクトになるプロパティやメソッドを、変数に入れることなく
その場で使えば、そのオブジェクトの参照はその場限りになると思うのですが
どうなんでしょう。

> ローカル変数にNothingを設定しないでプロシージャが終了した時に
> 参照されてたオブジェクトは解放されるんだろか? よく判らん。

ずーっと前に話題になったと思うのですが、WSHでは問題ないが、ASPとかでは
キャッシュされてしまうことがあるので、手動でSet Nothingして解放して
やった方がいいという話だったと思います。



To: WSHShell.Sendkeys "^%{DEL}" さん

> まずファイルパスを全て記憶して、それから不要かどうかを調べているといった感じですが、
> そうする意味がよくわかりません。

要するに、負荷がかかる処理(ファイルパスを調べる)と、かからない処理(不要かどうか)を
分離することで、負荷のかかる処理が終われば後はリアルタイムに結果を反映できるようにする、
ということじゃないでしょうか。
私自身まだ試してないので的外れかも。

> 関係ない話ですが、最近私のハンドルネームのコマンドを手動で行なう事が多いです。

関係ある話ですが、SendKeysであのコマンドを送出できましたっけ?

> たしか XP て Experience の略ですよね,任發海料亜∋笋陵Э佑ャ
> Expensive の略だろって言ってました。

高いですよねー。
リモート操作が可能? それってNetMeetingのリモートデスクトップとは違うのか?



To: Namng さん

> IMEがMS-IMEであれば、プロパティのダイアログのオートコレクトタブにある
> 「全角/半角」で句読点を全角に変換するように設定できます。

「、。」は「常に全角に変換」にしておくと良いですね。
半角句読点は、とくにプロポーショナルフォントだと気づきにくいですしね。



To: たなかやすお さん

> とあるのですが、Myserverのところに社内のネットワークコンピュータで
> 共用のマシン名を入力してみたのですが、結局このVBScriptを実行しているPC
> にあるExcelのバージョン番号しか帰ってこないのです。Myserverに入力した
> マシン名は Windowsエクスプローラの否嬬宛際盆O世任盡・┐討い襪掘・νム
> フォルダもフルコントロールのを設定してあるのになぜそのPCにあるExcel
> のバージョンが帰ってこないのでしょう?

あれはASP(HTMLも?)から呼ぶVBSだけに有効で、WSHから指定しても無効だったような
気がします。



To: cms さん

> まぁ、その通りです。wsfは単独で動かす事ができるスタンドアロンなアプリケーションと
> 思って頂ければ少しは分かりやすいかと思います。

じゃあHTAはwsfのフロントエンド的な役割をはたすわけですね。

> そのスタンドアロンなアプリに引数をつけてやれば外部と連携(もどき)が取れるようになると。
> (実は連携でもなんでもないんだけど<そこが"泥臭い手段"な訳です)

WSHやHTAの限界なんですかねえ。
GetObject関数とかを使って、他スクリプトのプロセスと連携が取れるようになると
面白いんですけどね。

> ふと、IEの(ローカル)キャッシュ以外にもIEでプロキシ設定による
> (プロキシサーバ内)キャッシュもあるのかなぁとか思いましたがどうでしょ?
> navigateでnavNoReadFromCacheを指定していてもプロキシでキャッシュしてるのを
> 拾ってきてたら意味ないですからねぇ。

ローカルのファイルを見ている話ですから、今回はプロキシは関係ないと思います。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 08月 30日 00時 12分 39秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

さて、2ちゃんねるも今夜が峠ですね。
現在の状況はhttp://teri.2ch.net/test/read.cgi?bbs=accuse&key=999093174が最速かな?

利用者増加に伴って、データ転送量が跳ね上がったため、
このままだとレンタルサーバー使用料を払いきれなく
なってしまったというのが今回の騒動の要約です。
やはりdatファイル(書き込み生データ)をHTMLに変換するread.cgiを改良する(by UNIX板の住民)
だけではまだ不十分なようです。(と言っても効果は劇的だった)
# ソースは公開されているので、興味がある方は探してみては。
# いろいろと感想をもたれると思います。

今回の騒動が持ち上がる前に、P2Pな新しい掲示板システムを作ろう、というスレが
プログラム板に立ってたんですが(http://piza2.2ch.net/test/read.cgi?bbs=tech&key=990334284)、
このスレが机上の空論ではなく、一つの2ch救済策としてここ数日で急に現実味を帯びてきてます。
といっても、いくらなんでも、こんな急な仕様策定とシステム移行は無理がありすぎですね(^^;
まあ、まずはP2Pへの移行を前提とした、キャッシュサーバーの構築をどうするかについて
考えているようですけど。
# 負荷分散のためのキャッシュサーバーというと、「何か」が復活したときのさくらさーばーずを
# 思い出すなあ。…あれはそこまでのサーバー群が必要なんだろうか。

"あの"西和彦氏本人が登場するベンチャー板の名物スレ(http://yasai.2ch.net/test/read.cgi?bbs=venture&key=998937319)
では、西氏が2chに代わる(引き継ぐとかではなく新規に)掲示板システム、
その名も24(にし)ちゃんねる(命名はスレ住民)を作るとか言ってます。
このシステムでは、閲覧無料、書き込みは有料で、投票により優良書き込み者に認定されたら
お金がもらえるそうです。
ま、どこまで本気か知りませんが。
# Part17でひろゆき氏本人が西氏に「助けてください」とか言ってたり。

ところで、P2Pと投票システムの2個のキーワードで、fjやjapanでおなじみのえんどうひでゆき氏が
現状のNNTP(Netnewsで使われてるプロトコル)に代わる新しいシステムの構想がどうのこうの
と言っていたのを思い出しました。
(本人によると数年間言いつづけているがちっとも形になっていないそうですが)
それにしても相変わらずfjとかjapanは寂れてるなあ。
2ch危機対策として、既存のNNTPをそのまま使おう(2chというトップカテゴリを新設)とかいう話も
真剣に取り上げられていたのをNetnewsな人々は知っていたのだろうか。
# えんどう氏は2ちゃんねらーな気がしますけどね(^^;

まあ、どこにでもインストールされているウェブブラウザを使って、匿名で
発言できるという特徴を引き継がない限り、ポスト2chにはなりえないですね。

さて、これからどうなるんでしょうね。
私は2chはROMしてるだけですが、情報の速さと量(質は期待してはいけない)は
捨てがたいものがあります。

WSHと激しく関係がなくてすいません。

cms さん 2001年 08月 29日 15時 16分 47秒

>"ごみ発見機"
むたぐちさん> ですが、ActivePerlを入れていないので動きませんでした…。
むたぐちさん> WSCって、インストールされていないスクリプト言語を含めるだけで
むたぐちさん> エラーになるんですね。(そこで定義されている関数を呼び出さなくても)
むたぐちさん> というわけで、<script language="PerlScript">の部分を削除してやれば
むたぐちさん> 正常に動作しました。
フォローありがとうございます。
perlが入ってない環境がなかったので気付きませんでした。


むたぐちさん> 本題の処理部分ですが…うーむ、これちょっと見ただけでは何だかよく
むたぐちさん> わからなかったです。
kiaさん> なんかスゴいっちゅーか、コワいっちゅーか、全然分かりません。(@@;)
なんとなくそういわれる気はしてました。
確かに普通のVBScriptらしくないコードですからねぇ。
なんでそうしているかというとFindFrameコンポーネントを
後で使いまわすつもりなのでなるべく汎用的に作ったというのがあるのですが。。
こういうコンポーネントを一つ作っておけば、
これを利用する人は再帰で取ってきたファイルに対する処理のみを
実装したクラスを作るだけで済む(=再帰検索をしているという意識をしないで済む)
ように作ってます。
だから冗長でわっかりにくいコードになって<それとこれとは違うという説も(^^;
それと実験コードもいくつか含んでたり使ってないコードもあったりします
実験内容
・ひとつのWSCに複数のコンポーネントが詰まってる場合の呼び出し方法
・perlとの連携方法
・ひとつのWSCに複数のコンポーネントがあり、それぞれのコンポーネント内で
objectタグのIDが一緒の場合にはエラーになる(何故か成らない環境もある)


むたぐちさん> HTAからwsfファイルを呼び出して、そのwsfからWSCを呼び出しているという感じ
むたぐちさん> ですが…。
まぁ、その通りです。wsfは単独で動かす事ができるスタンドアロンなアプリケーションと
思って頂ければ少しは分かりやすいかと思います。
(WSCは似たような処理ならなんにでも流用が効くパーツと思って頂ければ)
そのスタンドアロンなアプリに引数をつけてやれば外部と連携(もどき)が取れるようになると。
(実は連携でもなんでもないんだけど<そこが"泥臭い手段"な訳です)
そんな訳でAT(スケジューラ)にwsfを登録しておいて定期的にファイルに吐き出して
それをHTAで吸い上げるという事もできますね。
ファイルの中身から指定された文字を検索するアドオンモジュール(クラス)を作れば
全文検索もどきもできそうですね。<これは自分の為にそのうち作ろうと思ってる


>てる さん
ふと、IEの(ローカル)キャッシュ以外にもIEでプロキシ設定による
(プロキシサーバ内)キャッシュもあるのかなぁとか思いましたがどうでしょ?
navigateでnavNoReadFromCacheを指定していてもプロキシでキャッシュしてるのを
拾ってきてたら意味ないですからねぇ。

大分駄文が過ぎたようで、(自分も含む)ROMの人が大変そうだ・・・

たなかやすお さん (yasuo2.tanaka@toshiba.co.jp) 2001年 08月 29日 14時 11分 13秒

始めまして、たなかと申します。

VBSCriptにつきよくわからなくて教えていただければ幸いです。
VBScriptのヘルプに
**********************************************
次のコードは、"Myserver" という名前のリモート ネットワーク コンピュータ上で実行されている、Excel のインスタンスのバージョン番号を返す例です。
Function GetVersion
Dim XLApp
Set XLApp = CreateObject("Excel.Application", "MyServer")
GetVersion = XLApp.Version
End Function
**************************************************************
とあるのですが、Myserverのところに社内のネットワークコンピュータで
共用のマシン名を入力してみたのですが、結局このVBScriptを実行しているPC
にあるExcelのバージョン番号しか帰ってこないのです。Myserverに入力した
マシン名は Windowsエクスプローラの否嬬宛際盆O世任盡C┐討い襪掘エνム
フォルダもフルコントロールのを設定してあるのになぜそのPCにあるExcel
のバージョンが帰ってこないのでしょう?
どなたか解決策をご存知でしたら教えてください。

Namng さん 2001年 08月 29日 12時 22分 28秒

はじめまして、Namngと申します。
いつもRomさせていただいております。

WSHについてではないのですが。。。

To WSHShell.Sendkeys "^%{DEL}" さん

>どうも私は、変換するときに一文で行なっているようです。(だから、半角句読点→文字化け→懺悔 となるんでしょうね。)
>やっぱ、一文節でやったほうがいいのかなぁ。

下記をお試しください。

IMEがMS-IMEであれば、プロパティのダイアログのオートコレクトタブにある
「全角/半角」で句読点を全角に変換するように設定できます。

では!!!!

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 28日 23時 52分 06秒

すみません!って、何度やれば気が済むんだろう。
どうも私は、変換するときに一文で行なっているようです。(だから、半角句読点→文字化け→懺悔 となるんでしょうね。)
やっぱ、一文節でやったほうがいいのかなぁ。

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 28日 23時 40分 38秒

To: kia さん

>フリーズのことなのですが、サブフォルダを探しながらファイルを探索するのではなくて
>サブフォルダを見つける部分とフォルダ内のファイルを処理する部分を分けてみたらどうですかね?

↓のスクリプトを試しに使ってみました―萢C陵融劼鮓C討い襪函「
まずファイルパスを全て記憶して、それから不要かどうかを調べているといった感じですが、
そうする意味がよくわかりません。

>速度は計測しておりません(笑)

ちょっとSlowlyな気が・・・


よく考えたら、HTAで可視的に処理させないで、スタートアップに登録して
VBSに内部的に処理させた方がいいような気がしてきました。(いまさら勝手ですが・・(^_^;))



関係ない話ですが、最近私のハンドルネームのコマンドを手動で行なう事が多いです。
そのため、安定したWin2000が(ちなみに今は98)欲しいと思ったりしていますが、
どうせ買うなら今度出るWinXPにしようと思っています。

たしか XP て Experience の略ですよね,任發海料亜∋笋陵Э佑ャ
Expensive の略だろって言ってました。

筑集眺餅 さん 2001年 08月 28日 22時 54分 19秒

>WSHShell.Sendkeys "^%{DEL}" さん

フリーズの件ですが、小生も別の件で大量のファイルを処理して不安定に
なったことがあります。

プロシージャの中で作ったファイルやフォルダーがきちんと開放されない
で、再帰処理で どんどんたまっていくからじゃないかと疑ってます。

For Each oElement In oCollection
(何か処理)
Next
Set oElement = Nothing

ってな感じで、File や Folder の参照をその都度消しておけば良いと
思うが。

ローカル変数にNothingを設定しないでプロシージャが終了した時に
参照されてたオブジェクトは解放されるんだろか? よく判らん。

kia さん 2001年 08月 28日 16時 47分 56秒

>cms さん
なんかスゴいっちゅーか、コワいっちゅーか、全然分かりません。(@@;)

>WSHShell.Sendkeys "^%{DEL}" さん
フリーズのことなのですが、サブフォルダを探しながらファイルを探索するのではなくて
サブフォルダを見つける部分とフォルダ内のファイルを処理する部分を分けてみたらどうですかね?

JScriptで申し訳ないですが、下のスクリプトは
先にフォルダを全部拾ってから順に探索していきます。
開始でstart_search()、中止でstop_search()を呼び出します。
これでもまだ固まると思いますが、ウチの環境ではかなりマシな印象です。
サブフォルダを探索するところもsetTimeoutを使うとさらにマシになるかも。

速度は計測しておりません(笑)

<script language="JScript">

var FSO = new ActiveXObject("Scripting.FileSystemObject");

function CleanableFolder(folder) {
this.folder = folder;
var subFolders = new Array();
for (var e = new Enumerator(this.folder.SubFolders); !e.atEnd(); e.moveNext()) {
subFolders.push(new CleanableFolder(e.item()));
}
this.subFolders = subFolders;
}

CleanableFolder.prototype.getAllSubFolders = function () {
var ary = new Array(this);
var subFolders = this.subFolders;
for (var n = 0; n < subFolders.length; n++) {
ary = ary.concat(subFolders[n].getAllSubFolders());
}
return ary;
};

CleanableFolder.prototype.sweeper = function () { return new Sweeper(this.getAllSubFolders()) };

CleanableFolder.prototype.clean = function () {
var ary = new Array();
for (var e = new Enumerator(this.folder.Files); !e.atEnd(); e.moveNext()) {
var f = e.item();
if (/\.(tmp|bak|old|chk|gid)$/i.test(f.name)) {
// ここでファイルを削除したりする。
ary.push(new Array(f.Path, f.Size));
}
}
return ary;
};

function Sweeper(subFolders) {
this.subFolders = subFolders;
this.index = 0;
}

Sweeper.prototype.doIt = function () {
if (this.index < this.subFolders.length) {
Working.innerText = '処理中:' + this.index + '/' + this.subFolders.length;
var ary = this.subFolders[this.index++].clean();
for (var n = 0; n < ary.length; n++) {
Count.innerText++;
TrashList.innerHTML += ary[n][0] + ' / ' + ary[n][1] + '<br>';
}
setTimeout(function (obj) { return function () { obj.doIt() } } (this), 10);
} else {
Working.innerText = '待機中';
}
};

Sweeper.prototype.cancel = function () { this.index = this.subFolders.length };

var sw;

function start_search() {
Count.innerText = '0';
TrashList.innerHTML = '';
sw = (new CleanableFolder(FSO.GetFolder(FolderPath.value))).sweeper();
sw.doIt();
}

function stop_search() {
sw.cancel();
}

</script>

yanmama さん 2001年 08月 28日 14時 36分 05秒

To:管理人さま

少し進展がありました。

>> レジストリを直接書き換える方法も試してみましたが、ダメでしたし。
>> もう万策尽きたという感じですかねえ。。。
>>
>> 他のWin2000の環境でも、試してみます。
>
>少なくとも私のところでは問題ないのですが…。

2000Pro、NTWSで同じスクリプトを実行してみたところ正常でした。
今のところダメなのは2000Serverのみです。
今度はNTSeverでも試してみます。

むたぐちさんが試された環境は、2000のPro?Server?どちらでしょうか。


てる さん 2001年 08月 28日 09時 36分 06秒

むたぐちさん

以下がソースのすべてで、1回ループをまわすたびに
5秒待ってます。その間に d.htm を書き換えてますが、
ソースの表示は変わりません。

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

Set Ie = WScript.CreateObject("InternetExplorer.Application","IE_")

Ie.Navigate "g:\a\d.htm"
Ie.Visible=True
While(Ie.Busy)
Wscript.Sleep 100
Wend

Sub IE_DocumentComplete(pdisp,url)
Set document=IE.Document
Set form=document.Forms(0)


For i=0 to 7

For j = 1 To IE.Document.All.Length - 1
Source = Document.All(j).InnerHTML
MsgBox j & " --> " & Source
Next

IE.Refresh
While(Ie.Busy)
Wscript.Sleep 100
Wend
Set document=IE.Document

Wscript.Sleep 5000
Next


WScript.Quit
End Sub



筑集眺餅 さん 2001年 08月 28日 06時 24分 15秒

To:むたぐちさん

>> そういえば、VBSからJSのsort関数を使おうとして、引数が配列なんで
>> 苦労したことがあったっけ。
>こまかいツッコミですが、JSのArrayオブジェクトのsortメソッドですね(^^;
>あと、sortメソッドの引数はソート関数名ですよ。

 そうでした、そうでした。JSは ほとんど使わないもので。(^^;;)

>> カタカナ表記なら、ジャワカレーやジャワティーの立場を尊重して
>> ジャワスクリプト・・・ってのはどうでしょう?
>ジャワスクリプトと言うと、またぜんぜん違う印象になりますね。

 ジャワコーヒーってのはマイナーでしょうか?
(おなじみの 湯気の立ち上るコーヒーカップ・・・ですね。)

>oRxp.Pattern = "自分で考えてください(^^;"
>hs = oRxp.Execute(Dat(1))

こまかいツッコミ
hs は、オブジェクトになるので、
Set hs = oRxp.Execute(Dat(1))
ですね。

で、たぶん、単語を切り出すのが素直だと思います。

Dim Dat(1)
Dat(1) = "10 20  30   40 50"

Set oRxp = New RegExp: oRxp.IgnoreCase = True: oRxp.Global = True
oRxp.Pattern = "\w+"
Set hs = oRxp.Execute(Dat(1))

MsgBox hs.Count

むたぐちさんが言われるように、オブジェクトにすると、後の扱いが
ちょっと面倒になってくると思いますです。はい。

管理人むたぐち さん (mutaguchi@roy.hi-ho.ne.jp) 2001年 08月 28日 01時 26分 02秒
URL:http://www.roy.hi-ho.ne.jp/mutaguchi/

6日で過去記事リスト行きというのは、さすがに最短記録でしょう。
なんかすごいですね。



To: Lib30 さん

> うーん、個人的な見解かもしれませんが、JavaScriptをJavaスクリプトや
> Java Scriptという風に書くと、ただでさえ「なんかJavaと関係ありそう」というのが
> さらに強まってしまい、初心者に無用な誤解を与えてしまいそうだからです。
> 「ジャバスクリプト」はJavaScriptのカタカナ表記なので個人的にはいいかも。

なるほど。
でも、JavaScriptはどう考えたってJavaの親戚と考えられて当然じゃないですか。
もうどうしようもないことなんですけど、なんでまぎらわしいネーミングに
しちゃったんですかね。あまり歴史的な経緯を知らないのですが…。



To: 筑集眺餅 さん

> そういえば、VBSからJSのsort関数を使おうとして、引数が配列なんで
> 苦労したことがあったっけ。

こまかいツッコミですが、JSのArrayオブジェクトのsortメソッドですね(^^;
あと、sortメソッドの引数はソート関数名ですよ。

> カタカナ表記なら、ジャワカレーやジャワティーの立場を尊重して
> ジャワスクリプト・・・ってのはどうでしょう?

ジャワスクリプトと言うと、またぜんぜん違う印象になりますね。



To: てる さん

> だめでした。やはり、ループした分だけ同じソースを表示した後、
> リフレッシュしてるような動作で、ソースが更新されないようです。

差し支えなければ、ソースのうち問題となる部分を見せていただけませんか?



To: yanmama さん

> 再度「システムのプロパティ」から環境変数PATHを再設定してやると、正常に
> 戻ります。ただ、ここはどうしても自動化させなければならないので、いろいろ
> 試しています。

そうですか。
もしかして、WshShellを呼び出すホスト(この場合VB6)が変という可能性はないですか。
たとえば、%という文字が得体の知れない文字に化けてしまっているとか…。
WSHから実行した場合はどうなんでしょうか。

> >というか、NT系は環境変数を反映させるのに再起動する必要はないです。
>
> そうでしたか。。。そうでしたっけ。

Win9xはautoexec.batに定義されてる環境変数が有効になるので、再起動しないと
駄目なわけですが、WinNT系列はそうではないです。
WinMEはどっちだったか忘れました。

> レジストリを直接書き換える方法も試してみましたが、ダメでしたし。
> もう万策尽きたという感じですかねえ。。。
>
> 他のWin2000の環境でも、試してみます。

少なくとも私のところでは問題ないのですが…。


To: MT_ さん

> ところが、場合によっては、
> "temp.txt"の行の中には、
> "10 20 30 40 50"という風に、区切りスペースが2つ以上使われている
> 記述が存在していたのです、「Split」関数はスペース1文字を区切り文字として
> 扱うみたいで、2つ以上使われている場合、次のスペースを「hs(*)」に代入して
> しまいます。スペースの数が決まっていれば区切り文字にその数分だけ指定できますが
> 決まったものでなく、ランダムに入ってくる場合があります。

筑集眺餅さんのおっしゃるように、正規表現を使うのが一番融通が利いていいかも
しれません。
そういうランダムなスプリット文字の場合、split関数だけでなんとかするのは、厳しいと
思います。
ちなみに、split関数は引数にスプリット文字を指定することもできます。
省略するとスペースがスプリット文字になるわけです。



To: cms さん

> WSHShell.Sendkeys "^%{DEL}" さんの"ごみ発見機"を色々弄くったのですが、
> 泥臭い手段で一応HTA画面が固まらない版を作ってみました。
> (固まらないけどその分遅い。サイズもでかい)
> どうせ作ったのなら自己満足だけで終わらないで他の人が見れるようにした方が
> 良いかなぁと思ってアップロードしてみました。
> http://www8.ewebcity.com/mixpg/docs/src/wshlab_res/find/FindTrash.zip

ありがとうございます。
ですが、ActivePerlを入れていないので動きませんでした…。
WSCって、インストールされていないスクリプト言語を含めるだけで
エラーになるんですね。(そこで定義されている関数を呼び出さなくても)
というわけで、<script language="PerlScript">の部分を削除してやれば
正常に動作しました。

本題の処理部分ですが…うーむ、これちょっと見ただけでは何だかよく
わからなかったです。
HTAからwsfファイルを呼び出して、そのwsfからWSCを呼び出しているという感じ
ですが…。

ぜんぜん未完成なんですが、今回のために特別にHTAテキストファイルビューア
を公開します。
http://www.roy.hi-ho.ne.jp/mutaguchi/wsh/src/textview2.lzh
でかいテキストファイルを開いたときでも固まらないようになっています。

>  '第2引数にnavNoReadFromCacheを設定しないとキャッシュを見に行ってしまう為
>  '最新の情報は取れない可能性がある<予想

なるほど、その可能性もありますね。

> >.NET
> > C#の名前の由来は、C++ ++である。(ほんまかなあ…)
> ASPXというのはASP+の"+"が斜めになったと思ってますがどうなんでしょ?

MicrosoftはXが好きだ、という話もありますから、ASPXはその流れかなあと
思ってます。
# Xも+もどっちも好きだよなあ。



To: 筑集眺餅 さん

> Set oRxp = New RegExp
> oRxp.IgnoreCase = True
> oRxp.Global = True
> oRxp.Pattern = " +" ' スペースの繰り返し
> Dat(1) = oRxp.Replace(Dat(1), " ") ' 〜を1個のスペースに
>
> これで Dat(1)はスペース1個ずつに区切られるので、
> hs = Split(Dat(1))
> でいける・・・はず。

これだと、逆に「スペースに囲まれた数字」をPatternに設定し、
そのMatchesをそのままhsに代入しちゃうのがいいような気がします。

oRxp.Pattern = "自分で考えてください(^^;"
hs = oRxp.Execute(Dat(1))

Matchesは配列じゃなくて、各Matchオブジェクトの中身を取り出すときは
hs(0).Value のようにしないと駄目ですが。
うーん、あまり良くないか。



To: WSHShell.Sendkeys "^%{DEL}" さん

> それは1つのスクリプトに処理させる場合だとおもいます。
> たとえば、ファイルが30個あったとして、
> スクリプトA、スクリプトB、スクリプトCにそれぞれ10個ずつファイルを
> 調べさせれば、通常の3倍の速さで調べる事ができるのではないのでしょうか?

シャア専用ですか。
…それはともかく、これって本当にそうなるんでしょうか。
実験してみないとわかりませんが、ActiveX Scriptって、複数のプロセスから
呼び出した場合、それぞれが独立して処理をおこなっていくのでしょうか。
あるプロセスの処理が終わったら次は別のプロセスの処理をやる、というような
仕組みになっていた場合、スクリプトを分けるのでは速度アップは望めないですよね。
もしそうである場合、ディスクの別々の部分が平行して同時に読み出されて
いくわけですから、それで返って速度が落ちることも考えられますね。

筑集眺餅 さん 2001年 08月 28日 00時 39分 29秒

To:MT_さん

Webだとスペースが1個になっちゃうので判りづらい
ですね。全角スペースを仮に使って書き直しました。

Do
  sList = Dat(1)
  Dat(1) = Replace(sList, "  ", " ")
  ' 前のはスペース2個、後はスペース1個です。
Loop Until sList = Dat(1)
hs = Split(Dat(1))

筑集眺餅 さん 2001年 08月 28日 00時 33分 55秒

To:MT_さん

おとととと。
やっぱり、正規表現はとっつきにくいですよね。

で、行きがかり上 正規表現を使わないバージョンを考えてみました。

文字列の処理だと思って、ダブッたスペースがなくなるまで
スペース2個をスペース1個に縮めてやります。
こんなんでどうでしょ?

Do
sList = Dat(1)
Dat(1) = Replace(sList, " ", " ")
' 前のはスペース2個、後はスペース1個です。
Loop Until sList = Dat(1)
hs = Split(Dat(1))

MT_ さん (shoji@dance.ne.jp) 2001年 08月 28日 00時 02分 27秒

To:筑集眺餅 さん

なんか、コードまで書いてもらって・・・ありがとうございます。
結構難しいところへ、足を突っ込まないといけないんですね。
コードの意味は、さっぱり判りませんが、結果オーライで
やってみます。そのうちなんとかなるでしょう。
 確か、リファレンスにも「正規表現」とか、書いてありましたが、
自分には先ず、関係ないだろうと、すっぽかして読んでいたところです。

ここで、皆さんにあえて良かったです。では。

WSHShell.Sendkeys "^%{DEL}" さん 2001年 08月 27日 20時 50分 39秒

To: むたぐち さん

>> ・Windows標準のファイル検索に匹敵する検索速度
>
>これはスクリプト言語を使っている以上、どうしようもないのではないか
>と思います。アルゴリズムの改善でなんとかできるレベルの問題では
>ないでしょう。

それは1つのスクリプトに処理させる場合だとおもいます。
たとえば、ファイルが30個あったとして、
スクリプトA、スクリプトB、スクリプトCにそれぞれ10個ずつファイルを
調べさせれば、通常の3倍の速さで調べる事ができるのではないのでしょうか?


To:cms さん

>WSHShell.Sendkeys "^%{DEL}" さんの"ごみ発見機"を色々弄くったのですが、
>泥臭い手段で一応HTA画面が固まらない版を作ってみました。
>(固まらないけどその分遅い。サイズもでかい)

なんか、エラーが出るんですけど。

>で、どうせならこれをうちのページのネタの一部にしようかと思うのですが
>OKでしょうか?>WSHShell.Sendkeys "^%{DEL}" さん

どうぞどうぞ。

筑集眺餅 さん 2001年 08月 27日 17時 51分 50秒

To MT_さん

得体の知れない相手を処理するなら正規表現を使うのが便利ですよぅ。

Set oRxp = New RegExp
oRxp.IgnoreCase = True
oRxp.Global = True
oRxp.Pattern = " +" ' スペースの繰り返し
Dat(1) = oRxp.Replace(Dat(1), " ") ' 〜を1個のスペースに

これで Dat(1)はスペース1個ずつに区切られるので、
hs = Split(Dat(1))
でいける・・・はず。

正規表現は VBAにないので、とっつきにくいですが慣れると重宝します。
探求のしがいはあります。

>PS:N88-BASICはよく知ってます・・・ども。
>私の最初のマシンは、SONY-777 (8ビット)でした・・。
>BASICもSONY-777版を使ってました。

SONY-777って、8ビット時代の名機ですねぇ。
聖子の HITBIT でしたかね?
小生は、お金がなかったのでシャープのポケコンBASICが
始めですね。

Return