« みふでもわかるPHP - 1 | メイン | 書き残しておきたいのでここに記す C++ STL map 連想配列 ネスト »
2005年09月14日
VBSを使ったASP覚書
VBSを使ったASP Perlを使ったCGI
■基本事項
拡張子は基本的に .asp
ファイルの先頭に
<%@ Language=VBScript %>
と付け、VBコードは<% %>の間に記述。
コメントは行において ' 以降
■変数
宣言
dim a
PHPと同じく型を明示できない(PHPのようにキャストできるかは知らない)。
というより、VBのvariant型(何にでも使える)しかサポートしていないっぽい。
宣言せずに使用できるが、ブロックの頭に"Option Explicit"を記述すると宣言を強要できる。(使用推奨)
配列
dim a(9)
a(1) = 1
動的配列
redim a()
構造体
type foo
mema
memb
memc
end type
dim bar as foo
グローバル変数
public a
静的ローカル変数
static a
基本的に普通かな。
おまけ、定数
const FILE = "file/path.txt"
public const FILES = "A"
■演算子
= 代入
+ 加算
- 減算
* 掛け算
/ 割り算
mod 余り
^ 階乗
& 文字列結合
■比較演算子
= 等しい
<> 等しくない
> より小さい
>= より小さいか等しい
< より大きい
<= より大きいか等しい
and かつ
or または
代入演算子=と比較演算子=が同一って・・・
■is関数
IsArray(変数) 配列か調べる
IsDate(変数) 日付か調べる
IsEmpty(変数) 使われているか調べる
IsNull(変数) NULL 値か調べる
IsNumeric(変数) 数値か調べる
IsObject(変数) オブシェクトか調べる
■比較構文
if a = 100 then messagebox "true"
if a = 100 then
messagebox "true"
end if
if a = 100 then
messagebox "true"
elseif a = 120 then
messagebox "120"
else
messagebox "other"
end if
select case a
case 100
msgbox "100"
case 200
msgbox "200"
case else
msgbox "else"
end select
■繰り返し構文
for i = 0 to 100
a++
next
for i = 0 to 100 step 2
a += 2
next
do until i = 100
i++
loop
do while i < 100
i++
loop
do until i = 0
i++
if i = 100 then exit do
loop
■関数
functionは戻り値がある関数。変数test(関数名)に代入した値が返される
public function test(dim a,dim b)
a = a + b
test = a + b
end function
sub は戻り値が無い関数。
public sub test(dim a,dim b)
a = a + b
end sub
配列を渡すには、引数リストでは()を付けてはいけない。
public function test(dim a, dim b)
a(3) = b(3)
test = a(0) + a(1)
end function
exit function
exit sub
■セッション
if isempty(session("data")) then
session("data") = "foo"
end if
PHPと同じように扱える。
Session.Abandon
session_destroy()と同じ
■インクルード
<!-- #include file="include/com.asp" -->
よく見たらSSIで見た事のあるアレ。
指定は<% %> 外
■エスケープ
chr(13) '改行
chr(0) 'NULL 文字
\nは使えないのかな?
chr(&H22) ダブルコーテション「"」 chr(22)
vbTab タブ chr(9)
vbLf ラインフィード chr(10) , chr(&H0A)
vbCr キャリッジリターン chr(13) , chr(&H0D)
vbCrLf 改行 chr(13) & chr(10)
chr(0) C 言語 NULL 文字
vbNullString C 言語 NULL ポインタ文字列
■ASP特有
■response.write
JSのdocument.writeと同じ。
このように使うみたい。
<%
response.write("<TABLE><TBODY>")
for i = 1 to 10
response.write("<TR>")
response.write("<TD>" & i & "</TD>")
response.write("</TR>")
next
response.write("</TBODY></TABLE>")
%>
■環境変数
ip = request.ServerVariables("REMOTE_ADDR") '** リモート端末の IP アドレス
user = request.ServerVariables("REMOTE_USER") '** リモート端末のユーザ名
url = request.ServerVariables("HTTP_REFERER") '** リモート端末の直前の URL
blws = request.ServerVariables("HTTP_USER_AGENT") '** ブラウザ情報
path = request.ServerVariables("PATH_INFO") '** 現 CGI のパス情報
svph = request.ServerVariables("PATH_TRANSLATED") '** PATH_INFO の物理パス
alhd = request.ServerVariables("ALL_HTTP") '** 送信された HTTP ヘッダ
htlg = request.ServerVariables("HTTP_ACCEPT_LANGUAGE") '** コンテンツの表示に使用する言語
clen = request.ServerVariables("CONTENT_LENGTH") '** コンテンツの長さ
ctyp = request.ServerVariables("CONTENT_TYPE") '** コンテンツのデータ型
scnm = request.ServerVariables("SCRIPT_NAME") '** スクリプトの仮想パス
svr1 = request.ServerVariables("SERVER_NAME") '** サーバ IP、DSN エイリアス、ホスト名
svr2 = request.ServerVariables("SERVER_PORT") '** リクエスト受信ポート番号
svr3 = request.ServerVariables("SERVER_PORT_SECURE") '** 保護ポートでリクエストが処理されたか
svr4 = request.ServerVariables("SERVER_PROTOCOL") '** プロトコル名、リビジョン
svr5 = request.ServerVariables("SERVER_SOFTWARE") '** サーバソフト名、バージョン
■GET&POST
para1 = request.querystring("para1")
** http://sak-main/w_test/test.asp?para1=abc の「abc」を取得します。
text1 = request.form("text1")
** 入力フォームの submit になるフォームデータを取得します。
■リダイレクト
response.redirect("http://sak-main/w_test/test2.asp?a=123")
PHPといっしょ。HTMLのヘッダに書いて送るのでBODYを書く前じゃないと使えない
■学習
VB6と同じように扱えるらしいです。
VBはあんまり好きじゃないんだけどなあ……。
■注意
- 予約語や変数名、関数名に大文字小文字の区別はない
- 一文一行が原則。よって文末にセミコロンを付けてはいけない
- True:-1 False:0 そしてTrueは-1の時だけで、それ以外はFalseになる。(C系とは逆)
- elseif。 else if では無い!
- switch-caseが全然違うので注意!しかもbreak無しでスルーさせるのも使えない!(勝手にbreakしやがってくださる)
- for文も全然違うので注意!なんて親切なんだ、死んじゃえ!
- 関数の引数は標準でアドレス渡し。つまりいくらでも関数内で弄れてしまう。なんてこった!
- 引数リストの宣言で"ByVal"キーワードを付けたらOK。絶対忘れないようにしよう。というか普通こっちを標準にすべきじゃないの?
- returnは無い。関数名と同じ名前の変数への代入で代用……何で?
投稿者 miff : 2005年09月14日 15:26