某所にて
VBScript のは、動的配列とは言わねぇんだよっ!
要素数をいちいち宣言しないと使えない上に、宣言に変数も定数も使えないってどういうこった。
JavaScript みたいにとりあえず放り込んで要素数取得する方がよっぽど使いやすいわっ。
だそうで, あれれ? っと思ったのでちょっと実験
HEADもBODYも面倒なので省略, 動くし…HTML的にだめだめとかいや, integerをstringに直すの面倒だったし…(str$を使う)この書き方ってどうよ的な突っ込みは却下な方向で
一応宣言に変数は使えるっぽい気がします
<p>てすと</p> <script language=VBScript> <!-- '2訂版 dim i dim a() redim a(3) a(3) = 8 for i = 1 to 10 ' additem a, a(ubound(a)) + i dim t t = a(ubound(a)) + i redim preserve a(ubound(a) + 1) a(ubound(a)) = t document.write "<p>" document.write ubound(a) document.write ":" document.write a(ubound(a)) document.write "</p>" next ' これは上手くいかなかったなぁ… 'private sub addItem(byref i(), j) ' redim preserve i(ubound(i) + 1) ' i(ubound(i)) = j 'end sub '--> </script>
まぁJavaのVectorとか.NETのArrayListみたいには使えませんが, 完全に使えなくはないよと言う程度の話で…
某所の応答
あ~、動的な追加ができるという意味ではそうなんですけどね
例えば、配列を 2 つ使って、添え字で同期させて連動する情報を書き込もうとする場合、配列を初期化する段階で
Dim hogehoge(5)
Dim untara(5)
……とかしなきゃならんわけで、例えばこれが、
Const I = 5
Dim hogehoge(I)
Dim untara(I)
とか(あるいは単に変数つっこむとか)できたらすっげ~楽でしょ?
なんかこの辺が。もう、かなり。
厳密な意味については、とりあえず脇に置いておくとして。
「動的」を謳うなら生成から動的であるべきじゃないかなぁ。
たしかにdimには変数やConstは与えられないっぽいですねぇ
dim a() redim a(i)
で出来なくもないのですが, 確かに気分が悪いなぁと
どうやらVBScriptは動的な配列と静的な配列を完全に区別しちゃっているみたいなので…
これが普通のVBプログラムだとスコープの関係からDeclaration部にC#, Java系でのint[] a;に当たる部分private a()と書いておいて, Form_Load()辺りにでもa = new int[size];に当たる部分redim a(size)とかって書いちゃうので全然気にしないのですが, VBScriptだとこんな事になって嫌になりますねぇ
Constも放れないというのは確かにいただけない気がします
でも, そのまえにIEでしか動かなさそうなVBScriptを使う気にはなれませんが, その辺は外部の制約があるのでしょうねぇ…
むしろIEでしか動かないからある意味利点かもしれませんが
(追記 @ 23:15)
Windows Scriptiong HostWSHをExcelから叩いていたそうです
確かにVisualBasic for Applications Excel(とかAccessとか)のマクロ言語, IEのVBScriptよりはVBに近いものだったはず…VBAしか選択肢がないような気がするなぁ…
(追記 @ 翌日Up分)
VBScriptじゃなくてVBAだったら構造体を作ったほうが綺麗になるのではという気がしてみたり, そこまでやりたくはないでしょうが…
Type hoge hogehoge このへんてけと~, でも型宣言しておくとデバグが楽になる, Objectを入れる必要に駆られるとつらくなるけど…As Integer untara As String End Type Dim fuga(この辺も, VB(4~6系)の配列って下手すると添え字が負数だったりするので注意1 To 5) As hoge
とか, 型のないVBScriptじゃ無理ですけど, VBAならType宣言できるので何とでも出来るし, でも必要に駆られてやることは多いですが… こういうときは(速度的要因を除けば)クラスでWrapすべきなんですがねぇ… (6以前の)VBじゃ無理か…(VB .NETはVBじゃないので無視)添え字同期はあまりお薦め出来ないような気がしますが…
まぁ, 再利用しないコードにこんな面倒なことをしたくないという判断はあるでしょうけど, それなら即値直書きで良いですし…
それにしても久々にExcel触ったなぁ… ツール-マクロ-VB Editorだけですが
ところで, ExcelのあれってずっとVBA(≠VBScript)だと思っていたのですが, あれってVBScriptと呼ばれるものの1種なんでしょうか > 識者
因みにVBAでもVBSでもVB6系に近いのでVB .NETで出来なくなりましたDimを全てRedimに取り替えればで, 実験, 普通に通りました, 恐いなぁ…動くかもしれないとか思ってみたりしました, かなり邪道だけど
…と此処まで書いてみたところでIEのVBScriptではなくExcelのVBAで実験してみることに
環境はExcel 2000のVBA, 実行コードは
Const I = 5
Dim hogehoge(I)
Dim untara(I)
Private Sub hoge()
MsgBox これを打っているときに型ヒントとして『hogehoge(0 To 5) As Variant』って出たし…hogehoge(3)
End Sub
として, Editorのデバッグモードでマクロhoge()を直接実行, Variant型の初期値EmptyのString表現""が表示される何も書いていないMessageBoxが出ればOKということに
宣言部をプロシージャの中に入れたものも外に出したものも普通に動いてしまいました, あれれ? ExcelでVBA以外にVB系言語を叩けるものってあったっけ?
前提が完全に崩壊しつつあります…
致命的なのは首を突っ込んだ聖狐がWSHを知らないところにあったり, 場合によっては証拠隠滅のために削除する間も知れません(気弱)
汗が出てその部分がベタベタする・放熱されているのが分かるのはまだ良いが, 汗が垂れてきてそこから熱が流入してくる感覚を感じる, 嫌だ…
軽い脱水状態から水分摂取で脱出した時に出るやつ, 要するにオーバーヒート状態なのですが
破天とは, 東大赤門からちょっと方角でピンと来ない人が多い(私もそう)だろうから補足, 本郷3丁目方向です南下したところにあるラーメン屋さん
最近訪れていなかったので久々に行こうという話で???氏と盛り上がって, ちゅん氏, とし氏, nvaca氏を巻き込んで行く事になる
出発前にMessengerのサインイン名を使って告知したところ, 様々な人から濃いメンツだねと言われる, いえいえ, 貴方の方が数十倍濃いですとも(笑顔)ということにしておく
バイトの???氏の到着を待って20:00といういつもより遅めの夕食, 相当に矛盾している表現だなぁ…空腹ゲージ満タン, 戦闘体制だったりします
聖狐は例によって麺固め 0円w/ ご飯, いつもと違うのは周りのブルジョアに行こうという空気に少しだけ押されてチャーシュー麺にしたぐらい
例によってご飯とラーメンを同時に美味しく頂き, ご飯が先になくなってお代わりを頼み, 2杯目の1 / 3地点でお代わりをちょっと後悔するような満腹感に襲われながら完食するという本当にいつもと変わらないコース, まわりもさして変わらない
話していた内容もさして濃いものではなく, 秋葉原から17インチCRTだとかPC2台だとかそういった過剰な荷物を持ち帰る苦労話を拝聴したりと, 至って普通…ではない会話内容だったり, 別に昼間は地下室で一瞬だけ発生していたり…, 聖狐とは縁のない話ですが『夏』, 『海岸』, 『逆三角形』な話をするでもなく, ただしISer基準全然濃くない話
そんなこんなでいつもよりちょっと満腹度が高い食事会はつつがなく終わりましたとさ
久々に申告してくださった方が出るが…
いや, ちゃんと書いてましたが, お察しくださいって奴です諸事情により踏み逃げで良いですか?
ええ, 構いませんとも
ロボットに踏み逃されようとも気付かれずに通り越されようとも, 8ヶ月近く前にご報告を受けて以来10,000人ぶりのキリ番ダイアログフォームへの応答があっただけで聖狐は十分満たされていたりしてますので…
昔恐らくこの数字, 違ったかもしれませんが11,000でこれをキリ番というのか問い詰めたいと返してくださった方がいらっしゃったりしましたが, 今となっては良い想い出です, さいきんじゃあ特に気にも留めてなかったりして, 管理人専用ゲートウェイで気付くようにアクセスログの目立つところに表示するようにしていたりしているのですアクセスログを見たときに一瞬ためらってしまったのも事実だったりしますが…
いい加減毎回設定するのが面倒なので一定数の倍数というとんでもなくいい加減でラクチンな設定に逃げ込んだりしていたりキリ番の区切りを1000から変えるべきなのかなぁ… 5000とかに…