2009年02月26日

ハッシュの要素数

なでしこのマニュアルではハッシュの要素数は「要素数」と言う関数で取れることになっているのですが、少なくても最新版の1.518では取得できないようです。

去年の夏ぐらいの2chのスレで同様の内容が記述されていましたが、どうも「ハッシュのハッシュキー列挙の要素数」なら取れるという不思議仕様になっているようです。

さらにおかしいことに、配列の要素数専用の「配列要素数」関数では、普通にハッシュの要素数が取得できてしまいます(^^;

実際に以下のようなサンプルコードを作って動かしてみたところ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
っしゅとはハッシュ
「【ハッシュ場合】」表示
Aはっしゅ要素数
ハッシュ要素数         :{A}表示
Bはっしゅハッシュキー列挙要素数
ハッシュハッシュキー列挙要素数:{B}表示
Cはっしゅ配列要素数
ハッシュ配列要素数       :{C}表示
「」表示
っしゅ「あああ」「あああ」
「【ハッシュに一つだけキーある場合】」表示
Aはっしゅ要素数
ハッシュ要素数         :{A}表示
Bはっしゅハッシュキー列挙要素数
ハッシュハッシュキー列挙要素数:{B}表示
Cはっしゅ配列要素数
ハッシュ配列要素数       :{C}表示
「」表示
っしゅ「いいい」「いいい」
「【ハッシュに二つキーある場合】」表示
Aはっしゅ要素数
ハッシュ要素数         :{A}表示
Bはっしゅハッシュキー列挙要素数
ハッシュハッシュキー列挙要素数:{B}表示
Cはっしゅ配列要素数
ハッシュ配列要素数       :{C}表示
↓のような結果となりました。う〜ん謎・・・
【空のハッシュの場合】
ハッシュの要素数         :0
ハッシュのハッシュキー列挙の要素数:0
ハッシュの配列要素数       :0

【ハッシュに一つだけキーがある場合】
ハッシュの要素数         :0
ハッシュのハッシュキー列挙の要素数:1
ハッシュの配列要素数       :1

【ハッシュに二つのキーがある場合】
ハッシュの要素数         :0
ハッシュのハッシュキー列挙の要素数:2
ハッシュの配列要素数       :2
Posted by Takuchan at 23:56 | コメント (0) | トラックバック(0)

2009年01月20日

GeSHiでなでしこマークアップ

世の中にはソースコードをHTMLとして掲載するときに見やすくするためのマークアップソフトがありますがその中にGeSHiというPHPで書かれたモノがあります。このGeSHiは対応している言語が多くて便利なのですが、さすがに日本語どローカルななでしこまでは対応していません。

ただ、GeSHiの定義ファイルの作成自体はそんなに難しくないので、試しになでしこのマークアップが出来るようにプラグイン(と呼ぶのかどうかは不明)を作成してみました。

Download - GeSHi_nadesico_markup.zip

なお、現状で不具合をいくつか把握していますし、完成させる気は無いので永久にβ版です。
(たとえば、EUC環境で「未満(CC A4 CB FE)」と言う文字があると、接続詞の「に(A4 CB)」と勘違いされて文字が壊れます(苦笑))

GeSHiがそもそも2Byte文字を考慮していませんし、少なくても自分はこれで満足していますので、このままにしておきますが、余力のある方はぜひ修正して公開して頂けますと助かります(^^;
(ライセンスはGPLv2です)

また、上記のダウンロードファイルの文字コードはEUCですので、環境によって文字コードを変更してください。

それから、関数の一覧は以前ダウンロードしていた1.381(ぐらい)のなでしこのソースファイルに含まれていた一覧を利用していますので、最近の命令はサポートされていません。

なお、このファイルはPukiWikiプラグインである↓での動作を前提に作成しています。

(と言うか、それ以外での動作確認は行っていませんので、ご了承下さい。)

続きを読む...

Posted by Takuchan at 00:38 | コメント (0) | トラックバック(0)

2008年12月29日

IEのProxy設定

1
2
3
4
5
6
7
「IEのProxyを設定します」と言う。
「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings」のレジストリ開く
それで「ProxyEnable」に「1」をレジストリ整数書く
それで「ProxyServer」に「proxy:8080」をレジストリ書く
それで「ProxyOverride」に「除外ドメイン1;除外ドメイン2
;<local>」をレジストリ書く
それのレジストリ閉じる
なお、5行目と6行目の間の改行と、その後の「;<local>」はローカルアドレスにProxyを用いない設定を有効にする際に必要です。

Posted by Takuchan at 02:37 | コメント (2) | トラックバック(0)

2008年12月28日

日時加算

なでしこは便利なんですが、どうも時間計算が余り得意ではない印象です。

特にUNIX時間のようなシリアル時間への変換にネイティブでは対応していないのが致命的で日付を跨ぐ時間の足し引きはかなり面倒くさいのが実情です。

(まぁ、頑張れば出来ないことはないですが)

また、日付加算や時間加算命令はあるのですが、時間加算命令は時間しか考慮してくれない困りもののため日付を跨ぐような加減算はそのままでは出来ません。

で、それを何とかしてみるために関数を一つ拵えてみました。

●日時加算(S_DATETIMEにP_DATETIMEを)
 S_DATEはS_DATETIMEを「yyyy/mm/dd」に日時形式変換
 S_TIMEはS_DATETIMEを「hh:nn:ss」に日時形式変換
 S_NUMはS_TIMEを「hhnnss」に日時形式変換を整数変換
 P_FLAGはP_DATETIMEをトリムから1文字左部分
 もし、P_FLAGが「+」またはP_FLAGが「-」ならば
  P_DATETIMEの1から1文字削除
 違えば
  P_FLAGは「+」
 P_ARRとは配列
 P_ARRはP_DATETIMEを「 」で区切る
 もし、P_ARR[0]で1から「:」を文字検索ならば、
  P_DATEは「0/0/0」
 違えば、
  P_DATEはP_ARRの0を配列切り取る
 P_TIMEはP_ARRの0を配列切り取る
 P_TARRとは配列
 P_TARRはP_TIMEを「:」で区切る
 R_CARRYは(P_TARR[0]/24)の整数部分
 もし、P_FLAGが「+」ならば、
  R_TIMEはS_TIMEにP_TIMEを時間加算
  R_NUMはR_TIMEを「hhnnss」に日時形式変換を整数変換
  もし、R_NUMからS_NUMを引くが0未満ならば、
   R_CARRYに1を直接足す
  R_DATEはS_DATEにP_DATEを日付加算
  R_DATEはR_DATEに「0/0/{R_CARRY}」を日付加算
 違えば、
  R_TIMEはS_TIMEに「-{P_TIME}」を時間加算
  R_NUMはR_TIMEを「hhnnss」に日時形式変換を整数変換
  もし、S_NUMからR_NUMを引くが0未満ならば、
   R_CARRYに1を直接足す
  R_DATEはS_DATEに「-{P_DATE}」を日付加算
  R_DATEはR_DATEに「-0/0/{R_CARRY}」を日付加算
 「{R_DATE} {R_TIME}」で戻る
使い方は以下のような感じです。
#結果は「2008/07/27 10:00:00」
「2008/12/28 12:00」に「-0/5/1 02:00」を日時加算を言う

#結果は「2008/12/29 01:00:00」
「2008/12/28 12:00」に「13:00」を日時加算を言う

#結果は「2008/12/26 12:00:00」
「2008/12/28 12:00」に「-48:00」を日時加算を言う
こんな感じで使えます。

なお、加算する値のプラス記号や年月日は省略可能です。

ただし、エラーチェックはほとんどやっていないので無茶な使い方をするとすぐにエラー出ます(^^;
なので、ユーザが入力した時間は必ず事前にチェックしてからこの関数に値を渡すようにしてください。

(と言うか、このぐらいの関数、ネイティブで取り込まれてくれると助かるなぁ・・・)

Posted by Takuchan at 05:04 | コメント (1) | トラックバック(0)

2006年09月25日

管理者権限取得命令?

去る8月17日になでしこの「version 1.4010」がリリースされ「管理者権限取得」と言う素敵そうな命令が追加されました。

名前から

「きっとこの関数はPowerUserとかだったら秘密のコードを入れることで管理者権限に一時的に慣れたりとかするすごい関数じゃないか?」

と期待していたんですが、早速最新版を落として「管理者権限取得」とだけ入れたソースを実行してもうんともすんとも言わず・・・

なんとなく気になってバージョン情報を見てみると「version 1.4009」とか書いて居たので
「ははーん、きっとファイルのアップロードミスだなぁ」と思い放置

そうしていると9月2日に「version 1.4011」がリリースされていたようで、今度こそと最新版をダウンロードしてまた試してもうんともすんとも言わず。

「???」と思い、命令検索から「管理者権限取得」を探しても見つからず「まだ実装されて無いの?」と

管理者権限取得は「あああ」
などとしてみると
「(関数)管理者権限取得には代入できません」
などと起こられる始末。

で、今度は

管理者権限取得をいう
としてみるとパワーユーザー環境で「0」が帰ってきたので、もしやと思い下のようなコードを組んで試してみました。

続きを読む...

Posted by Takuchan at 21:10 | コメント (0) | トラックバック(0)

2005年06月15日

クッキージャーの場所の取得

なでしこでクッキージャーの場所の取得するサンプル

レジクッキーは「HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders」のレジストリ開く
レジクッキーで「Cookies」をレジストリ読む
それを言う
レジクッキーをレジストリ閉じる

Posted by Takuchan at 00:37 | コメント (0) | トラックバック(0)

2005年05月06日

IEのホームページの変更

なでしこからIEのホームページを変更するサンプル
スタートページは「http://www.google.co.jp/」
「IEのホームページを{スタートページ}にします」と言う。
「HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main」のレジストリ開く
それで「Start Page」にスタートページをレジストリ書く
それのレジストリ閉じる
Posted by Takuchan at 07:25 | コメント (0) | トラックバック(0)

2005年05月04日

テンポラリフォルダ内の掃除

なでしこでテンポラリフォルダ内のファイルを削除するためのサンプルコード
「テンポラリフォルダの中身を削除します」と言う。
テンポラリフォルダのフォルダ列挙
反復
 「{テンポラリフォルダ}{それ}\ を削除します」と表示。
 エラー監視
   テンポラリフォルダ&それのフォルダ削除
  エラーならば
   「{テンポラリフォルダ}{それ}\ が削除できませんでした」と言う。
テンポラリフォルダのファイル列挙
反復
 「{テンポラリフォルダ}{それ} を削除します」と表示。
 エラー監視
   テンポラリフォルダ&それをファイル削除
  エラーならば
   「{テンポラリフォルダ}{それ} が削除できませんでした」と言う。
「テンポラリフォルダの中身を削除完了」と言う。
続きを読む...

Posted by Takuchan at 00:15 | コメント (0) | トラックバック(0)

2005年05月03日

DDWin in USBメモリ

DDWinな辞書をUSBメモリで持ち歩こうと思ったんですが、DDWinって辞書の場所が絶対パスじゃないとダメらしくて、毎度出先で「DDWIN.GRP」の中身を編集して設定する必要がありました。

でも、出先でちょっと使いたいだけなのにいちいちそんなことやってられなかったので、なんとか自動生成できないかと思って手段を探すことに。

とりあえず、やりたいことは

  • USBメモリが刺さるWindowsなら環境依存しないで実行可能
  • なるべく簡単に作れること
ということ。

とりあえず、環境依存なしと言うことならバッチファイルでやれば良いんですが、今更DOSの世界のお世話になるのはなんか芸がないので却下(ぉ

次にWSH系の利用ですが、こっちはコーディングに慣れてないので時間が掛かるのと、ちょっと面倒なコトさせるとウィルス対策ソフトに止められるおそれがあるので却下。

次にPerlはコーディングは慣れてますが自動実行ファイルが簡単に生成できないので却下

RubyはEXEの生成は楽ですが、コーディングが面倒なので却下。

こうやって考えていて「結局はBATファイルかなぁ」と思い始めていたときにふと思い出したのが「なでしこ」↓

まぁ、物は試しとダウンロード→解凍して使って見たところ

「うわっ、めちゃくちゃ使える・・・」

続きを読む...

Posted by Takuchan at 23:51 | コメント (0) | トラックバック(0)

その他のエントリ