|
[三流君] Top ken3.orgへ [ASP解説] ASPの解説TOP [ASP記事 バックナンバー] 番号順のバックナンバー [SOHO/在宅プログラマー/派遣] 派遣のお話ほか [...サイトマップ(総合案内へ)] 分類別ガイド ADOで[ADO Mdb接続] ,[ADO Excel接続] ,[ADO CSV接続] [ASP Form データのやりとりPOSTとGET] [ASPでTextFile操作] [ASPでVBScriptを使う] [その他サンプル] |
| No.105 | 2005/04/11 ADO SQL文で順位をつける And サブクエリーの埋め込みで遊ぶ |
[ページTOPへ戻る] |
<ADO SQL文で順位をつける And サブクエリーの埋め込みで遊ぶ>
こんにちは、三流プログラマーのKen3です。 今回は、 SQL文で順位を付け、サブクエリーの埋め込みを実験して(小細工して) バカみたいなSQL文を書いてみたいと思います。 いつもの三流的なアプローチなので、実際はアレンジして使ってください。 ※一部でも参考になればいいんだけど・・・ ※※何でもSQL文で実行するのは止めましょう・・・ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^/* * 1.今回のキッカケ */
VBA系の掲示板に、 ------------ >アクセスあるいはエクセルで以下のように横方向へ展開したいのですが、 >WEB上を色々検索したのですが、これといった方法が見つかりませんでした。 >やはりムリなのでしょうか? > >●元データ >顧客 購入商品 >顧客1 商品A >顧客1 商品B >顧客2 商品B >顧客2 商品C >顧客3 商品A > >●展開イメージ >顧客1 商品A・商品B >顧客2 商品B・商品C >顧客3 商品A --------------------- と、質問をもらった。/* * 2.分解して考えてみた */
なんか無いかなぁ・・・と思いつつ、分解して考えてみた。 >●元データ >顧客 購入商品 >顧客1 商品A >顧客1 商品B >顧客2 商品B >顧客2 商品C >顧客3 商品A ここから、AとBの2つの集合を作ってみます。 Aの集合 顧客 (顧客でグループ化したテーブル) 顧客1 顧客2 顧客3 Bの集合 商品順位付き (グループ内の商品に順位を付ける) 顧客 購入商品 順位 顧客1 商品A 0 顧客1 商品B 1 顧客2 商品B 0 顧客2 商品C 1 顧客3 商品A 0 AとBこれを下記のようにつなげて、 顧客1 順位0 順位1 順位2 順位3 顧客2 順位0 順位1 順位2 順位3 顧客3 順位0 順位1 順位2 順位3 やれば、横の数が固定ならSQL文で書けるのかなぁ といった発想でチャレンジしてみます。 ※かなり強引ですが・・・・/* * 3.SQLでCountを使用して順位を付けてみた */
過去に、 No.088 Access クエリー DCount関数で順位付け http://www.ken3.org/vba/backno/vba088.html の 3.グループ別に順位を付ける で、 fld1が同じ、fld2で順位を0から付けてます 順位: DCount("fld2","TEST_TABLE","fld1 = '" & [fld1] & "' And fld2 <" & [fld2]) fld1 fld2 fld3 順位 あ 2 a 1 あ 1 b 0 あ 4 c 2 い 5 a 1 い 6 b 2 い 4 c 0 い 10 d 3 素直に条件に、 fld1(が)= '" & [fld1] & "'" フィールド1が同じで And fld2(が) <" & [fld2]) フィールド2が自分より小さい そんなレコードを数えて順位として演算フイールドに書いてます。 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 下記のテストデータを作成して、テストしてみます。 テーブル名:T_DATA ID 顧客 購入商品 1 顧客1 商品A 2 顧客1 商品B 3 顧客2 商品B 4 顧客2 商品C 5 顧客3 商品A 6 三流君 VBA解説本 7 三流君 DVD2005年横浜優勝 8 三流君 ASP入門 9 三流君 SQLの技 今回の場合は、顧客が一緒で購入商品が<の数をカウントさせて、 DCount("購入商品","T_DATA","顧客 = '" & [顧客] & "' And 購入商品 < '" & [購入商品] & "'") AS 順位 で、顧客別に順位が振れるのかな。 AccessのDcount関数をSQLのCount関数を使う形に書き直し、 ()付きのサブクエリーとして埋め込み AS 順位と項目名を付けてみました。 strSQL = "Select ID, 顧客, 購入商品, " strSQL = strSQL & " (Select Count(*) From T_DATA AS T_TEMP " strSQL = strSQL & " Where T_TEMP.顧客 = T_DATA.顧客 " strSQL = strSQL & " And T_TEMP.購入商品 < T_DATA.購入商品) AS 順位" strSQL = strSQL & " From T_DATA" で、なんとか順位を振ることができました。 http://www.ken3.org/cgi-bin/test/test105-1.asp ↑でテストできます。 ポイントは、Select文の中に書いたSelect文、 副問い合わせでカウントして順位を出している部分です。 DCount関数様がやっていることを(返してくれる結果を) 単純に書いただけですが・・・/* * 4.サブのサブクエリー、サブクエリーのネスト */
strSQL = "Select ID, 顧客, 購入商品, " strSQL = strSQL & " (Select Count(*) From T_DATA AS T_TEMP " strSQL = strSQL & " Where T_TEMP.顧客 = T_DATA.顧客 " strSQL = strSQL & " And T_TEMP.購入商品 < T_DATA.購入商品) AS 順位" strSQL = strSQL & " From T_DATA" このSQLを実行すると、 http://www.ken3.org/cgi-bin/test/test105-1.asp ↓結果、 ID 顧客 購入商品 順位 1 顧客1 商品A 0 2 顧客1 商品B 1 3 顧客2 商品B 0 4 顧客2 商品C 1 5 顧客3 商品A 0 6 三流君 VBA解説本 3 7 三流君 DVD2005年横浜優勝 1 8 三流君 ASP入門 0 9 三流君 SQLの技 2 が返ります、 さらに、これをサブクエリーとします。(サブのサブ、ネストします) Select文の埋め込み(サブクエリー)を使って、フィールドを作成してます。 かなり長いけど SELECT T_MOTO.顧客, ( SELECT T_000.購入商品 FROM T_DATA AS T_000 WHERE ( (T_MOTO.顧客=T_000.顧客) AND ( (Select Count(*) From T_DATA AS T_TEMP Where T_TEMP.顧客 = T_000.顧客 And T_TEMP.購入商品 < T_000.購入商品))=0); ) AS 商品0, ( SELECT T_000.購入商品 FROM T_DATA AS T_000 WHERE ( (T_MOTO.顧客=T_000.顧客) AND ( (Select Count(*) From T_DATA AS T_TEMP Where T_TEMP.顧客 = T_000.顧客 And T_TEMP.購入商品 < T_000.購入商品))=1); ) AS 商品1, ( SELECT T_000.購入商品 FROM T_DATA AS T_000 WHERE ( (T_MOTO.顧客=T_000.顧客) AND ( (Select Count(*) From T_DATA AS T_TEMP Where T_TEMP.顧客 = T_000.顧客 And T_TEMP.購入商品 < T_000.購入商品))=2); ) AS 商品2 FROM T_DATA AS T_MOTO Group By 顧客; ※あまりお奨めできないけど、Select文の中にさらに条件を埋め込んでます・・・ http://www.ken3.org/cgi-bin/test/test105-2.asp ↑でテストできます、見て笑ってください/* * 5.終わりの挨拶 </HTML> */
今回は、 強引なSQLでみなさん疲れたと思います。 いつもの読者の心の声(クレーム)が聞こえてきました、 >>あんな偏屈な三流的SQL文を発行するなら、自分で判断したほうがハヤイよ 確かに・・・ >>他にも書き方あるよ・・・ >>クロス集計は使えないのか? と読者の声が聞こえてきたところで、今日も逃げるかな。 う〜ん・・今回も、中途半端ですが、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.106 | ADO Excel接続 シート名を取得したい .OpenSchema(adSchemaTables) | [ページTOPへ戻る] |
<ADO Excel接続 シート名を取得したい .OpenSchema(adSchemaTables)>
こんにちは、三流プログラマーのKen3です。 今回は、 ADO Excel接続 で xxxx.xlsのシート名を取得 そんなことにチャレンジしてみたいと思います。 いつもの三流的なアプローチなので、実際はアレンジして使ってください。 ※一部でも参考になればいいんだけど・・・/* * 1.今回のキッカケ */
http://www.ken3.org/asp/backno/asp084.html からの書き込みで、 ---- >今回、はじめてASPでExcel操作をする事になり、右も左もわかりません。 >ひととおり読ませていただきましたが、おしえてください。 >シート名を取得するにはどうすれば良いのでしょうか? ---- と質問をもらう。/* * 2.人間なってない 問題の解答 */
この質問に対して、 ---- >こんにちは。 >私もシート名の取得方法わからないのですが、 > >ADO テーブル名 取得 >の3つでGoogleを検索すると、 > >ADO と ADOX を組み合わせて SQL Server のテーブル一覧を取得します。 >http://homepage2.nifty.com/inform/vbdb/ado_sqlservertables.htm >なんてのがアリ、 > >SQLServerだとできそうですが、今回はxlsだからダメか・・・ >※ADO関係のプロパティやサイトを探ってみては? > >お力になれずスミマセン。 >他の場所で解決方法が見つかることを願いつつ失礼します。 >※回答を期待されていて待ちぼうけさせると悪いので、 > 短いけどすぐに返信しました・・・ ---- と、とんでもなく不親切な回答を・・・ ※なんとなくできそうなURL紹介して終わり... 社内の後輩だったら二度と質問こない先輩上司って感じで、感じ悪い。/* * 3.なぜかいつも同じ目線に立てない私 */
性格がプログラムに出てくるとかよく聞くけど、 質問に対する回答で人間ができていないのがよくわかったり。 少し前、VBA系でも↓、 http://www.ken3.org/vba/backno/vba170.html >まるで腰高の内野手みたいな一歩も動く気ない回答だ。 >※サッカーの腰高ディフェンダー、バスケの棒立ち選手って感じかな。 > >いつから自分が嫌いな歳だけ高い(プライドも高い)プログラマーになっちまったんだ、 >動けよコラ、ボール(質問)に真剣に飛びつけよと思いつつ・・・ >(※自分から動けなくなった先輩プログラマーって...イヤだけど自分がなるとは・・) >けっ、プログラムや解説は三流でも、 >できない時の予防線のハリカタは超一流ですね。 >~~~~~~~~~~~~~~~~~~ >(※できないのを認めたくない、プライドだけが高いプログラマーって嫌だよね。 > 見習いたくないけど私みたいな先輩達が一部に居るのも(多い?)のも事実だったり) と、不親切さを書いてたのに直ってないねまったく。 動けよコラ(サンプル作れよ、動き出せよ)/* * 4.資料を見つけ やっと動き出す */
チョット調べると、 [HOWTO] Visual Basic または VBA から ADO を Excel データで使用する http://support.microsoft.com/default.aspx?scid=kb;JA;257819#top の Excel のデータ ソース構造 (メタデータ) を取得する なんて感じの資料がMicrosoftから見つかる。 テーブル情報のクエリ Set rs = cn.OpenSchema(adSchemaTables) と書いてあり、 >Jet プロバイダは 9 つのフィールドを含むレコードセットを返します。 >そのうち次の 4 つのフィールドにのみ値が入力されています。 > table_name > table_type - "TABLE" または "SYSTEM TABLE" > date_created > date_modified >特定のテーブルの 2 つの日付フィールドには常に同じ値が表示されます。 >この値は "最終更新日" です。つまり、"date_created" は作成日を示して >いない場合があります。 > >ODBC プロバイダも 9 つのフィールドを含むレコードセットを返します。 >そのうち次の 3 つのフィールドにのみ値が入力されています。 > > table_catalog - ブックが存在するフォルダ > table_name > table_type - Jet プロバイダと同じ なんか調べられそうな予感がしたり。/* * 5..OpenSchema(adSchemaTables)をテストする */
重い腰を上げ(だったら初めから動けよな) .OpenSchema(adSchemaTables)をテストする まずは、接続でしょ? 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") ↑オブジェクト作成して、 ↓接続文字列でファイルの場所+名前を指定するServer.MapPath("test057.xls") '接続文字列 strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Server.MapPath("test057.xls") & ";" & _ "Extended Properties=Excel 8.0" 'データベース(xls)を開く db.open strCon DBとして、.xlsが開けたから、ここから探ってみます。 'adSchemaTables情報を開く Set Rs = db.OpenSchema(adSchemaTables) で、簡単に開けるみたい。 サンプルでは、手抜きで↓ Set Rs = db.OpenSchema(20) 'オイオイ20とか書くなよ(adSchemaTables=20なので) と、Constとか使わないで直値で20とか書いてるけど。 あとは、レコードをResponse.Writeで表示させるみたいに、 'テーブルでデータを表示する Response.Write "<TABLE border='1'>" '項目名の表示(Rsとレコードセットと同じく扱ってみた) Response.Write "<TR>" For Each FldA In Rs.Fields '項目分ループする Response.Write "<TH>" & FldA.Name & "</TH>" '.Nameで項目名を表示 Next Response.Write "</TR>" 'レコードが終了するまでループ(レコードって表現はチト変かな?) Do While Rs.EOF = False Response.Write "<TR>" For Each FldA In Rs.Fields '項目分ループする Response.Write "<TD>" & FldA.Value & "</TD>" '.Valueで値を表示 Next Response.Write "</TR>" Rs.MoveNext '次のレコードへ移動 Loop Response.Write "</TABLE>" 'テーブル終了 で、OKみたいです。 ※システム情報が詰まっているレコードにアクセスするイメージかなぁ??? http://www.ken3.org/cgi-bin/test/test106-1.asp で、テスト実行できます。 試してみてください。/* * 6.終わりの挨拶 </HTML> */
今回は、 .OpenSchema(adSchemaTables) を使って、ADO Excel接続 したシート名を取得してみました。 人間性悪い三流プログラマーのサンプルですが、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
| No.107 | 文字コードで遊ぶ SJISからEUC ヤフオクURLでチェック | [ページTOPへ戻る] |
<文字コードで遊ぶ SJISからEUC ヤフオクURLでチェック>
こんにちは、三流プログラマーのKen3です。 ヤフーオークションのURL パラメータの部分を作ってみます。 ※p=%XX%XX の 部分を使って(作って)みます。 いつもの三流的なアプローチなので、実際はアレンジして使ってください。 ※一部でも参考になればいいんだけど・・・
読者様より↓フィードバック や ご意見 ADOを使用してEUC-JPのファイルをShift_JISに変換する http://frog.raindrop.jp/knowledge/archives/000051.html ↑ここを見てEUCを勉強してね・・・と言われた。ADOを使った簡単な方法があるんですね・・・※先に↑を見てください(合わせて読んでください)
/* * 1.今回のキッカケ */
隣のVBA系に来た質問なんだけど、 ---- >「No.167 amazonの広告コード UTF-8を探る(keywordを作る) 」を >ヤフーのオークション検索に使おうと、 >そのままACCESS2000のVBAにコピペしたのですが、 >ヤフーオークションの検索はUTF−8ではないのでしょうか、 >文字化けしてしまいます。 ---- と質問をもらう。/* * 2.現象や現在の状態を確認する */
謎を解くには、現場100回じゃなかった現状の確認から。 ヤフーオークションで実際に、 ニンテンドーDS を検索してみます。 (処理イメージ http://ken3-info.blog.ocn.ne.jp/screen/2007/05/ds_1a7e.html ) すると、下記のようなURLが作成されます。 http://search.auctions.yahoo.co.jp/jp/search/auc?p=%A5%CB%A5%F3%A5%C6%A5%F3%A5%C9%A1%BCDS&auccat=0&alocale=0jp&acc=jp パラメーターを見ると、P=が検索文字っぽいので、 p=%A5%CB%A5%F3%A5%C6%A5%F3%A5%C9%A1%BCDS 後ろの半角DSはそのまま送っているみたいなので、 ニンテンドー が、 %A5%CB%A5%F3%A5%C6%A5%F3%A5%C9%A1%BC かな。 ニンテンドーは6文字なので、 ニ %A5%CB ン %A5%F3 テ %A5%C6 ン %A5%F3 ド %A5%C9 ー %A1%BC カタカナだったので、少々不安ですが、 ※私の作った例がよくなかった・・・(笑) ASP系の解説61で、 http://www.ken3.org/asp/backno/asp061.html SJIS--JISのコード変換 を書いてます。ここでニンテンドーを変換してみます。 ↓テストの変換プログラム http://www.ken3.org/cgi-bin/test/test061-1.asp?DATA=%83j%83%93%83e%83%93%83h%81%5B ニンテンドーをJISとシフトJISに変換すると、 受け取ったデータは[ニンテンドー]です バイト数は、12Byteです [ニ] をAscで変換すると-31894 さらにHexで16進(SJIS)は836A JISコードは254B [ン] をAscで変換すると-31853 さらにHexで16進(SJIS)は8393 JISコードは2573 [テ] をAscで変換すると-31899 さらにHexで16進(SJIS)は8365 JISコードは2546 [ン] をAscで変換すると-31853 さらにHexで16進(SJIS)は8393 JISコードは2573 [ド] をAscで変換すると-31896 さらにHexで16進(SJIS)は8368 JISコードは2549 [ー] をAscで変換すると-32421 さらにHexで16進(SJIS)は815B JISコードは213C あれ?違った・・・ 質問にあった、UTF-8 でも無く シフトJIS や JIS でもないのかぁ・・・ う〜ん、困った。(※困ったから、新しいネタを発行できたんだけどね)/* * 3.漢字コードってどんなのあるの? */
三流プログラマーの前に日本人プログラマーだから、 漢字コード系は避けて通れないのかなぁ・・・ う〜ん、 IEのメニュー 表示 の エンコードを見ると、 通常自動になっていると思うのですが、 ・UFT-8 ・EUC ・シフトJIS なんて項目があるみたいです。 処理イメージ↓ http://ken3-info.blog.ocn.ne.jp/screen/2007/05/post_afad.html/* * 4.資料を見つけ やっと動き出す */
EUCコードってヤツがまだ試していないので、 いつものように わからなかったら google/Yahoo で検索してみます。 キーワードは SJIS EUC 漢字変換 の3つのキーワードで探してみます。 http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&rls=GGLJ,GGLJ:2006-35,GGLJ:ja&q=SJIS+EUC+%e6%bc%a2%e5%ad%97%e5%a4%89%e6%8f%9b (※EUCだけだとかなりの数出てくるのでSJISと変換を追加) 調べると、 JIS, EUC, SJIS の漢字コードについて http://www.unixuser.org/~euske/doc/kanjicode/index.html や JIS X 0213 FAQ http://seclan.dll.jp/ccjx0213.htm なんて感じの解説サイトが見つかります。 先人たちの記録に感謝ですね。 こんな感じで、なんか調べられそうな予感がしたり。/* * 5.JISコードの 最上位ビットを立て EUCにする? */
JISの頭のビットを立てたEUCコードなんてのがあります。 [ニ] JISコードは254B なのですが、 この 25 と 4B 頭のビットを立てると、 ニ %A5%CB になります。 頭のビットを立てる?な感じですが、簡単な方法は、 or &h80 と論理演算をするのが楽かなぁ? SJISからJISの変換後に or &H80 としてみます。 ※+&H80でもOKかなぁ? ↓元々あったJIS変換ルーチンに組み込んで作ってみました。 http://www.ken3.org/cgi-bin/test/test107-1.asp?DATA=%83j%83%93%83e%83%93%83h%81%5B+DS <%@LANGUAGE=VBScript%> <html> <head> <title>SJISからEUCに変換、文字コード関係で遊ぶ</title> </head> <body> <h2>SJISからEUCコードに変換、文字コード関係で遊ぶ</h2> と言っても、JISのコードの頭を0x80でビットを立ててるだけなのですが。<br> <br> 自作したSJIS--EUC変換ルーチンを呼んでます。<br> ※詳細は、ソースと詳細解説のページを見てください。<br> <hr> <% CHK_DATA = Request.QueryString("DATA") 'パラメータの代入 '長さをチェックする If Len(CHK_DATA) <> 0 Then '文字が入っていたら Response.Write "受け取ったデータは[" Response.Write Server.HTMLEncode(CHK_DATA) & "]です<br>" '関数を呼んで、バイト数を表示する Response.Write "バイト数は、" & Byte_Count(CHK_DATA) & "Byteです<br>" '文字数分ループして、コードを表示 For n = 1 To Len(CHK_DATA) Response.Write n & "文字目は" strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す Response.Write "[" & Server.HTMLEncode(strWORK) & "] " strCODE = Hex(Asc(strWORK)) If Len(strCODE) <= 2 Then '半角か? Response.Write " 半角はそのまま16進数にする " & strCODE Else Response.Write " さらにHexで16進(SJIS)は" & strCODE Response.Write " JISは" & SJIStoJIS(strCODE) Response.Write " EUCは" & SJIStoEUC(strCODE) End If Response.Write "<BR>" & vbCRLF Next 'ヤフーオークションのリンクを作ってみる。 p="" 'パラメータ文字列の初期化。 For n = 1 To Len(CHK_DATA) strWORK = Mid(CHK_DATA, n, 1) 'n番目の文字を取り出す strCODE = Hex(Asc(strWORK)) If Len(strCODE) <= 2 Then '半角か? If strWORK = " " Then '半角スペースは+に変換する p = p & "+" 'ほかにも特殊文字があるんだけど手抜き Else p = p & strWORK '半角はそのまま追加する ヤフオクの場合 End If Else sEUC = SJIStoEUC(strCODE) 'EUCコードに変換する。 '%付きの文字列 %XX%XX を作成する。 p = p & "%" & Mid(sEUC,1,2) & "%" & Mid(sEUC,3,2) End If Next ' A リンクを表示する。 sURL = "http://search.auctions.yahoo.co.jp/jp/search/auc?" sURL = sURL & "p=" & p '変数pを追加 sURL = sURL & "&auccat=0&alocale=0jp&acc=jp" '追加パラメータ Response.Write "<a Href='" & sURL & "' target='_blank'>" Response.Write Server.HTMLEncode(CHK_DATA) & "</a>← ヤフオクに飛ぶ<br>" Response.Write "↑キーワードリンク リンクのコードは↓<br>" Response.Write Server.HTMLEncode(sURL) & "<br>" End If %> <HR> <FORM ACTION="test107-1.asp" METHOD="GET"> 調査したい文字列を入力してください。<br> <INPUT TYPE="text" SIZE="30" NAME="DATA" VALUE="<%=CHK_DATA%>"> <INPUT TYPE="submit" VALUE="コード調査開始"><br> ↑いろいろと遊んでみてください↑ </FORM> <br> </body> </html> <% 'SJISコードの文字列を受け取り、EUCコードの文字列を返す'SJISコードの文字列を受け取り、JISコードの文字列を返す
Function SJIStoEUC(strSJISCODE) Dim hi Dim lo 'シフトJISコードの上位バイトを hi、下位バイトを lo とします。 hi = Clng("&h" & Mid(strSJISCODE, 1, 2)) lo = Clng("&h" & Mid(strSJISCODE, 3, 2)) If hi <= &H9F Then hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。 Else hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。 End If 'hi に 2 を乗じて、さらに 1 を加えます。 hi = hi * 2 + 1 'lo が 0x7F より大きい場合、 lo から 1 減じます。 If lo > &H7F Then lo = lo - 1 'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。 If lo >= &H9E Then lo = lo - &H7D hi = hi + 1 Else 'そうでない場合、 lo から 0x1F 減じます。 lo = lo - &H1F End If 'JISの hi と lo ができたので、0x80 を or して 最上位のビットを立てます。 hi = hi or &h80 lo = lo or &h80 '結果を返します SJIStoEUC = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2) End Function'文字列を受け取り、バイト数を返す
Function SJIStoJIS(strSJISCODE) Dim hi Dim lo 'シフトJISコードの上位バイトを hi、下位バイトを lo とします。 hi = Clng("&h" & Mid(strSJISCODE, 1, 2)) lo = Clng("&h" & Mid(strSJISCODE, 3, 2)) If hi <= &H9F Then hi = hi - &H71 'hi が 0x9f 以下の場合、 hi から 0x71 減じます。 Else hi = hi - &HB1 'そうでない場合、 hi から 0xB1 減じます。 End If 'hi に 2 を乗じて、さらに 1 を加えます。 hi = hi * 2 + 1 'lo が 0x7F より大きい場合、 lo から 1 減じます。 If lo > &H7F Then lo = lo - 1 'lo が 0x9E 以上の場合、lo から 0x7D 減じて、hi に 1 加えます。 If lo >= &H9E Then lo = lo - &H7D hi = hi + 1 Else 'そうでない場合、 lo から 0x1F 減じます。 lo = lo - &H1F End If '結果を返します SJIStoJIS = Right("0" & Hex(hi), 2) & Right("0" & Hex(lo), 2) End Function%> カタカナや英数だけだとつまらないので、 任天堂 をキーワードに http://www.ken3.org/cgi-bin/test/test107-1.asp?DATA=%94C%93V%93%B0 ↑こんな感じでやってみました。 任天堂 Wii ↓ http://www.ken3.org/cgi-bin/test/test107-1.asp?DATA=%94C%93V%93%B0+Wii あとは、アレンジして有効活用していただければ、、、
Function Byte_Count(strMOJI) bcnt = 0 '文字数分ループして、コードを表示 For n = 1 To Len(strMOJI) nCODE = Asc(Mid(strMOJI, n, 1)) 'n番目の文字コードを求める If (nCODE And &HFF00) = 0 Then 'コードは1バイトか? *asp055 bcnt = bcnt + 1 Else bcnt = bcnt + 2 End If Next 'リターン値をセットする Byte_Count = bcnt End Function/* * 6.終わりの挨拶 </HTML> */
今回は、 EUCのコード変換にチャレンジしてみました。 ※と言っても、半角カナの変換はやらずに逃げたけど・・・ 三流プログラマーのサンプルですが、 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。 ---------------------------------- 関連項目(ただのバックナンバー紹介) ---------------------------------- ASP系の解説61 http://www.ken3.org/asp/backno/asp061.html SJIS--JISのコード変換
| No.108 | 2003/00/00 ******** |
[ページTOPへ戻る] |
<---->
| No.109 | 2003/00/00 ************ |
[ページTOPへ戻る] |
<---->
三流解説を読んでいただき、どうもです。ここから下は、三流君宛のメッセージ送信や 三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、※質問や感想は、気軽に送ってくださいね。
まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。
次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません
DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く
VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。
ニガテな環境設定系など
[Win2003 Server に IIS を Setup]・・・ポイントの無い、ほぼ一本道解説だけど。
[IIS 仮想ディレクトの作成とASP動作TEST]・・・Web拡張でASPを有効にしただけです。
Blog:[三流君の作業日記]/ [サンプルコードのゴミ箱]/ 広告-[通販人気商品の足跡]
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。
時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。