汎用的な文字列処理を実施する ActiveX DLL です
2011/01/03
(ver2.2.0.3) IPv6Str2Bin(),IPv6Bin2Str() のバグ修正
2011/01/02
(ver2.2.0.2) 新関数 IPv6Str2Bin(),IPv6Bin2Str() を新設した
2008/10/16
(ver2.2.0.1) 新関数 VBEscape() を新設した
2007/11/03
(ver2.2.0.0) 内部Form がオブジェクト変数でなかったので、オブジェクト変数にした
2007/07/05
(ver2.1.0.9) DateMiraiKako() 関数がまともに動いていなかったので、バグ修正
2007/01/31
(ver2.1.0.8) URLanalysis() 関数の内部処理の全面改訂(URLanalysis2() は、内部的にURLanalysis() を呼び出している)
URLanalysis() 関数のバグ修正(Query に「:」があるとそこまでをスキームとして解釈するバグ)
2007/01/30
(ver2.1.0.7) NetGetCalcContentLength()/NetGetCalcContentLengthBin() 関数の仕様を変更(Transfer-Encoding ヘッダを削除する事も行う)
2007/01/26
(ver2.1.0.5) ver2.1.0.6 で追加した StringCompare/StringCompareKani() 関数が必要なくなったので、削除した。(VB6SP6 のおかしな挙動用として作ったが勘違いだった)
2007/01/26
(ver2.1.0.6) StringCompare() 関数の追加,StringCompareKani() 関数の追加
2006/10/26
(ver2.1.0.5) NetGetChunkBin() 関数のバグ修正
2006/04/14
(ver2.1.0.4) NetGetCalcContentLength()/NetGetCalcContentLengthBin() 関数のバグ修正
未公開
(ver2.1.0.3) NetGetCalcContentLength() 関数の追加,NetGetCalcContentLengthBin() 関数の入出力使用の厳密化
未公開
(ver2.1.0.3) NetGetCalcContentLength() 関数の追加,NetGetCalcContentLengthBin() 関数の入出力使用の厳密化
2006/03/14
(ver2.1.0.2) NetGetHTTPResponseStatusCode() の処理ルーチンを少し変更
NetGetAllHeadBin() 関数の追加,NetGetAllHead() 関数の入出力使用の厳密化,
NetGetAllBodyBin() 関数の追加,NetGetAllBody() 関数の入出力使用の厳密化
NetGetHTTPResponseBin() 関数の追加,NetGetHTTPResponse() 関数の入出力使用の厳密化
2006/02/23
(ver2.1.0.1) おさかなエンコードの関数(enFish(),enFishBin(),deFish(),deFishBin())の基本的であり致命的なバグの修正(デバグしていないのがバレちゃいますね)
2005/12/24
(ver2.1.0.0) おさかなエンコードの関数(enFish(),enFishBin(),deFish(),deFishBin())を追加
2005/11/10
(ver2.0.0.9) NetGetCalcContentLength() で(元々なかったので)「Content-Length」ヘッダを挿入する際のバグ修正
2005/10/26
(ver2.0.0.8) ShellSort() が無限ループになるバグの修正,BubbleSort() 関数の追加
未公開
(ver2.0.0.7) TrimLf_CRLF(), GetNTFSFileAnalysis(), GetErrorString() 関数の追加, reg_unicode() で空文字を与えられたときのバグ修正。NetGetMIMEHako() 関数で vbLf も考慮。CSVEscape() で vbCr,vbLf も考慮
NetGetHTTPResponse() 関数で、Chunkでもなく、Content-Length もない場合、空文字を返す仕様とした。
未公開
(ver2.0.0.6) dDate() がそもそもいい加減の値を返していたバグの修正。DateMiraiKako() 関数を新規追加
未公開
(ver2.0.0.5) NetGetHTTPResponse() 関数の正しいサイズのボディが取得できないバグの修正
2005/04/04
(ver2.0.0.4) NetGetMIMEHako(), NetGetMIMERealBoundary(), NetGetMIMEBoundary(), Version(), NetGetPostData(), CSVEscape() 関数の追加
未公開
(ver2.0.0.3) CreateFolder() 関数の追加
未公開
(ver2.0.0.2) GetFileAnalysis() 関数の仕様変更
未公開
(ver2.0.0.1) ShellSort() 関数の追加
未公開
(ver2.0.0.0) ListSort() 関数の追加
未公開
(ver1.9.0.2) MinIsDoreEx(),MinIsDore(), MaxIsDore(),NetGetCalcContentLength() 関数の追加
いくつかの関数処理の最適化(新関数に内部的に置き換えたり...)
未公開
(ver1.9.0.1) AddRes(), DelSpaceGyo() 関数の追加
未公開
(ver1.9.0.0) 漢字コードの一覧を返す GetKanjiList() 関数の追加
未公開
(ver1.8.0.3) SJIS/ASCII に対しての UNICODE の冗長化された表現を取り除く関数 reg_unicode() と、文字の配列化を簡単にする為の前処理関数 Add_Insert_String() の追加
未公開
(ver1.8.0.2) LeftEx(), RightEx(), MidEx() のバグ修正
未公開
(ver1.8.0.1) 新関数(LeftEx(), RightEx(), MidEx()) の追加
未公開
(ver1.8.0.0) 新関数(mySQL_Moji_func(), NetGetHeadDic(), NetGetHTTPResponseStatusCode(), NetGetHTTPResponse() の追加
NetGetHead(), NetGetAllHead(), NetGetAllBody() の仕様を変更
未公開
(ver1.7.0.9) 新関数(GetIPHako())の追加
2004/01/14
(ver1.7.0.8) GetCalender() のバグ対策
2004/01/13
(ver1.7.0.7) 新関数(WeekIs(),GetCalender())の追加
2003/11/28
(ver1.7.0.6) 新関数(GetCmdLineAnalisys())の追加
2003/07/25
(ver1.7.0.5) DCOM 化と、CLSID の互換性のチェックをつけて再コンパイルした...だけ
2003/07/03
(ver1.7.0.4)新関数(PGPCreateSign(),PGPEscape())の追加
2003/06/27
(ver1.7.0.3)内部仕様のちょっとした修正
2003/06/21
(ver1.7.0.2)新関数(ResAddText(),TRimText())を追加
2003/06/11
(ver1.7.0.1)ReplaceB(),moji_Replace_funcB() 関数のバグ修正
2003/06/09
(ver1.7.0.0)GetFileAnalysis(),URLanalysis2() 関数を追加
URLanalysis(),SetURLanalysis() 関数のバグ修正と仕様の変更
2003/06/04
(ver1.6.0.9)NetGetMailAddress() 関数のバグ修正といくつかの関数のアルゴリズムの高速化
2003/03/23
(ver1.6.0.8)NetGetAllBody() 関数のバグ修正
2003/03/19
(ver1.6.0.7)新関数の追加
2003/01/25
(ver1.6.0.6)GetNumHako() のバグ修正
2002/08/31
(ver1.6.0.5)新関数の追加、NumChk() のオプションの追加
2002/08/31
(ver1.6.0.4)新関数の追加
2002/08/28
(ver1.6.0.3)StrConvs() のバグ修正と StrConvs() のオプションを追加
2002/08/24
(ver1.6.0.2)新関数の追加
2002/08/13
(ver1.6.0.1)新関数の追加と、DateEncode() のバグ修正と NumChk() のオプションの追加、SetURLanalysis() のアルゴリズムを新関数 URLanalysis() へ移動、GetURLanalysis() のオプションの追加
2002/06/22
(ver1.5.0.5)新関数の追加と、moji_chk_func_ex() のアルゴリズムの修正と NumChk() のオプションの追加
2002/06/02
(ver1.5.0.2)新関数の追加
2002/05/27
(ver1.5.0.1)新関数を追加と、各関数(主に日時処理)のアルゴリズムを修正
2002/05/18
(ver1.5.0.0)新関数を追加と、各関数のアルゴリズムを修正
2002/03/31
新関数を追加と、RealPath()関数のアルゴリズムを修正
2002/03/05
新関数を追加
2002/02/28
SQL_Moji_func 関数のアルゴリズムを修正
2002/02/28
新関数を追加
2001/09/27
新関数を追加
2001/05/09
新関数を追加
2001/07/27
新関数を追加
2001/10/21
新関数を追加
2001/10/16
新関数を追加
2001/10/22
AddZero 関数の仕様を変更
2001/10/22
新関数を追加
2001/10/23
PasGene()関数のバグ修正
2001/10/23
新関数を追加
2001/10/25
新関数を追加
内容
入力した文字列(Variant 型)に対し、処理した結果を出力(Variant 型)します。
処理できる文字列は、2GB 程度
(VisualBASIC の String 型を操作、ポインタとして Long 型を利用しているので、その制限)
主に、ASP(Active Server Pages) などで便利だと思われる処理内容が多いです。。
ASP の場合、
HTML コードを全て文字化する Server.HTMLEncode() メソッド。
CGI(URL) エンコードする Server.URLEncode() メソッドを駆使すれば、セキュリティ対策はほぼパーペキでしょう。
メソッド一覧
GetErrorString()
エラーの際に返す "エラー文字列" を返すようにした。(今更ですが...)
Version()
バージョン番号を返すようにした。(今更ですが...)
moji_chk_func(引数1,引数2)
引数1 から、引数2 の文字列を全て削除
大文字小文字を区別せずに削除します。
(不正な文字列を削除できます)
moji_chk_func_ex(引数1,引数2,引数3)
引数1 から、引数2 の文字列を削除
引数3 にその回数を指定します。
引数3 が 0 の場合、引数1 から引数2 の文字列が見つからなくなるまで処理します。
moji_chk_func(引数1,引数2) は、moji_chk_func_ex(引数1,引数2,0) として処理をこの関数に渡しています。
大文字小文字を区別せずに削除します。
moji_chk2_func(引数1,引数2,引数3)
引数2 で始まり、引数3 で終わる範囲の文字列を、引数1 から全て削除
大文字小文字を区別せずに削除します。
例えば、<SCRIPT .... </SCRIPT> などという文字列を掲示板などで投稿されても削除する事が可能です。
moji_chk2_func_ex(引数1,引数2,引数3,count)
引数2 で始まり、引数3 で終わる範囲の文字列を、引数1 から count の回数分削除
大文字小文字を区別せずに削除します。
moji_chk2_func(引数1,引数2,引数3) は、moji_chk2_func_ex(引数1,引数2,引数3,0) として処理をこの関数に渡しています。
moji_Replace_func(引数1,引数2,引数3,引数4,回数)
引数1 内の引数2 から引数3 までを引数4 に置換する
回数には、置換する回数を指定。
回数に 0 を指定した場合は、置換処理がなくなるまで処理をする。
回数に 0 を指定した場合に、引数の指定の仕方によっては無限ループになる事があるので注意。
moji_Replace_funcB(引数1,引数2,引数3,引数4,回数)
引数1 内の引数2 から引数3 までを引数4 に置換する
moji_Replace_func() のバイナリ版
回数には、置換する回数を指定。
回数に 0 を指定した場合は、置換処理がなくなるまで処理をする。
回数に 0 を指定した場合に、引数の指定の仕方によっては無限ループになる事があるので注意。
ReplaceB(引数1,引数2,引数3,回数)
バイナリ的に文字列を置換する。
回数には、置換する回数を指定。
回数に 0 を指定した場合は、置換処理がなくなるまで処理をする。
回数に 0 を指定した場合に、引数の指定の仕方によっては無限ループになる事があるので注意。
numnum(引数)
引数が数字かどうか。数字の場合、半角数字にして戻す。数字でない場合、"error" という文字列が戻る
AddZero(引数,桁)
引数が数字かどうかチェック(しない事にした{2001/10/22})し、数字の場合、桁で指定した文字数になるように、先頭に 「0」を埋めて戻す。。数字でない場合、"error" という文字列が戻る
桁は 1 以上でない場合、"error" という文字列が戻る
例:AddZero("2355",9) = 000002355
mail_chk(引数)
引数がメールアドレスとして妥当かどうか。妥当でない場合、"error;" という文字列を戻す
チェック項目
「@」が一つだけである
「@」の後ろには「..」はない
「@」の後ろに「.」が一つ以上
「@」と次の「.」の間に一文字以上
最後の「.」の後の文字列は、2文字か3文字である
または、0 文字である。(FQDN)
「@」の前に一文字以上ある
SQL_Moji_func(引数)
MS-SQL 用。引数にある「'」を「''」に置換する
mySQL_Moji_func(引数)
mySQL,PostgreSQL 用。引数にある「'」を「''」に「\」を「\\」に置換する
GetCalender(引数)
引数に yyyy/mm を与えると、その月のカレンダーを作るためのデータを返す 戻り値は、カンマ区切りの数字(CSV 形式)。
例えば、その月の初日(12/1 とか 1/1 とか)が、月曜日の場合は、空白が一つ先頭にある CSV 形式が返される。
よって、この値を Split() で7つずつ改行するようにすれば、カレンダーとなる。
(実際には、特定の日にちごとに何か処理コードを埋め込んだりする必要があるでしょう)
DateDecode(myDate as Date,Options as Variant)As Variant
Date 型を引数にして「YYYY/MM/DD hh:mm:ss」という文字列を返す。
引数は、非 Variant 型の Date 型です
(Variant 型以外の型が引数または戻り値です)
Options 1: 日付を、返す。 yyyy/mm/dd (年は、4桁。後、2桁。1999/01/03)
Options 2: 時間を返す。 HH:MM:SS (21:09:06)
Options 3: 日付、時間を返す yyyy/mm/dd HH:MM:SS (日付と時間は、スペースで区切られる)
DateEncode(inMyStr as Variant) as Date
「YYYY/MM/DD hh:mm:ss」を引数にして Date 型を返す
戻り値が、非 Variant 型です。
dDate(DateStr,dYYYY,dMM,dDD,Dhh,Dmm,Dss)
DateStr(YYYY/MM/DD hh:mm:ss)を基準として、
dYYYY 年加え、
dMM 月加え、
dDD 加え、
Dhh 時加え、
Dmm 分加え、
Dss 秒加えた
「YYYY/MM/DD hh:mm:ss」を返します
DateMiraiKako(比較したい日時文字列,基準となる日時文字列)
第一引数が、第二引数の過去ならば「-1」。現在なら「0」。未来なら「1」を返す
エラーなら、「error」を返す
第一引数、第二引数共に「YYYY/MM/DD hh:mm:ss」という書式の事
比較したくなくなったら「-1」を与える
例: 月までを比較したい
If DateMiraiKako("2005/05/-1 00:00:00","2005/06/01 00:00:00") = "0" Then
GetFirstWeek(引数1,X,Y)
引数に、年月の yyyy/mm をあてると、その月の第XのY曜日の日付を戻す。
例:GetFirstWeek(2002/08,3,4) だと2002年8月の第3水曜日という事で 21 が戻る
X に 0 を指定すると、その月の最後のY曜日の日付を返す
Y には、
1:日曜日
2:月曜日
3:火曜日
4:水曜日
5:木曜日
6:金曜日
7:土曜日
WeekIs(引数)
引数に yyyy/mm/dd を指定すると、曜日を返す。
戻り値 : error : エラー
1 : 日曜日
2 : 月曜日
3 : 火曜日
4 : 水曜日
5 : 木曜日
6 : 金曜日
7 : 土曜日
DaysIs_func(引数)
引数に、年月の yyyy/mm をあてると、その月の日数を戻す。
DayIs(引数)
引数=1 : 現在日付を yyyy/mm/dd 形式で戻す
引数=2 : 現在時刻を HH:MM:SS 形式で戻す
引数=3 : 現在日時を yyyy/mm/dd HH:MM:SS 形式で戻す
CreateLogFileName(ヘッダ,フッタ,オプション)
指定したオプションに基いて日付を含んだファイル名を返す
引数=0 : 年 引数=1 : 月 引数=2 : 日 ex) CreateLogFileName("iis",".log","2")
戻り値は、「iisYYYYMMDD.log」
StrConvs(引数,オプション)
VisualBASIC の標準関数を利用しているだけ。
オプション=vbnarrow : 全角を半角に変換
オプション=vbwide : 半角を全角に変換
オプション=vbkatakana : ひらがなをカタカナへ変換
オプション=vbhiragana : カタカナをひらがなへ変換
オプション=vbfromunicode : ユニコードをローカルのコード体系へ変換
オプション=vbunicode : ローカルのコード体系をユニコードへ変換
TagStrConvs(引数,オプション)
引数で指定された文字列中の HTML タグ("<" と ">" で囲まれた領域の英字を大[小]文字に変換する)
オプション=U : HTMLタグ中の文字列を大文字に変換
オプション=L : HTMLタグ中の文字列を小文字に変換
オプション=その他 : なにもせず
URLanalysis2(引数)
引数で指定した入力文字列を HTTP リクエストの一行目だとして解析する。
戻り値として、Lf(0x0a)をデリミタとして「メソッド Lf プロトコル(スキーム) Lf ユーザ名 Lf パスワード Lf ホスト名 Lf ポート番号 Lf ディレクトリ名 Lf ファイル名(拡張子なし) Lf 拡張子(先頭は「.」) Lf クエリー文字列 Lf プロトコル名 Lf プロトコルバージョン」というフォーマットの文字列が返る。
引数の文字列中に該当する値がなかった場合は、該当箇所は空文字列が入る。
ディレクトリ名に関しては例外で、最初が「/」で最後が「/」の文字列が入っている。
URLanalysis(引数)
引数で指定した入力文字列を URL だとして解析する。
戻り値として、Lf(0x0a)をデリミタとして「プロトコル(スキーム) Lf ユーザ名 Lf パスワード Lf ホスト名 Lf ポート番号 Lf ディレクトリ名 Lf ファイル名 Lf クエリー文字列」というフォーマットの文字列が返る。
引数の文字列中に該当する値がなかった場合は、該当箇所は空文字列が入る。
ディレクトリ名に関しては例外で、最初が「/」で最後が「/」の文字列が入っている。
解析処理のターゲットとしては、戻り値のフォーマットを見てもらえれば推定できるとは思いますが、HTTP を念頭においている。
(ftp 固有の情報などは考慮されていない)
先頭が「/」で始まる「://」を含まない文字列は、パスだけの URL として解釈するようにした。
SetURLanalysis(引数)
引数で指定した入力文字列を URL だとして解析する。
戻り値はない。
解析結果の取得には、下記の GetURLanalysis() メソッドを使用する。
URL とは、「プロトコル(スキーム)://ユーザ名:パスワード@ホスト名:ポート番号/ディレクトリパス/ファイル名」というフォーマットの事である。
URLanalysis() を内部で呼び出しているだけなので、URLanalysis() を使った方がよい
解析処理のターゲットとしては、戻り値のフォーマットを見てもらえれば推定できるとは思いますが、HTTP を念頭においている。
(ftp 固有の情報などは考慮されていない)
詳細な仕様は、URLanalysis() 関数を参照
GetURLanalysis(オプション)
上記の SetURLanalysis() メソッドで解析した結果をオプションに合わせて取得する。
オプション="1" : プロトコルを取得
オプション="2" : ユーザ名を取得
オプション="3" : パスワードを取得
オプション="4" : ホスト名を取得
オプション="5" : ポート番号を取得
オプション="6" : ディレクトリパスを取得
オプション="7" : ファイル名を取得
オプション="8" : クエリー文字列を取得
ディレクトリの区切り文字列は、"/" です。
オプション="6" のディレクトリパス名の最後の文字は、"/" だろう。
または、空文字列であろう。
GetNTFSFileAnalysis(ファイル名,モード)
ファイル名(パスは含んではいけない)を解析します。
モード : 0 の時、ファイル名を返す
モード : 1 の時、NTFS ストリーム名を返す
GetFileAnalysis(ファイル名,モード)
ファイル名を解析します。
モード : 0 の時、ファイル名(拡張子なし)を戻す(パス含む)
モード : 1 の時、ファイル名の拡張子の部分を戻す
拡張子がなけれぱ、空文字を返す
モード : 2 の時、ファイル名(拡張子なし)を戻す(パス含まず){ver2.0.0.2}
モード : 3 の時、パスの部分を戻す{ver2.0.0.2}
例:
GetFileAnalysis("boot.ini","0") → "boot"
GetFileAnalysis("boot.ini","1") → "ini"
GetFileAnalysis(".htaccess","0") → ".htaccess"
GetFileAnalysis(".htaccess","1") → ""
ver2.0.0.2 で、引数としてパスが与えられてもよいようにした。
GetCmdLineAnalisys(引数)
コマンドラインの引数の解析を行い、LF(改行コードの一つ) をデリミタとした CSV 形式で返す。
半角スペースで分解しつつ...
「"」で囲まれた領域(先頭と最期のみ見る)は、まとめる
文字列途中の「"」(前後に半角スペースがない)は、無視
ただし、「\"」は「"」にする
注意 : 「|」「>」「<」「&&」は見ていないよ。
VC++ でコンパイルしてみてルールをちらっと調べてみたんだけど
、ようわからん
InStrBack(引数,オプション)
引数で指定した文字列をオプションで指定した文字列があるかどうかを右側から探索し、見つかった位置のオプションに含まれている最初の文字の位置を返す。
例えば、
InStrBack("abcdabcded","cd")
の場合、7 が返る。
見つからなかった場合、0 が返る。
PasGene(引数1,引数2,引数3,引数4,引数5,引数6,引数7)
パスワードを生成します。
というかランダムな文字列を 引数1 から 引数2 の文字列長の範囲で生成します。
生成する文字列にどの文字種を使うかの設定が 引数3 から 引数6 までで、含める場合 "1" を指定します。
引数3 : 数字を含める。
引数4 : 英大文字を含める。
引数5 : 英小文字を含める。
引数6 : 記号を含める。
指定した文字種を生成した文字列に必ず含めたい場合、引数7 に "1" を指定します。
戻り値は、生成したランダムな文字列です。
引数指定に間違いがある場合、"error" という文字列が返ります。
セッション ID の生成にも利用できます。
JavaScript 版は、
ここ
GetIPHako(str)
いわゆる「192.168.0.0/27」のようなものを csv 形式でIPアドレスを展開する。
不正なフォーマットのデータを渡された場合、"error" という文字列が返ります。
GetNumHako(min, max, str)
str の文字列を解析して、数字の配列を CSV 形式にして返す
例えば、GetNumHako(1,11,"-2,3,5-6,9-,8-")
"1,2,3,5,6,9,10,11,8" という文字列を返す
最小値は、0 以上
並べ替えはしていないよ
ポートスキャンのポート指定に役立つかも....元々 nmap のポート指定と同等なものを作るきっかけですし...
GetRandomHako(str)
str 文字列を CSV 形式だとして、配列化する。
それらをランダムに入れ替えて CSV 形式にして戻す。
ランダム・ポートスキャンとかに役立つかも...
GetColorHako(n)
n 個の色(RRGGBB 形式)を CSV 形式にして返す
例えば、n = 8 ならば
"000000,0000ff,00ff00,00ffff,ff0000,ff00ff,ffff00,ffffff" という文字列を返す
R G B の 3 次元色空間上の格子点(x,y,z)を n 個返すという事
実際には、n より大きくてもっとも近い整数の 3 乗根のある値です。
n= 10 なら、27(3^3) 個返ってくる。
円グラフ Java Applet 用
かな
エラーなどの場合、"error" という文字列を返る
n は、1 以上です。さらに、あまりにn が大きすぎた場合、"error" を返します
hoSyoku(対象文字列)
対象文字列を 16 進として、ビット反転させます。
16 進でないと、"error" という文字列を返す
変換規則
"0"<->"f"
"1"<->"e"
"2"<->"d"
"3"<->"c"
"4"<->"b"
"5"<->"a"
"6"<->"9"
"7"<->"8"
ChkSepalate(対象文字列,チェック文字列)
対象文字列の最後が、チェック文字列でない場合、対象文字列にチェック文字列を追加します。
対象文字列、チェック文字列が空の場合、空文字列を返す。
対象文字列長がチェック文字列長より小さい場合、殻文字列を返す。
例: パスをつなぎ合わせていくのに便利。
例: ChkSepalate("c:\temp","\") の場合、"c:\temp\\" が返る
ChkSepalate2(対象文字列,チェック文字列)
ChkSepalate() の前方版
対象文字列の最初の文字列が、チェック文字列の場合、対象文字列の先頭のチェック文字列の部分を削除します。
対象文字列、チェック文字列が空の場合、空文字列を返す。
対象文字列長がチェック文字列長より小さい場合、空文字列を返す。
例: パスをつなぎ合わせていくのに便利。
例: ChkSepalate2("\..\..\config.ini","\") の場合、"..\..\config.ini" が返る
RealPath(対象文字列,チェック文字列)
対象文字列中の ..\ や ../ を省いていきます。
\ か / かは、チェック文字列で指定。
対象文字列、チェック文字列が空の場合、空文字列を返す。
対象文字列長がチェック文字列長より小さい場合、空文字列を返す。
例: RealPath("a:\temp\..\tt.txt","\") の場合、"a:\tt.txt" を返す。
例: RealPath("a:\temp..\temp1\..\tt.txt","\") の場合、"a:\temp..\tt.txt" を返す。
VBEscape(対象文字列,[True|False],[True|False])
VB/VBScript の文字列リテラルのためのエスケープを実施する
第二引数が「True」の場合「/<>」もエスケープする
第三引数が「True」の場合「'」もエスケープする
基本的には
「"」→「""」
CrLf → vbCrLf
Cr → vbCr
Lf → vbLf
/ → Chr(47)
< → Chr(60)
> → Chr(62)
' → Chr(39)
CSVEscape(対象文字列)
CSV のデータとして書き出すときのエスケープを行う(MS-Excel 風)
変換ルールは以下です
「,」「CrLf」「"」があるときは、データを「"」で囲む
「Lf」「Cr」があるときは、データを「"」で囲む(ver2.0.0.7)
「"」→「""」
「CrLf」→「Lf」
HTMLEncode(対象文字列,モード)
対象文字列を HTMLEncode します。
ASP の Server.HTMLEncode() と同等なものです。
つまり、モードが空文字(つまり "" を指定)の場合
& → &
" → "
< → <
> → >
へ変換します。
モードが空文字でなければ、
' → '
への変換も追加されます。
HTMLDecode(対象文字列,モード)
HTMLEncode と逆です。
モードの使い方も同様です。
GyoSu(文字列A,文字列B)
文字列A 中に文字列B が何個あるかを戻します。
文字列A をテキストファイルの中身として、文字列B を VbCrLf とすると、行数が戻るでしょう。
ReplaceEx(文字列A,文字列B,文字列C)
文字列A 中の文字列B を文字列C に置き換えます。
Replace 関数そのものですが、Replace 関数は再帰処理をしない。
本関数は、再帰処理をします。
ReplaceEx("..././abc","../","") だと「abc」を返しますが、Replace 関数では、「../abc」を返してしまうでしょう。
AddCam(対象文字列,モード)
対象文字列に 3 桁ずつのカンマをつける
対象文字列が数値として妥当かどうかの判断はしていない
モード : 0 カンマを付加します。
モード : 1 カンマを除去します。
例 : AddCam("1234.1",0) -> "1,234.1" JavaScript 版は
ここ
NumChk(対象文字列,モード)
対象文字列を数値かどうかを判断して、数値なら、モードに従った範囲内の整数であれば、その数値をバリアント型で返す。
そうでない場合 "error" を返す。
(内部では numnum() を利用している)
モード
1 : 1〜12
2 : 0〜59
3 : 1〜65535
4 : 0〜255
5 : 1〜+∞
6 : -∞〜+∞
7 : 1〜31
8 : 0〜+∞
9 : 1〜7
a : 0〜23
getMonthlyStr(モード)
getMonthlyNum(モード)
モードを元に月の文字列を返す。
エラーの場合、""(空文字列)を返す
モード
10 : Oct
11 : Nov
12 : Dec
1 : Jan
2 : Feb
3 : Mar
4 : Apr
5 : May
6 : Jun
7 : Jul
8 : Aug
9 : Sep
getWeeklyStr(モード)
getWeeklyNum(文字列)
モードを元に週の文字列を返す。
エラーの場合、""(空文字列)を返す
モード
1 : Sun
2 : Mon
3 : Tue
4 : Wed
5 : Thu
6 : Fri
7 : Sat
getWeeklyStr2(モード)
getWeeklyNum(文字列)
モードを元に週の文字列を返す。
エラーの場合、""(空文字列)を返す
モード
1 : Sunday
2 : MonDay
3 : TuesDay
4 : WednesDay
5 : ThursDay
6 : Friday
7 : Saturday
enRFC1123Date("年","月","日","時","分","秒","GMTの差")
RFC1123 形式の日付の文字列を作ります。
「GMTの差」とは、GMT との時差をセットしてください。
日本の場合は「-9」をセットしてください。
deRFC1123Date(inMyStr)
RFC1123 形式の日付から「YYYY/MM/DD hh:mm:ss」の文字列を作ります。
時刻は、GMT です。(日本標準時には戻しません)
NetGetPostData(文字列)
引数を「name=value&name=value....」だと想定して「name=value」の組の配列を返す
ver2.0.0.4 時点での仕様は「name」には「&」は入らないし「=」も混ざらない
「value」には「=」は混ざるが「&」は混ざらない。
→単純に「&」で split しているだけなので「name」に「&」が混ざる場合は、考慮していない
NetGetHTTPResponse(文字列)
引数を HTTP レスポンスである(または一部)と解釈して、HTTP レスポンスとして完成されていたら、HTTP レスポンス・メッセージとして Chunk デコードを行い返す。
まだ HTTP レスポンス・メッセージとして完成していない(Content-Length の長さに満たない場合と、LfLfがない場合、Chunk の途中の場合、まだ HTTP/100 Continue の状態の時)時は空文字列を返す。 また、そもそも Content-Length もない場合(Chunk 状態は除く)、空文字を返す
入力データは、内部UNICODE な VB で用いる一般的な文字列
NetGetHTTPResponseBin(文字列)
NetGetHTTPResponse(文字列) の実処理
内部的には、データをバイナリ(SJIS,JIS,EUC,UTF8 共に ASCIIコードは一緒だからね)で扱っている
NetGetHTTPResponseStatusCode(文字列)
引数を HTTP レスポンス・データであると解釈して、HTTP ステータス・コード(Variant 型)を返す。
一応、先頭の空行は無視して、最初の空行でない行の半角スペースで分割された二つめの部分を返すだけ(つまり、場合によっては数字とは限らない)。
上記のような事ができない場合は、空文字列を返す。
入力データは、内部UNICODE な VB で用いる一般的な文字列
改行コードは、Lf。ただし CrLf の Cr を無視するようにしている
NetGetAllBody(文字列)
Lf+Lf または Cr+Lf+Cr+Lf を区切り文字として、ボディ部を抜き出す
区切り文字が両方(LfLf と CrLfCrLf)あった場合は、最初に見つかった方を採用
区切り文字がなければ、そのまま返す
ただし、与えられたデータの引数の先頭の Cr と Lf は削除した上で評価する
入力データは、内部UNICODE な VB で用いる一般的な文字列
NetGetAllBodyBin(文字列)
NetGetAllBody(文字列) の実処理
内部的には、データをバイナリ(SJIS,JIS,EUC,UTF8 共に ASCIIコード[CRとLF]は一緒だからね)で扱っている
NetGetAllHead(文字列)
Lf+Lf または Cr+Lf+Cr+Lf を区切り文字として、ヘッダ部を抜き出す
区切り文字が両方(LfLf と CrLfCrLf)あった場合は、最初に見つかった方を採用
区切り文字がなければ、そのまま返す
ただし、与えられたデータの引数の先頭の Cr と Lf は削除した上で評価する
入力データは、内部UNICODE な VB で用いる一般的な文字列
NetGetAllHeadBin(文字列)
NetGetAllHead(文字列) の実処理
内部的には、データをバイナリ(SJIS,JIS,EUC,UTF8 共に ASCIIコード[CRとLF]は一緒だからね)で扱っている
NetGetHead(文字列,ヘッダ名)
NetGetAllHead() でヘッダ部を抜き出し、NetGetHeadDic() 関数でディクショナリ化する。
その中でヘッダ名の値を取り出す。
ヘッダ名は各行の最初から始まる文字列として、名前と値は「:」で区切られている。
行の最初が「 (半角スペース)」か「タブ」の場合は、継続行として評価する。
(継続行間の値の間には、「 (半角スペース)」を入れてある)
改行コードとしては、Lf または Cr+Lf としている。
ヘッダ名の大文字/小文字は区別していない。
返り値 = NetGetCalcContentLength(文字列)
「文字列」を HTTP メッセージだと解釈して、Content-Length の再計算を行って、正しい HTTP メッセージを返します。
さらに「Transfer-Encoding」ヘッダを削除する
入力データは、内部UNICODE な VB で用いる一般的な文字列
返り値 = NetGetCalcContentLengthBin(文字列)
「文字列」を HTTP メッセージだと解釈して、Content-Length の再計算を行って、正しい HTTP メッセージを返します。
内部的には、データをバイナリ(SJIS,JIS,EUC,UTF8 共に ASCIIコード[CRとLF]は一緒だからね)で扱っている
さらに「Transfer-Encoding」ヘッダを削除する
NetGetHeadDic(ByRef ディクショナリ・オブジェクト,文字列)
VisualBASIC 用,VBScript などでは利用できないのではないかな。
文字列を Lf で分解して(Cr は無視)、「名前:値」で区切られたデータとして、ディクショナリ・オブジェクトに返す
先頭が空行、またはタブの場合は、直前のディクショナリに追加する(HTTP や SMTP のヘッダの仕様にあわせた)
先頭が半角スペース、タブの場合は継続行として評価する
ヘッダ名に大文字/小文字の区別はしない
ヘッダ名の前後の半角スペースは削られる(前に半角スペースのあるヘッダ名は有り得ないけど)
同名のヘッダがある場合は、最後の行がディクショナリに記録される
返り値はない
NetGetMailAddress(文字列)
指定した文字列を「名前<メールアドレス>」として、メールアドレスの部分を返す。
上記のような形式でない場合は、与えられた文字列をそのまま戻す。
「メールアドレス (名前)」または「(名前) メールアドレス」の場合も同様に抜き出します
配列 = TrimLf_CRLF(対象文字列)
対象文字列の先頭が CrLf,Cr なら削る。また、最後尾が Cr,CrLf なら削る
先頭/最後尾ともに一つしか削りません
配列 = NetGetMIMEHako(対象文字列, デリミタ)
「対象文字列」を「CrLf デリミタ CrLf」で分解した配列を返します。
(ver2.0.0.7)「対象文字列」を「デリミタ」で分解した配列を返し、配列の先頭/最後尾の Cr,CrLfを削るようにした。
つまり、複数データを扱っている MIME に使えると思う
配列 = NetGetMIMERealBoundary(対象文字列, デリミタ)
「対象文字列」を MIME エンコードとして考えて、「デリミタ」のある行が本当に「デリミタ」だけなのかどうかのチェックする。デリミタだけでなければ、その「行」(デリミタが含まれていた行)を返す。
というのは「Content-Type」で取得した boundary 値に「-(ハイフン)」が二つ余計についているらしいから、こういうことにしている
Encodeメモ
でもそうなっているジャン
配列 = NetGetMIMEBoundary(対象文字列)
「対象文字列」をヘッダ情報だと想定し、「Content-Type」に「multipart」が含まれていたら、その boundary 値を返す。
含まれていなければ、空文字列を返す
ReplaceSubject1(文字列)
文字列がたとえば「re:re:subject」なら「re^2: subject」とします。
電子メール用です。
ReplaceSubject2(文字列)
文字列がたとえば「re:re:subject」なら「re[2]: subject」とします。
電子メール用です。
ReplaceSubjectMain(文字列,ヘッダ,フッタ)
「ReplaceSubjectMain("re:re:subject","<",">")」なら「re<2>: subject」となる。
電子メール用です。
ReplaceSubject1(),ReplaceSubject2() から呼び出されている関数でもある。
TRimText(文字列,デリミタ)
「文字列」を「デリミタ」で分割して、分割された各文字列に TRim() をかける。
「デリミタ」=「vbCrLf」とすれば、各行の先頭、後尾の空白削除という事になる。
ResAddText(文字列,デリミタ,レス文字)
「文字列」を「デリミタ」で分割して、分割された各文字列の先頭に「レス文字」を追加する。
「デリミタ」を「vbCrLf」として、「レス文字列」を「>」とすれば、「文字列」がメールの文章が思い浮かぶでしょう。
PGPCreateSign(署名された文字列,署名文字列)
PGP によって署名されたようにデータを整形する。
つまり、「署名された文字列」の行(CRLFによって分割された行配列)の先頭が「-」だった場合「-(半角スペース)」に置換処理をおこない。
「-----BEGIN PGP MESSAGE-----」
空行
エスケープされた「署名された文字列」
署名文字列
という文字列を返す。
PGPEscape(署名された文字列)
PGPCreateSign()の「-」へのエスケープ処理だけ
LeftEx(文字列,文字数)
文字数分だけ文字列の左から切り取る
文字数分も文字列の文字数がなければ、文字列をそのまま返す
RightEx(文字列,文字数)
文字数分だけ文字列の右から切り取る
文字数分も文字列の文字数がなければ、文字列をそのまま返す
MidEx(文字列,文字位置)
文字列の文字位置から右の部分だけ切り取る
文字位置分も文字列の文字数がなければ、空文字列をそのまま返す
reg_unicode(文字列)
SJIS/ASCII に対して、UNICODE の冗長化された表現を排除する
といっても内実は StrConv(,vbFromUnicode)→StrConv(,vbUnicde) しているだけ
しかし、これで「u+005c」と「u+00a5」が同化するはず
Add_Insert_String(第一引数文字列,第二引数文字列)
第一引数の一文字ごとに、第二引数文字列を挿入する
文字列として与えられた第一引数にこの関数を使って処理してから Split すると文字の配列が得られる....というのが目的
GetKanjiList(第一引数)
SJIS コード一覧を返す。というか、VB なので内部 UNICODE だけどね...
第一引数「0」: 漢字以外のカナや記号。元データは、
こちら
第一引数「1」: 第一水準。元データは、
こちら
第一引数「2」: 第二水準。元データは、
こちら
返り値 = AddRes(文字列,レス文字列)
「文字列」の各行の行頭に「レス文字列」を付与する
返り値 = DelSpaceGyo(文字列)
「文字列」の各行の行頭、行末の半角スペースを削除する
返り値 = MinIsDoreEx(値1,値2,モード)
小さい方を返すが、数値で比較できる場合で、「モード」が空文字でない場合は、0以上で小さい方を返す。両方とも 0 以下なら、何か0以下の値が返る
返り値 = MinIsDore(値1,値2)
小さい方を返す
返り値 = MaxIsDore(値1,値2)
大きい方を返す
返り値 = ListSort(文字列)
「文字列」を CSV 形式と仮定して、ソートして CSV 形式で返す
って標準の ListBox を使っているだけです
ListBox の制限から、一要素当たり 255文字? 程度です。
返り値 = ShellSort(文字列)
「文字列」を CSV 形式と仮定して、ソートして CSV 形式で返す
デバグは十分ではないです
シェルソートのアルゴリズムは「近代科学社 [改定新版] C言語 実用数値処理プログラム集」 P69 からそのまま借用しています
返り値 = BubbleSort(文字列)
単純ソート(バブルソート)を行う
「文字列」を CSV 形式と仮定して、ソートして CSV 形式で返す
返り値 = CreateFolder(パス)
パスをディレクトリ・パスとして解釈して、ディレクトリを再帰的に作成する。
パスには、絶対パスを指定すること
また、指定するパスは正規化されていること(入力パスの正規化処理は、いい加減にしかしていない)
戻り値:
0: エラー(ドライブがないとか...)
1: 作成した
2: 作成するもなにも...既存だよ
おさかなエンコードは、
Vector に登録されている MS-DOS のツール enFish.exe/deFish.exe
にインスパイヤ(笑)されて、Base64エンコードのエンコード文字をおさかな文字にしてみた。
Base64 でのヌルの埋め合わせを示す「=」は「魚」文字にした。
その実験場は、
ここ
返り値 = enFish(文字列)
おさかなエンコード(Base64)する{入力データを文字列と仮定}
sBase64.dll,ComBase64.dll
が必要
返り値 = enFishBin(文字列)
おさかなエンコード(Base64)する{入力データをバイナリ(UNICODE)と仮定}
sBase64.dll,ComBase64.dll
が必要
返り値 = deFish(文字列)
おさかなデコード(Base64)する{出力データを文字列と仮定}
sBase64.dll,ComBase64.dll
が必要
返り値 = deFishBin(文字列)
おさかなデコード(Base64)する{出力データをバイナリ(UNICODE)と仮定}
sBase64.dll,ComBase64.dll
が必要
返り値 = IPv6Str2Bin(文字列)
IPv6 アドレス形式の文字列を 16Byte のバイト列(VARIANT 型)として返す
返り値 = IPv6Bin2Str(バイト列)
16Byte(128Bit)バイト列(VARIANT型)を、IPv6 アドレス形式の文字列に変換して返す
動作環境
VisualBASIC6.0 の汎用的なランタイムが必要。
使用方法
まず、VisualBASIC6.0 のランタイムを
Vector
などからダウンロードしてインストールします。
(ランタイムが既にインストールされていれば必要ありません)
ダウンロードしたファイルを解凍しします。
(LHAは、吉崎栄泰氏が、著作権を所有)
解凍した出来たディレクトリの、"source\test_exe" 以下のファイルは、DLL をテストするためのツールです。
"source\main_dll\Moji_Chk.DLL" を任意のディレクトリにコピーしてください。
コマンドプロンプト で、Moji_Chk.DLL をコピーしたディレクトリで、"RegSvr32.exe Moji_Chk.DLL" を実行し、レジストリに登録します。
以上で、COM コンポーネントとしての、Moji_Chk.DLL は登録が完了です。
COM アクセスが可能なものなら、Moji_Chk.DLL の文字列処理を利用する事が可能です。
(Moji_Chk.DLL に実行権限のあるユーザならという条件がつきますが)
免責など
著作権は保持します。(とりあえず)
このソフトを使用したことによって生じた、
いかなる損害についても責任は持ちません。
ソースコードについても、各自の責任において改変する事については、自由おこなって頂いて結構です。
「参考になったよ」メールを投げてくれると嬉しいです。(*^_^*)
DownLoad
(moji_chk.lzh as 168,005byte) (
moji_chk.lzh.base64
)
ダイスウェア・パスフレーズ
ここ
JavaScript のパスワード・ジェネレータ
ここ
パスワード・メモ
ここ
mail to active@window.goukaku.com