[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.024 Split関数で配列作成、UBoundで個数の判断

Split関数で配列作成、UBoundで個数の判断



本文(発行内容)


<Split関数で配列作成、UBoundで個数の判断>
こんにちは、Ken3です。

今回は、
Split関数で配列作成、
UBoundで個数の判断
をやってみたいと思います。

/*
 * 1.便利な関数あるんだね
*/
田舎者プログラマーKen3は、都会に在る便利な関数を知らなかった。
その1つがSplit関数かな。

英語得意じゃないので単語の本当の意味はわからないけど、
トランプのブラックジャックでSplitってルールがあって、
プレーヤーが、最初に賭けたチップと同額のチップを追加して賭け、
最初に配られた2枚のカードを2つの手に分けることができる

今回解説するのは、
文字列を区切り文字で分けて配列を作成する
Split関数だけど、頭の中でトランプ遊びとつながったのは不思議だった。
~~~~~~~~~

そんな話は、置いといて、

/*
 * 2.Split関数のサンプル
*/

簡単にサンプル書くと、

-- test024-1.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>Split関数のサンプル</title>
</head>
<body>
<h2>Split関数のサンプル</h2>
test024-1.asp<br>
簡単にカンマで分けられたデータから配列を作ってみます<br>
<hr>
strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",")<br>
と分解元文字列と区切り文字を渡すと、結果がstrBOXに配列で返ります。<br>
結果<br>
<%
    strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",")  '配列データを作成
    Response.Write "strBOX(0) -- " & strBOX(0) & "<BR>"  '中身を表示
    Response.Write "strBOX(1) -- " & strBOX(1) & "<BR>"  '中身を表示
    Response.Write "strBOX(2) -- " & strBOX(2) & "<BR>"  '中身を表示
%>
<hr>
終了です。<br>

</body>
</html>
----

関数の使い方は、
^^^^^^^^^^^^^^
    strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",")  '配列データを作成
と
分解元の文字列と区切り文字を渡すと、
    Response.Write "strBOX(0) -- " & strBOX(0) & "<BR>"  '中身を表示
    Response.Write "strBOX(1) -- " & strBOX(1) & "<BR>"  '中身を表示
みたいに、配列のデータとして値が返ります。

だから何?って感じだと思いますが、、、、

http://www.ken3.org/cgi-bin/test/test024-1.asp
で、サンプル実行できます。

/*
 * 3.UBoundで個数の判断
*/

strBOX = Split("Ken3,ASP不得意,VBA少しできる", ",")  '配列データを作成
と、
固定の文字列をバラしてました
が、
世の中、そんなに甘くないですよね、
ユーザーが入力した検索条件をバラして使用してる人達は、
どうしてるんだろうね?
入れられてから、はじめて区切り文字の個数がわかる場合は?

そんな時、便利なのが、
UBound(配列変数)
とやると、
配列のインデックス最大値(数)を返してくれるので、
組み合わせて使うと便利です。

フォームでスペースで区切られた条件を入力させ、
バラした結果を表示してみます。

-- test024-2.asp
<%@LANGUAGE=VBScript%>
<html>
<head>
<title>SplitとUBoundのサンプル</title>
</head>
<body>
<h2>SplitとUBoundのサンプル</h2>
test024-2.asp<br>
<br>
<%  '頭で、入力パラメーターDATAがあるかチェックする
  If IsEmpty(Request.Form("DATA")) = True Then
        'そのまま下のHTMLフォームを実行
%>
    スペースで区切って好きな言葉を入れてください<br>
    <FORM ACTION="test024-2.asp" METHOD="POST">
      <INPUT TYPE="text" SIZE="40" NAME="DATA" VALUE="好き 嫌い 普通"><BR>
      <INPUT TYPE="submit" VALUE="分割実行">
      <INPUT TYPE="reset"  VALUE="クリア">
    </FORM>

<%
  Else 'データが入力されていたら、バラして表示する
      Dim strMOTO
      strMOTO = Request.Form("DATA")
      Response.Write "元のデータは、[" & strMOTO & "]です<br>"
      'スペースでデータをバラす
      strBOX = Split(strMOTO, " ")  '区切り文字にスペース指定
      'ループでデータを表示させる
      For i = 0 To UBound(strBOX)   'UBound使用インデックス最大値までループ
        Response.Write "<BR>"
        Response.Write "strBOX(" & i & ") -- "  '変数名表示
        Response.Write strBOX(i)                '中身を表示
      Next
  End If
%>
<hr>
終了です。<br>

</body>
</html>
----

軽く解説すると、

フォームからデータが来てるかチェックする
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<%  '頭で、入力パラメーターDATAがあるかチェックする
  If IsEmpty(Request.Form("DATA")) = True Then
        'そのまま下のHTMLフォームを実行
%>
いつのまにか好きになった関数IsEmptyでパラメータのチェックを行い、
無い時は(True)
下記のフォームで入力させる
    スペースで区切って好きな言葉を入れてください<br>
    <FORM ACTION="test024-2.asp" METHOD="POST">
      <INPUT TYPE="text" SIZE="40" NAME="DATA" VALUE="好き 嫌い 普通"><BR>
      <INPUT TYPE="submit" VALUE="分割実行">
      <INPUT TYPE="reset"  VALUE="クリア">
    </FORM>
ここのポイントは、
ACTION="test024-2.asp"
で、自分自身を呼んでるとこです
*自分の心の中でも意見が分かれるところで、
 HTMLの入力部とASPの処理部に分けたほうが派
 と
 今回みたいに、処理を1つにするか、、、

受け取ったデータを処理する
^^^^^^^^^^^^^^^^^^^^^^^^^^
<%
  Else 'データが入力されていたら、バラして表示する
      Dim strMOTO
      strMOTO = Request.Form("DATA")
      Response.Write "元のデータは、[" & strMOTO & "]です<br>"
で、まずパラメーターで受け取った元データを表示してます。

次に
      'スペースでデータをバラす
      strBOX = Split(strMOTO, " ")  '区切り文字にスペース指定
で、配列を作成してます。

ここがサンプルのポイント、
      'ループでデータを表示させる
      For i = 0 To UBound(strBOX)   'UBound使用インデックス最大値までループ
Forでループを作る時、
0からUBound(strBOX)までのループにしてます。
UBound(配列)が配列の最大インデックスなので、
0〜最後までのループが完成します。

あとは、
        Response.Write "<BR>"
        Response.Write "strBOX(" & i & ") -- "  '変数名表示
        Response.Write strBOX(i)                '中身を表示
      Next
こんな感じで、芸無く表示しました。

http://www.ken3.org/cgi-bin/test/test024-2.asp
でテストできます。
いろいろスペースで区切った文字を入れて、チェックしてください。

/*
 * 4.終わりの挨拶
*/

今回は、
・Splitで文字列を分解して配列作成
  ~~~~~
・UBoundで作成された配列の数を求めてループを作成
  ~~~~~~
でした。

そろそろDBかなぁやはり。
イヤ、まだまだ違うネタで、、、、

素朴な疑問あったら、気軽に、
メール、掲示板に書き込んでくださいね。

ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: