なでしこライブラリ~
http://w.atwiki.jp/isoroku_be/
なでしこライブラリ~
ja
2023-11-03T09:38:18+09:00
1698971898
-
◆HTTPグループ
https://w.atwiki.jp/isoroku_be/pages/176.html
*情報
作者名:YouTubeダウンロードし放題
引用元:なでしこプログラム掲示板「HTTPグループ」>http://nade.jp-pro.net/bbs/bbs2/cbbs.cgi?mode=al2&namber=1219
更新:
2012/01/27
Cookie取得を更新
エラー防止の真偽グループを追加
*[[ダウンロード>http://www26.atwiki.jp/isoroku_be/?cmd=upload&act=open&page=%E2%97%86HTTP%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97&file=HTTP%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97.nako]]
*概要
五十六さんの作品「TCPクライアントでHTTPっぽいものセット」(以下TCPセット)
(http://nade.jp-pro.net/bbs/bbs2/cbbs.cgi?mode=al2&namber=911 感謝!!)
を元に機能拡張・改善したライブラリです。
目標としては、簡単に利用できて、且つ、カスタマイズ性に飛んだライブラリを目指して作成しました。
TCPセットとの大まかな違いとしては、
・TCPデータ取得→新HTTPデータ取得
・グループとして利用できる
・不同期ダウンロード
・Cookieの自動取得
・POST命令の削除(無念 後日また挑戦してみます)
などです。
*解説
「新HTTPデータ取得」は「HTTPデータ取得」と同じ使い方です。
HTTPグループの基本的な使い方は、URLや保存先、オプションなどを指定してから、「開始」です。
**注意
・HTTPグループに関わる全ての命令を本体の下に記述してください
本来ならば、本体のみを別ファイルにして「取り込む」命令を使用するのが望まれます
・HTTPグループにFILEを設定した時点でダウンロードとみなされます
逆にFILEを空にすればデータ取得になります
・「母艦の終了した時」のイベントのかわりに「母艦終了時」を使用してください
**追加した機能
***グループ化
動的作成による今までの命令も使えます
***ダウンロードの不同期化
「同期はオフ」とすることで不同期ダウンロードができます
しかし、タイマーで無理やり内蔵しているので多少バグがあります
動的にHTTPグループを作成し、同時ダウンロードを行う事ができます
***経過表示のイベント化
経過表示時の行動を何度も書き換えることができるようになりました
***Cookie自動取得機能(意外と便利)
Internet ExplorerのCookieを取得します
***自動ページ転送機能
Locationがあれば再取得するようになりました
***自動エンコード機能(初期状態ではオフ)
***推定残り時間
***レジューム(途中ダウンロード)の簡潔化
レジュームを指定しなくても、FILEが存在すればレジュームが使用できるようになりました
逆に強制的に使用しないようにするには「レジューム機能はオフ」とします
**削除した機能
***POST命令
サンプル使う人はGET命令より少ないのと
グループが混じると条件分岐が多くて負担が多いので
**特に意識しなくてよいこと
***SizeOver機能
動画などの大容量のファイルを「データ取得」するとメモリが足りなくなってしまいます
なので、ファイルが0.5MGバイト以上の場合は一時的に保存するようにしました
***チャンクによるバグの修正
チャンクは受信し終わってからまとめて処理するようにしました
***TCPクライアントと統合
「nakonet.nako」も取り込まなくて済みます
(TCPクライアントと併用しても問題ありません)
***タイマーとの統合
タイマーを内蔵しているので、不同期ダウンロードの際にタイマーを作成する必要がありません
***TCP自動切断機能(重要)
ライブラリ内部でHTTPグループを一括管理しているので、終了時にTCPを手動で切断する必要がなくなりました。
(nakonet.dllのバグでTCPを切断しないと終了できない問題を克服)
***メモリ節約のための変数宣言
変数を厳密に宣言することで余計なメモリを節約し、関数外の変数が影響することを防ぎます
***計算を最小限かつ高速化
*サンプル
本体の後ろに置いてください
**新HTTP関数
「http://www.google.co.jp/」の新HTTPデータ取得を言う
**一番簡単なグループ
HTTP1とはHTTPグループ
HTTP1=「http://www.youtube.com/」
HTTP1で開始
それを言う
**高度な静的グループ
経過詳細テキストとは文字列
平均速度とは数値
受信サイズとは数値
受信予定サイズとは数値
経過バーとはプログレスバー
経過詳細とはラベル
経過詳細の位置=経過バーの右側
中止ボタンとはボタン
HTTP2とはHTTPグループ
中止ボタンのクリックした時は~
HTTP2の有効切替#HTTP2の停止判定=1
HTTP2について
URL=「http://www.youtube.com/」
#FILE=「{デスクトップ}sample.html」
#HEAD取得判定=1
#レジューム機能=0
#自動エンコード機能=1
経過表示時は~
経過詳細テキスト=空
経過パーセント=HTTP2の経過パーセント
平均速度=(HTTP2の平均速度/1024/1024)を1で小数点切り上げ
瞬間速度=(HTTP2の瞬間速度/1024/1024)を1で小数点切り上げ
推定残り=HTTP2の推定残り
経過詳細テキストに「{経過パーセント}% 平均速度:{平均速度}MB/s 瞬間速度:{瞬間速度}MB/s 推定残り:{推定残り}秒」を配列追加
受信サイズ=(HTTP2の受信Size/1024/1024)を1で小数点切り上げ
受信予定サイズ=(HTTP2の受信予定Size/1024/1024)を1で小数点切り上げ
経過詳細テキストに「受信:{受信サイズ}/{受信予定サイズ}MB」を配列追加
もし、経過パーセント=100ならば
経過詳細テキスト=「ダウンロード完了」
経過詳細=経過詳細テキスト
経過バー=HTTP2の経過パーセント
レジューム機能=0
経過表示間隔=0.5
データとは文字列
データ=開始
データを言う
**IDを利用した動的グループの同時ダウンロード
URL一覧とは配列
URL一覧に「http://www.google.co.jp/」を配列追加
URL一覧に「http://www.yahoo.co.jp/」を配列追加
URL一覧に「http://ja.wikipedia.org/wiki/」を配列追加#「http://ja.wikipedia.org/wiki/メインページ」に転送
URL一覧に「http://www.youtube.com/」を配列追加
URL一覧に「http://www.apple.com/jp/」を配列追加
URL一覧に「http://twitter.com/」を配列追加
IDとは数値
ID一覧とは配列
URL一覧で反復
ID=ActiveHTTPG_ID;ID一覧にIDを配列追加
Panel[回数]を経過パネルとして作成
Panel[回数]→Y=(回数-1)*60
Panel[回数]→テキスト1=対象
HTTPG[ID]→URL=対象
HTTPG[ID]→同期=0
HTTPG[ID]→タグ=回数
HTTPG[ID]→経過表示時は~
経過率とは数値=自身→経過パーセント
受信S=(自身→受信Size/1024)を1で小数点切り上げ
平均速度とは数値=(自身→平均速度/1024/1024)を1で小数点切り上げ
瞬間速度とは数値=(自身→瞬間速度/1024/1024)を1で小数点切り上げ
推定残りとは数値=自身→推定残り
Panel[自身→タグ]→値=経過率
TEXTとは文字列
TEXT[0]=「{経過率}% {受信S}kb」
TEXT[1]=「平均:{平均速度}MB/s 瞬間:{瞬間速度}MB/s 残り時間:{推定残り}秒」
もし、経過率=100ならば
TEXT[1]=「ダウンロード完了」
Panel[自身→タグ]→テキスト2=TEXT
描画処理反映
ID一覧で反復;HTTPG[対象]→開始()
■経過パネル
・Y ←Y設定
・値 ←値設定
・テキスト1 ←テキスト1設定
・テキスト2 ←テキスト2設定
・値設定(S)~経過バーOBJ→値=S
・テキスト1設定(S)~ラベル1OBJ→テキスト=S
・テキスト2設定(S)~ラベル2OBJ→テキスト=S
・Y設定(S)~
経過バーOBJ→Y=S
それ=経過バーOBJ→右側;ラベル1OBJ→位置=それ
それ=経過バーOBJ→下側;ラベル2OBJ→位置=それ
・パネルOBJ ・経過バーOBJ ・ラベル1OBJ ・ラベル2OBJ
・作る~
経過バーOBJをプログレスバーとして作成
ラベル1OBJをラベルとして作成
ラベル2OBJをラベルとして作成
ラベル1OBJ→テキスト=空
それ=経過バーOBJ→右側;ラベル1OBJ→位置=それ
ラベル2OBJ→テキスト=空
それ=経過バーOBJ→下側;ラベル2OBJ→位置=それ
*本体
!変数宣言が必要
最大HTTP数とは数値=20
!HTTP_ID一覧とは配列
!__TCPIDとは数値=0
母艦終了時とは変数
母艦終了時は~何もしない
経過表示時イベントとは変数
経過表示時イベントは~
それ=自身→経過パーセント;母艦=それ&「%」
母艦の終了可能=0
母艦の閉じた時は~
母艦終了時
HTTP_ID一覧で反復
エラー無視#一応エラー回避
「{対象}→終了時処理」をナデシコする
母艦の終了可能=1;おわり
!初期UA=「HTTP」
!ERROR_TCP_403=「HTTP_403 "Forbidden" アクセスが認められていません。」
!ERROR_TCP_404=「HTTP_404 "NotFound" 見つかりません」
!ERROR_TIMEOUT=「HTTP_TIMEOUT タイムアウトしました」
!ERROR_STOP=「HTTP_STOP ユーザーによって停止されました」
■真偽
・値 ←値設定 →値取得 デフォルト
・{整数}F値
・値設定(V)~
もし、(V=0)||(V=1)ならばF値=V
違えばエラー発生
・値取得~_=F値
■HTTPグループ
# ↓読み書きOK
# 基本オプション 初期化されないので毎回書き換えるように
・URL{="http://www.google.co.jp/"} ←URL設定 →URL取得 デフォルト
・FILE ←FILE設定 →FILE取得
・{整数/*真偽値*/}HEAD取得判定
・{イベント}経過表示時
# 高度なオプション
・{イベント}終了時イベント
・{イベント}エラー時#~エラーメッセージと言う
・{ハッシュ}オプション# 送信ヘッダに追加 UAなど
・{ハッシュ}Cookie
・{真偽}有効{=1} ←有効設定 →有効取得
・{真偽}同期{=1}
・{真偽}Cookie自動取得{=1} # InternetExplorerのCookieを適用
・{真偽}レジューム機能{=1}
・{真偽}自動ページ転送{=1}
・{真偽}自動エンコード機能# UTF8を自動でエンコード
・{数値}経過表示間隔{=0.1}# 経過表示する間隔(0.1秒ごと)
・{数値}瞬間速度幅{=5}
・{数値}TimeOut秒数{=5}
・{数値}HTTPVer{=1.1}
・ポケット ・タグ# 一時データの格納に使える
# ↓読込のみOK
・FILEDATA
・HEAD
# 経過表示に使える変数
・{整数}通信中・{整数}受信回数
・{整数}受信予定Size・{整数}受信Size
・{整数}開始時間 ・{整数}経過時間
・{整数}経過パーセント
・{整数}推定残り# 秒
・{数値}平均速度・{数値}瞬間速度# b/s
・{整数}瞬間Size・{整数}前時間・{整数}瞬間時間
・{整数}TimeOut回数
#-----
・{ハッシュ}HEAD_HASH・{整数}StatusNum{=200}
・Pass ・送信HEAD・{整数}出力H
・{真偽}一回目判定{=1}
・{真偽}Download判定・{真偽}Chunk判定
・{真偽}Resume判定・{真偽}SizeOver判定
・{真偽}中断判定・{真偽}停止判定
・Host{="www.google.co.jp"}・{整数}Port{=80}
・{整数}ID
# フェイク
・{非公開}FURL
・URL取得~FURLで戻る
・{非公開}FFILE
・FILE取得~FFILEで戻る
・{非公開}F有効{=1}
・有効取得~F有効で戻る
・{非公開}Option
・{非公開}FERROR ←エラー設定
・エラー設定(S)~エラーメッセージ=S;エラー時
#----------------------------------------------------------------
・開始~
FILEDATA=空;HEAD=空;終了時処理#一応
Option=オプション
もし、Option@「User-Agent」=空ならば、Option@「User-Agent」=初期UA
もし、Option@「Host」=空ならば、Option@「Host」=Host
もし、Cookie自動取得=1ならば、Cookie=FURLのCookie取得
もし、Cookie≠空ならば、Option@「Cookie」=Cookieの改行を「;」に置換
もし、Download判定=1ならば
もし、(FFILEの存在=1)AND(レジューム機能=0)ならば
FFILEをファイル完全削除
出力H=FFILEを「書」でファイルストリーム開く
もし、FFILEの存在=1ならば、
Resume判定=1
受信Size=FFILEのファイルサイズ
Option@「Range」=「bytes={受信Size}-」
出力Hで受信Sizeにファイルストリーム位置設定
送信HEAD=Optionを逆HTTPヘッダハッシュ変換("GET",Pass,HTTPVer);接続
もし、同期=0ならば
TIMER_OBJ=VCL_CREATE(自身,名前,VCL_GUI_TIMER)
VCL_SET(TIMER_OBJ,VCL_PROP_VALUE,経過表示間隔*1000)
VCL_SET(TIMER_OBJ,VCL_PROP_ENABLED,1);戻る
オンの間
メインループ
もし、(通信中=0)AND(一回目判定=0)ならば抜ける
(経過表示間隔)秒待つ
メインループ後
もし、HEAD取得判定=1ならば、HEADで戻る
違えば、FILEDATAで戻る
・メインループ~
もし、停止判定=1ならば、終了時処理;FERROR=ERROR_STOP;戻る
経過表示時
もし、一回目判定=1ならば、
TimeOut回数に1を直接足す
もし、(経過表示間隔*TimeOut回数)>TimeOut秒数ならば
終了時処理;FERROR=ERROR_TIMEOUT;戻る
違えば、TimeOut回数=0
・メインループ後~
経過表示時
もし、Download判定=1ならば
出力Hで0にファイルストリーム位置設定
FILEDATA=出力Hで(0.5*1024*1024)をファイルストリーム読む
出力Hをファイルストリーム閉じる
#自動エンコード機能
もし、自動エンコード機能=1ならば
Typeとは文字列=HEAD_HASH@「Content-Type」
Typeを「^([^;]*);」で正規表現マッチ
もし、抽出文字列[0]=「text/html」ならば
Typeを「charset=([^\s]*)」で正規表現マッチ
もし、抽出文字列[0]=「utf-8」ならば
FILEDATA=FILEDATAを「UTF8」から「SJIS」へ文字コード変換
もし、Download判定=1ならば、FILEDATAをFFILEに保存
終了時イベント;終了時処理
・終了時処理~
通信中=0;切断
もし、TIMER_OBJ≠空ならば
VCL_SET(TIMER_OBJ,VCL_PROP_ENABLED,0);TIMER_OBJ=空
もし、SizeOver判定=1ならば
もし、出力Hのファイルストリームサイズ≠-1ならば
出力Hをファイルストリーム閉じる
FFILEをファイル完全削除
Download判定=0;FILE=空;
# 変数の初期化
一回目判定=1;TimeOut回数=0;SizeOver判定=0;停止判定=0;
受信回数=0;受信予定Size=0;受信Size=0;出力H=0;
経過パーセント=0;平均速度=0;瞬間速度=0;
・接続した時~
通信中=1;開始時間=システム時間;
送信HEADを送信
・受信した時~
受信回数に1を直接足す
受信DATAとは文字列=受信
もし、一回目判定=1ならば
一回目判定=0
HEAD=受信DATAから「{~}{~}」まで切り取る
もし、HEAD取得判定=1ならば、経過パーセント=100;通信中=0;切断;戻る
HEAD_HASH=HEADをHTTPヘッダハッシュ変換
StatusNum=HEAD_HASH@「HTTP.Response」#正しい使いかたではない
もし、StatusNum≠200ならば
StatusNumで条件分岐
403ならば、経過パーセント=100;通信中=0;切断;FERROR=ERROR_TCP_403;戻る
404ならば、経過パーセント=100;通信中=0;切断;FERROR=ERROR_TCP_404;戻る
301ならば、HEAD_HASH@「Location」にTCP転送;戻る
302ならば、HEAD_HASH@「Location」にTCP転送;戻る
303ならば、HEAD_HASH@「Location」にTCP転送;戻る
#レジュームで既にダウンロード完了しているとき/Rangeが不正な場合
416ならば、経過パーセント=100;通信中=0;切断;戻る
違えば、#StatusNumを言う
もし、HEAD_HASH@「Content-Length」≠空ならば
受信予定Size=HEAD_HASH@「Content-Length」
もし、Resume判定=1ならば
受信予定Sizeに受信Sizeを直接足す
もし、(Download判定=0)AND(受信予定Size>(0.5*1024*1024))ならば
FILE=「download_{テンポラリフォルダ}{開始時間}.bak」
出力H=FFILEを「書」でファイルストリーム開く
SizeOver判定=1;Download判定=1;
もし、HEAD_HASH@「Transfer-Encoding」=「chunked」ならば、Chunk判定=1
前時間=開始時間
瞬間Sizeに(受信DATAのバイト数)を直接足す
受信Sizeに(受信DATAのバイト数)を直接足す
経過時間=システム時間-開始時間
経過パーセント=INT(受信Size/受信予定Size*100)
平均速度=受信Size/経過時間*1000
もし、受信回数%瞬間速度幅=0ならば
瞬間時間=システム時間-前時間;前時間=システム時間
瞬間速度=瞬間Size/瞬間時間*1000;瞬間Size=0;
推定残り=INT((受信予定Size-受信Size)/平均速度)
もし、Chunk判定=0ならば
もし、Download判定=0ならば、FILEDATAに受信DATAを追加
違えば、出力Hで受信DATAをファイルストリーム書く
もし、経過パーセント>=100ならば
経過パーセント=100;通信中=0;切断;戻る;
違えば
FILEDATAに受信DATAを追加
FILEDATAの(FILEDATAのバイト数-4)から1バイト抜き出す
もし、それ=「0」ならば
FILEDATA=FILEDATAからChunkData抽出
もし、Download判定=1ならば
出力HでFILEDATAをファイルストリーム書く
FILEDATA=空
経過パーセント=100;通信中=0;切断;戻る
・URL設定(S)~
FURL=S
Host=FURLからURLドメイン名抽出
もし、(FURLを「:(\d+)\/」で正規表現マッチ)≠空ならば、Port=抽出文字列[0]
FURLを「http:\/\/[^\/]+(\/.*)」で正規表現マッチ
Pass=抽出文字列[0]
・FILE設定(S)~
FFILE=S
もし、FFILE≠空ならば、Download判定=1
違えば、Download判定=0
・有効設定(S)~
F有効=S
もし、通信中=1ならば
もし、F有効=1ならば
もし、中断判定=1ならば
一回目判定=1;Resume判定=1;中断判定=0;
Option@「Range」=「bytes={受信Size}-」
送信HEAD=Optionを逆HTTPヘッダハッシュ変換("GET",Pass,HTTPVer);接続
違えば、切断;中断判定=1
・有効切替~
もし、F有効=0ならば、有効=1
違えば、有効=0
・停止~停止判定=1
・TCP転送(Sに)~
切断
もし、自動ページ転送=0ならば、経過パーセント=100;通信中=0;戻る
URL=S;一回目判定=1;
もし、Option@「User-Agent」=空ならば、Option@「User-Agent」=初期UA
もし、Option@「Host」=空ならば、Option@「Host」=Host
もし、Cookie自動取得=1ならば、Cookie=FURLのCookie取得
もし、Cookie≠空ならば、Option@「Cookie」=Cookieの改行を「;」に置換
送信HEAD=Optionを逆HTTPヘッダハッシュ変換("GET",Pass,HTTPVer);接続
・{非公開}TIMER_OBJ
・時満ちた時~
メインループ
もし、(通信中=0)AND(一回目判定=0)ならば
VCL_SET(TIMER_OBJ,VCL_PROP_ENABLED,0)
メインループ後
・受信データ・エラーメッセージ・{非公開}TCPID{=0}・{非公開}オブジェクト
・接続~TCP_COMMAND(TCPID,"connect","{Host}:{Port}")
・切断~TCP_COMMAND(TCPID,"disconnect",0)
・送信(Sを)~TCP_COMMAND(TCPID, "send", S)
・受信~TCP_COMMAND(TCPID,"recv",0)で戻る
・作る~
TCPID=__TCPID;__TCPIDに1を直接足す;
TCP_COMMAND(TCPID,"create",自身→名前)
HTTP_ID一覧に名前を配列追加
■TAG #タイマーに追加
・タグ・ポケット
●逆HTTPヘッダハッシュ変換(SをMethod,Pass,HTTP_Ver)
HEAD_TOPとは文字列=「{Method} {Pass} HTTP/{HTTP_Ver}」
HEAD_BTTOMとは配列
もし、S@「UA」≠空ならば、S@「UA」=S@「User-Agent」
Sの「UA」をハッシュキー削除
Sのハッシュキー列挙で反復
もし、S@対象≠空ならば、HEAD_BTTOMに「{対象}: {S@対象}」を配列追加
「{HEAD_TOP}{~}{HEAD_BTTOM}{~}{~}」で戻る
●ChunkData抽出(Sの|Sから)
結果とは文字列;DATAとは文字列;ChunkSizeとは数値
オンの間
ChunkSize=INT(「${Sから改行まで切り取る}」)
もし、(ChunkSize=「0」)OR(ChunkSize=空)ならば抜ける
DATA=Sの1から(ChunkSize)バイト抜き出す
結果にDATAを追加
Sの1から(ChunkSize+2)バイト削除
もし、DATA=空ならば抜ける
結果で戻る
●Cookie取得(URLから|URLの|URLを)
結果とはハッシュ;Hとは数値;
DATAとは文字列;DATA配列とは配列;
URLを「http://(?:www\.)*([^\/]+\/)」で正規表現マッチ
Domainとは文字列=抽出文字列[0]
「{テンポラリフォルダ}\Cookies\*.txt」の全ファイル列挙で反復
H=対象を「読」でファイルストリーム開く
DATA=Hで(対象のファイルサイズ)をファイルストリーム読む
Hをファイルストリーム閉じる
オンの間
DATAで「*」まで切り取る
エラー監視#壊れている可能性があるので
DATA配列=それの配列上下空行削除
エラーならば続ける
もし、DATA配列=空ならば抜ける
もし、DATA配列[2]=Domainならば
結果@DATA配列[0]=DATA配列[1]
#結果=結果の改行を「;」に置換
結果で戻る
HTTPGとは変数;TIMERとは変数;
新HTTPオプションとはハッシュ;HTTPG一覧とはハッシュ;
●HTTPG準備(S)
(S)回
HTTPG[回数]をHTTPグループとして作成
HTTPG[回数]→ID=回数
HTTPG一覧@回数=0
●新HTTPデータ取得(URLから|URLの|URLを)
IDとは数値=ActiveHTTPG_ID
HTTPG[ID]→URL=URL
HTTPG[ID]→経過表示時は~経過表示時イベント
HTTPG[ID]→オプション=新HTTPオプション
HTTPG[ID]→FILE=空;HTTPG[ID]→HEAD取得判定=0;
HTTPG[ID]→開始
HTTPG一覧@ID=0
HTTPG[ID]→FILEDATAで戻る
●新HTTPヘッダ取得(URLから|URLの|URLを)
IDとは数値=ActiveHTTPG_ID
HTTPG[ID]→URL=URL
HTTPG[ID]→経過表示時は~経過表示時イベント
HTTPG[ID]→オプション=新HTTPオプション
HTTPG[ID]→FILE=空;HTTPG[ID]→HEAD取得判定=1;
HTTPG[ID]→開始
HTTPG一覧@ID=0
HTTPG[ID]→HEADで戻る
●新HTTPダウンロード(URLをFILEへ|URLからFILEに)
IDとは数値=ActiveHTTPG_ID
HTTPG[ID]→URL=URL
HTTPG[ID]→経過表示時は~経過表示時イベント
HTTPG[ID]→オプション=新HTTPオプション
HTTPG[ID]→FILE=FILE;HTTPG[ID]→HEAD取得判定=0;
HTTPG[ID]→開始
HTTPG一覧@ID=0
HTTPG[ID]→HEADで戻る
●ActiveHTTPG_ID
(最大HTTP数)回
もし、HTTPG一覧@回数=0ならば
HTTPG一覧@回数=1;回数で戻る
HTTPG準備(20)#最大20個のHTTPグループが利用できます
!変数宣言が不要
----
総合:&counter()
今日:&counter(today)人
昨日:&counter(yesterday)人
#comment()
2023-11-03T09:38:18+09:00
1698971898
-
●エディタ文字数制限
https://w.atwiki.jp/isoroku_be/pages/161.html
*情報
作者名:粗茶くん
引用元:[[粗茶がなでしこ本を書くぞ!「GUI/メッセージ送信」>http://www29.atwiki.jp/nadebook/pages/93.html]]
勝手に改変
*概要
エディタの文字数を制限します。
*解説
***引数
OBJ:エディタ
A:制限文字数
*サンプルプログラム
エディタAとはエディタ。
エディタAを10にエディタ文字数制限。//10文字
*//本体
#-----------------------------------------------------------------------
!EM_LIMITTEXT=$C5。
●エディタ文字数制限({グループ}OBJをAで|OBJをAに)
OBJ→メッセージ送信(EM_LIMITTEXT,A,0)。
#-----------------------------------------------------------------------
[[文字数>https://tango.nante-yomu.com/]]
----
#comment()
----
2023-02-22T09:23:46+09:00
1677025426
-
●解像度変更
https://w.atwiki.jp/isoroku_be/pages/150.html
*情報
作者名:はっぱ
引用元:[[なでしこプログラム掲示板「はっぱのサンプル集57」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=734&rev=&no=0]]
リンク:[[●XVGA解像度変更]]
*概要
解像度を変更します。
*解説
***引数
S:ディスプレイセッティング列挙の要素番号で解像度を指定(0起点)
*サンプルプログラム
Aコンボとはコンボ。そのW=300。
そのアイテム=ディスプレイセッティング列挙。
その変更した時は~(Aコンボの値)で解像度変更。
*//本体
●EnumDisplaySettings(lpszDeviceName,iModeNum,lpDevMode)=DLL("user32.dll","DWORD EnumDisplaySettingsA(LPCTSTR lpszDeviceName,DWORD iModeNum,LPDEVMODE lpDevMode)")
●ChangeDisplaySettings(lpDevMode,dwflags)=DLL("user32.dll","LONG ChangeDisplaySettingsA(LPCTSTR lpDevMode,DWORD dwflags)")
●ディスプレイセッティング列挙
セッティングに148を確保
セッティングリストは空
1のループ
もしEnumDisplaySettings(『』,回数-1,POINTER(セッティング))=0ならば、抜ける
ビット数はセッティングの105を『INT』でバイナリ取得
横解像度はセッティングの109を『INT』でバイナリ取得
縦解像度はセッティングの113を『INT』でバイナリ取得
ディスプレイフラグはセッティングの117を『INT』でバイナリ取得
もしディスプレイフラグが0ならば、ディスプレイフラグは『カラー』
もしディスプレイフラグが1ならば、ディスプレイフラグは『白黒』
もしディスプレイフラグが2ならば、ディスプレイフラグは『カラー:インタレース』
もしディスプレイフラグが3ならば、ディスプレイフラグは『白黒:インタレース』
画面周波数はセッティングの121を『INT』でバイナリ取得
セッティングリストに(横解像度&『×』&縦解像度&『/』&ビット数&『bits/』&画面周波数&『Hz/』&ディスプレイフラグ)を配列追加
セッティングリストで戻る
!ビット数変更=$40000
!横変更=$80000
!縦変更=$100000
!周波数変更=$400000
●解像度変更(Sで)
セッティングに148を確保
新規セッティング番号は空
新規セッティング番号=S
もし新規セッティング番号が空でなければ
もしEnumDisplaySettings(『』,新規セッティング番号,POINTER(セッティング))=0でなければ
セッティングの41に(横変更+縦変更)を『INT』でバイナリ設定
もしChangeDisplaySettings(POINTER(セッティング),0)が0ならば、戻る
『エラー』と言う
[[dpi解像度>https://www.dpi-size.com/]]
----
#comment()
----
2021-12-24T16:21:59+09:00
1640330519
-
●進数変換
https://w.atwiki.jp/isoroku_be/pages/15.html
*情報
作者名:五十六
引用元:[[なでしこプログラム掲示板「進数変換セット」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=907&rev=&no=0]]
*概要
2進数から36進数までを相互変換します。
[[進数>https://www.10shinsu.com/]]
*解説
***引数
S:数値
A:Sの元の進数(2~36)
B:目的の進数(2~36)
***返り値
B進数に変換された文字列
*サンプルプログラム
#例:「123456789」を10進数から2進数に変えたい!
「123456789」を10から2に進数変換。それを言う。//111010110111100110100010101
*//本体
//----------------------------------------------------------------------------
!進数英語リスト=「ABCDEFGHIJKLMNOPQRSTUVWXYZ」を文字列分解。
!進数数値リスト=「10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35」を「,」で区切る。
●十進数(SをVで)
合計値とは数値。S=Sを文字列分解して配列逆順。
進数英語リストで反復、S=Sの対象を進数数値リスト[回数-1]に置換。
Sで反復、合計値=合計値+(対象×(V^(回数-1)))。
合計値で戻る。
●進数(SをV|SのV|SでV)
結果配列とは配列。
1の間
もし、S<Vならば
進数数値リストで反復、S=Sの対象を進数英語リスト[回数-1]に単置換。
結果配列にSを配列追加。抜ける。
C=S%V。進数数値リストで反復、C=Cの対象を進数英語リスト[回数-1]に単置換。
結果配列にCを配列追加。S=(S/V)の整数部分。
結果配列を配列逆順して空で配列結合して戻る。
●進数変換(SをAからBに)
S=SをAで十進数。Sの(B)進数で戻る。
//----------------------------------------------------------------------------
----
#comment()
----
2021-02-08T15:23:32+09:00
1612765412
-
■定型
https://w.atwiki.jp/isoroku_be/pages/31.html
*ステータスバー表示
作者名:T
引用元:無し(自作)
*概要
ステータスバーに一時的に文字を表示するモノです。変数を指定して命令を出すだけなのでとても簡単です
*解説
STをステータスバーとし、表示形式の変数で分岐します。
●の中身は、文字を表示→待つ→文字を空白に(消す)
*本体
●ステタス
もし、表示形式が0ならば、
STのテキストは「」。
もし、表示形式が1ならば、
STのテキストは「AAA」。1秒待つ。STのテキストは「」。
もし、表示形式が2ならば、
STのテキストは「BBB」。1秒待つ。STのテキストは「」。
もし、表示形式が3ならば、
STのテキストは「CCC」。1秒待つ。STのテキストは「」。
もし、表示形式が4ならば、
STのテキストは「DDD」。1秒待つ。STのテキストは「」。
*サンプルプログラム
STとはステータスバー。
そのレイアウトは下。
表示形式=0。ステタス。
----
#comment()
----
2017-08-21T10:57:16+09:00
1503280636
-
●文字列カウント
https://w.atwiki.jp/isoroku_be/pages/193.html
*文字列カウント
作者名:曜日
*概要
文字列内にある特定の単語、文章の個数をカウントする。
検索範囲指定可能。
総文字数のカウント命令はありますが、文章内に文字列がいくつあるかカウントする命令は無かったと思うので
あればあったで便利かなと。
正規表現単置換を使ってカウントしているので
「きりん|キリン」等の様に指定すればひらがなカタカナ併せてのカウントも可能です。
(参考: 正規表現について - なでしこマニュアル - https://nadesi.com/doc/reference/function/2-1-regexp.htm)
*解説
***引数
全て文字列
TXT・・・検索を行なう元の文章
A・・・省略可 TXT内で範囲指定を行う場合に使用
B・・・省略可 TXT内で範囲指定を行う場合に使用
C・・・個数をカウントしたい単語(正規表現記述)
***返り値
半角数値
*//サンプルプログラム
A=『 25人の安否がわかっていない福岡県朝倉市では、9日も自衛隊や警察、
消防団などが約2千人態勢で捜索や救助を続けた。午前中、雨が一時強まり、孤立状態の住民の安否を
空から確認する予定だったヘリコプターの飛行が中止になった。
市東部の山間部にある同市杷木(はき)星丸。手作業で流木や土砂をかき出す捜索活動の様子を、
降りしきる雨の中、傘を差しながら、朝から見守る男性がいた。同市杷木久喜宮(くぐみや)の野上邦幸さん(36)。
母親の本河(ほんかわ)くに子さん(59)が一人暮らしをしていた戸建ての市営住宅が、本来あるはずの場所に、ない。
「水と土砂だけだったらこれほどひどくなかったと思う。流木が家を跡形もなく、壊したんだと思う」』
//(引用元:http://www.asahi.com/articles/ASK7964FVK79TIPE031.html)
c1=(Aで『の』を文字列カウント)
c2=(Aで『福岡県』から『捜索活動の様子』までの『の』を文字列カウント)
c3=(Aで『福岡県』から『捜索活動の様子』までの『[あ-ん]』を文字列カウント)
「『の』の数・・・{c1}
『福岡県』~『捜索活動の様子』の間に使われた『の』の数・・・{c2}
『福岡県』から文末までの間に使われた『ひらがな』の数・・・{c3}」を表示
*//本体
●文字列カウント(TXTで,{=?}Aから,{=?}Bまでの,Cを,)
outとは数値
out=0
もしA!=『』ならば
TXTからAまで切り取る
TXT=A&TXT
もしB!=『』ならば
TXT=(TXTからBまで切り取る)&B
1の間
もし(TXTをCで正規表現マッチ)!=『』ならば
TXT=TXTのCを『』に正規表現単置換
out=out+1
違えば
outで戻る
----
例えばウェブスクレイピングツールを組んでいる時に
id等の目印の無い、538番目のリンクを要素クリックしたいとか言う状況に陥った場合、
ブラウザ部品の「a\537」をブラウザ要素クリック
等のように指定するしかないのですが
いちいちソース見ながら手探りで探すのはダルイので、この命令と組み合わせて、
txt=ブラウザ部品の『html\0』をブラウザHTML取得
stxt=『リンク名等目印に出来るテキスト(目当てのタグ、ないしはその直後にある文章等)』
count=txtでstxtまでの『<a .*?>』を文字列カウント
ブラウザ部品の「a\{count-1}」をブラウザ要素クリック
のような形にすると大規模なサイトでの移動処理を組むのが多少便利になります・・・。
----
#comment()
----
2017-08-06T00:58:02+09:00
1501948682
-
トップページ
https://w.atwiki.jp/isoroku_be/pages/11.html
#image(logo_nadesiko_title.gif,http://nadesi.com/,width=147,height=38,,blank)
-[[※ページの作り方]]
#search
#region(close,計算/比較)
-[[●進数変換]]
-[[●ハイパーかけ算]]
-[[●フィボナッチ数列]]
-[[●P/C通り計算]]
-[[●順列発生]]
-[[●解]]
-[[●内分]]
-[[●最大公約数]]
-[[●素数判定/出力]]
-[[●総和]]
-[[◆JIS丸め]]
-[[◆大きい方 小さい方]]
-[[●冒頭一致]]
-[[◆nakoGMP]]
-[[■優先度付きキュー]]
#endregion
#region(close,日付時間処理)
-[[●日]]
-[[●秒時整形]]
#endregion
#region(close,文字列/エンコード)
-[[●改行コード変更]]
-[[●BASE64エンコードの仕組み]]
-[[●URLエンコードの仕組み]]
-[[●文字コード範囲]]
-[[●正規表現行抽出/全抽出]]
-[[●ローマ字半角カナ変換/逆]]
-[[●逆ダンプ]]
-[[●パック/アンパック]]
-[[●テーブルタグ作成]]
-[[●文字XOR]]
-[[●漢字判定]]
-[[●交換]]
-[[●文字列カウント]]
#endregion
#region(close,配列/表列)
-[[●表キー合成]]
-[[●CSV取得改]]
-[[●昇降優先表ソート]]
-[[●コムソート]]
-[[●バブルソート]]
-[[●双方向バブルソート]]
-[[●おいこみソート]]
-[[●キー配列ソート]]
-[[●空行削除]]
#endregion
#region(close,サウンド/動画)
-[[■効果音]]
-[[●MML情報取得]]
-[[■MCIオブジェクト]]
#endregion
#region(close,ファイル)
-[[◆ファイル/URL相対パス]]
-[[●絶対パスファイル/フォルダ列挙]]
-[[●空フォルダ削除]]
-[[●ファイル属性詳細設定/取得]]
-[[◆重複せず保存]]
-[[■バイナリファイル]]
-[[●フォルダサイズ取得]]
-[[●ファイル分割]]
-[[◆コマンドラインテンプレート]]
-[[●ファイルフォルダ判定]]
-[[●一階層上]]
-[[●フォルダ名抽出]]
-[[●拡張子無ファイル名抽出]]
-[[◆画像ファイル判別 画像ファイル選択]]
-[[●右クリメニュー追加/削除]]
#endregion
#region(close,画像/描画/座標計算)
-[[◆d3Library]]
-[[●バーコード作成]]
-[[●角形]]
-[[◆連続曲線描画]]
-[[●混色]]
-[[●円グラフ描画]]
-[[●装飾表示]]
-[[●円弧]]
-[[●RGB分解]]
-[[●距離]]
-[[●色平均値取得]]
-[[●ランダム座標作成]]
-[[●画像サイズ取得]]
-[[●画像フィット]]
-[[●四半円]]
-[[●画像色表列取得]]
-[[■LOGO風タートルグラフィクス]]
-[[●立ち絵抽出]]
-[[◆LINE&SHAPE++]]
-[[●ATAN2]]
-[[●二点四角座標取得]]
-[[●机上母艦クライアント位置取得]]
-[[●机上クライアントX/Y取得]]
-[[◆画像ファイル判別 画像ファイル選択]]
-[[◆プライベートフォント]]
-[[●画像合成改]]
-[[■矩形]]
-[[★高速画像描画]]
#endregion
#region(close,GUI部品)
-[[■簡易ショートカットメニュー]]
-[[■リンクラベル]]
-[[■シークバー]]
-[[◆Tエディタ折り返し設定]]
-[[■スムーズプログレスバー]]
-[[■タブページ改]]
-[[◆スクロールパネル(マウスホイール同期)]]
-[[■フォーカス監視グループ]]
-[[◆部品の並べ替え]]
-[[■矩形]]
-[[★リファレンス・マニュアル(GUI編)]]
-[[●エディタ文字数制限]]
#endregion
#region(close,ダイアログ)
-[[■色選択フォーム]]
-[[●リッチファイル選択]]
-[[■発言ダイアログ]]
-[[★ダイアログエディタ]]
#endregion
#region(close,レジストリ/INI)
-[[●APIレジストリ操作]]
-[[◆設定グループ]]
-[[●関連付け/解除]]
#endregion
#region(close,ネットワーク/ブラウザ)
-[[◆HTTPグループ]]
-動画ダウンロード系
--[[●YouTubeダウンロード]]
--[[●ニコニコ動画ダウンロード]]
--[[●MEGAVIDEOダウンロード]]
--[[●AniTubeダウンロード]]
-[[●WinAPIダウンロード]]
-[[◆2ちゃんねるかきこみセット]]
-[[◆TCPクライアントでHTTPっぽいのセット]]
-[[●ヤフー英日翻訳]]
-[[●したらば書き込み]]
-[[◆ブラウザマクロ]]
-[[●IEホームページ取得/設定]]
-[[●Yahoo!サーチ]]
-[[●MIMETYPE取得]]
#endregion
#region(close,マウス・画面制御)
-[[●WINDOWS休止状態]]
-[[●XVGA解像度変更]]
-[[●解像度変更]]
-[[●マウスカーソル設定]]
-[[●タスクバー位置取得]]
-[[●マウス消去]]
-[[●マウス位置制限]]
-[[●母艦マウス移動]]
-[[●スクリーンセイバー解除]]
-[[◆タスクバーボタン非表示]]
-[[●ドラッグアンドドロップ]]
#endregion
#region(close,ウィンドウ制御)
-[[●窓ハンドル命令集]]
-[[●窓ハンドル有効/無効]]
-[[●窓ハンドル最前面固定/解除]]
-[[●窓ハンドル同位置サイズ設定]]
-[[●窓ハンドルバー有効/無効]]
-[[●窓ハンドル親設定]]
-[[●窓ハンドル終了ボタン有効/無効]]
-[[●窓ハンドル最大化/最小化ボタン無効]]
-[[●窓ハンドル終了]]
-[[●窓ハンドル移動禁止]]
-[[●窓ハンドルサイズ変更禁止]]
-[[●窓ハンドル視覚スタイル削除]]
-[[●窓位置右下移動]]
-[[●窓ハンドル透明化]]
-[[●窓ハンドルフルスクリーン]]
-[[●母艦フェードイン/アウト]]
-[[●API起動]]
-[[◆イベント:母艦の最大化した時]]
#endregion
#region(close,プリンタ)
-[[◆プリンタ設定]]
-[[●関連付け印刷]]
#endregion
#region(close,コンソール[cnako]用)
-[[●コンソールタイトル設定]]
#endregion
#region(close,その他)
-[[■関数ポインタ]]
-[[■関数ポインタ改]]
-[[★API利用支援]]
-[[★アイコンチューザー]]
-[[★ソース高速HTML化]]
-[[★vnakoグループ一覧]]
-[[●コマンドライン実行]]
-[[●実行ファイル作成]]
-[[◆多重起動防止]]
-[[★ソース最適化]]
-[[●COPYDATAタイトル検索送信]]
-[[◆プライベートフォント]]
-[[★リファレンス・マニュアル(GUI編)]]
-[[★なでしこの道具箱(リンク集)]]
-[[●右クリメニュー追加/削除]]
-[[◆タスクトレイポップアップメニュー]]
-[[★Wiki/Web用ソース最適化]]
#endregion
----
このwikiは開発に役立ちそうなやつを勝手に転載したりしてるwikiです。
なでしこの1200を超える命令と、40を超える部品に加えて、
なでしこユーザーが作ったライブラリやコンポーネントと合わせれば鬼に金棒ね!
●←関数的なモノ
■←部品的なモノ
◆←複数orその他的なモノ
★←開発支援プログラムっぽいモノor資料などへのリンク
-[[※ページの作り方]]
色んな問い合わせは[[ここ>http://www26.atwiki.jp/isoroku_be/contact]]まで
*掲示板
#comment()
*人気ページトップ20
#popular(20,ignore=トップページ,ignore=メニュー,ignore=●定型,ignore=■定型,total)
----
2017-07-10T16:00:55+09:00
1499670055
-
●正規表現行抽出/全抽出
https://w.atwiki.jp/isoroku_be/pages/44.html
*情報
作者名:はっぱ
引用元:[[なでしこプログラム掲示板「はっぱのサンプル集57」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=734&rev=&no=0]]
*概要
正規表現行抽出:対象文からパターンを含む"行"を抽出。
正規表現全抽出:対象文からパターンをすべて抽出。
正規表現全抽出2:対象文からパターンをすべて抽出。(マッチしたのが1個の場合も値を返す)
*解説
制約あり:
現状ではパターンの先頭・末尾に改行にヒットするような
選択肢([^ ]など)を置くとうまく動作しないので注意してください。
***引数
文字列
***返り値
正規表現行抽出:パターンを含む"行"(配列)
正規表現全抽出:パターン(配列)
*サンプルプログラム
データは『トイレがないよ。ドアがないよ。
ボタンがないよ。コートがないよ。
ベーコンがないよ。トマトがないよ。
ボールがないよ。バットがないよ。』
データから『[ァ-ン]ー[ァ-ン]』で正規表現行抽出して言う。
//ボタンがないよ。コートがないよ。
//ベーコンがないよ。トマトがないよ。
//ボールがないよ。バットがないよ。
データから『[ァ-ン]+ー[ァ-ン]+』で正規表現全抽出して言う。
//コート
//ベーコン
//ボール
*//本体
//対象文からパターンを含む行を抽出
●正規表現行抽出(対象文からパターンで)
正規表現修飾子は『gmk』
戻値は(対象文&改行)の(『([^\r\n]*』&パターン&『[^\r\n]*)\r\n』)を『\x01$1\x02』で正規表現置換
戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
戻値を『\x02』で正規表現区切って戻る
//対象文からパターンをすべて抽出
●正規表現全抽出(対象文からパターンで)
正規表現修飾子は『gmk』
戻値とは文字列
戻値は対象文の(『(』&パターン&『)』)を『\x01$1\x02』で正規表現置換
戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
戻値を『\x02』で正規表現区切って戻る
*正規表現全抽出2
従来の「正規表現全抽出」は、マッチしたものが1個以下だと何も返さなかった。
(これは、たぶん「正規表現区切」の仕様によるもの)
そこで「正規表現全抽出2」では、マッチしたものが1個の場合も戻値を返すよう改変した。
*本体
//正規表現全抽出2
//2010-01-16
//
//動作:対象文から正規表現パターンでマッチしたものを全て返す
//引数:
// ・対象文から 文字列
// ・パターンで 文字列
//戻値:
// ・パターンにマッチしたもの全てを配列で返す
//
//従来の「正規表現全抽出」は、マッチしたものが1個以下だと何も返さなかった。
//これは、たぶん「正規表現区切」の仕様によるもの。
//「正規表現全抽出2」では、マッチしたものが1個の場合も戻値を返すよう改変。
//
//対象文からパターンをすべて抽出
//マッチした数が1個の場合は戻値を返す
●正規表現全抽出2(対象文からパターンで)
正規表現修飾子は『gmk』
//マッチした数を計算
対象文2=対象文
対象文2=対象文2の『(●)』を『※』に正規表現置換
対象文2=対象文2のパターンを『●』に正規表現置換
マッチ数=対象文2で『●』の出現回数
//抽出
戻値とは文字列
戻値は対象文の(『(』&パターン&『)』)を『\x01$1\x02』で正規表現置換
戻値は戻値の『\x02[^\x01]*』を『\x02』に正規表現置換
戻値は戻値の『[^\x02]*\x01』を空に正規表現置換
//
マッチ数で条件分岐
「0」ならば
それは空
戻る
「1」ならば
戻値の『\x02』を空に正規表現置換して戻る
違えば
戻値を『\x02』で正規表現区切って戻る
*//テストデータ
パターン=「(.*?)」
本文=「吾輩(わがはい)は猫である。
名前はまだ無い。
どこで生れたかとんと見当(けんとう)がつかぬ。
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
吾輩はここで始めて人間というものを見た。
しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。
この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。
しかしその当時は何という考もなかったから別段恐しいとも思わなかった。
ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。
掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。
この時妙なものだと思った感じが今でも残っている。
第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。
その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。
のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く。
どうも咽(む)せぽくて実に弱った。
これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。」
*//テストプログラム
表示欄とはメモ
その幅は640
その高さは480
出力文=「」
本文を反復
出力文=出力文&それ&改行
それからパターンで正規表現全抽出2
出力文=出力文&それ&改行
出力文=出力文&「-------」&改行
表示欄@テキスト=出力文
*テスト結果
吾輩(わがはい)は猫である。
(わがはい)
-------
名前はまだ無い。
-------
どこで生れたかとんと見当(けんとう)がつかぬ。
(けんとう)
-------
何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している。
-------
吾輩はここで始めて人間というものを見た。
-------
しかもあとで聞くとそれは書生という人間中で一番獰悪(どうあく)な種族であったそうだ。
(どうあく)
-------
この書生というのは時々我々を捕(つかま)えて煮(に)て食うという話である。
(つかま)
(に)
-------
しかしその当時は何という考もなかったから別段恐しいとも思わなかった。
-------
ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである。
(てのひら)
-------
掌の上で少し落ちついて書生の顔を見たのがいわゆる人間というものの見始(みはじめ)であろう。
(みはじめ)
-------
この時妙なものだと思った感じが今でも残っている。
-------
第一毛をもって装飾されべきはずの顔がつるつるしてまるで薬缶(やかん)だ。
(やかん)
-------
その後(ご)猫にもだいぶ逢(あ)ったがこんな片輪(かたわ)には一度も出会(でく)わした事がない。
(ご)
(あ)
(かたわ)
(でく)
-------
のみならず顔の真中があまりに突起している。そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く。
(けむり)
-------
どうも咽(む)せぽくて実に弱った。
(む)
-------
これが人間の飲む煙草(たばこ)というものである事はようやくこの頃知った。
(たばこ)
-------
----
- 不具合で101個以上の結果がくっつきます。詳細はこちら→ http://nadesi.com/cgi/bug/mbbs.php?m=thread&threadid=863 -- 名無しさん (2017-02-21 15:51:48)
- &amp;は&です -- ↑ (2017-02-21 15:52:34)
#comment()
----
2017-02-21T15:52:34+09:00
1487659954
-
●空行削除
https://w.atwiki.jp/isoroku_be/pages/126.html
*情報
作者名:五十六
引用元:なし
*概要
文字列や配列の空行、空要素を削除して返します。
*サンプルプログラム
「あ
い
う
」の空行削除して言う。
*//本体
●空行削除(Sの|Sを)
それ=S。S=空。
反復
もし、対象が空でなければ、対象をSに配列追加。
Sで戻る。
----
- コードが一人よがり過ぎて判りません。読む側の気持ちも少しは考えてくださいお願いします。 -- be (2011-04-25 20:09:23)
- こんな感じならどうでしょうか。 -- じん (2013-09-12 00:27:12)
- あれ、改行できないの、これ? -- じん (2013-09-12 00:27:54)
#comment()
----
2015-01-26T22:50:41+09:00
1422280241
-
●したらば書き込み
https://w.atwiki.jp/isoroku_be/pages/83.html
*情報
作者名:五十六
引用元:[[なでしこプログラム掲示板「したらば書き込みセット」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=917&rev=&no=0]]
*概要
livedoor したらば掲示板に書き込むセット。
本当はクッキーじゃないけどわかりやすいようにクッキーにしてるので注意。
*解説
***引数
スレ:http://jbbs.livedoor.jp/bbs/read.cgi/*******/****/**********/
名前欄:てす
メール欄:sage
本文:あいうえお
***返り値
書き込みました。とか書いてあるページのソース
*サンプルプログラム
経過ダイアログ=オフ。
「http://jbbs.livedoor.jp/bbs/read.cgi/nadesiko/1234/1234567890/」に「てす」と「sage」と「あいうえお」でしたらば書き込み。
*//本体
●したらば書き込み(スレに名前欄とメール欄と本文で)
名前欄=名前欄をURLエンコード。
メール欄=メール欄をURLエンコード。
本文=本文をURLエンコード。
スレ=スレをしたらばスレURL分解。
クッキー=スレのしたらばクッキー準備。
HEAD=「Content-Type: application/x-www-form-urlencoded」。
BODY=「BBS={スレ[3]}&KEY={スレ[2]}&DIR={スレ[1]}&TIME={クッキー}&NAME={名前欄}&MAIL={メール欄}&MESSAGE={本文}」。
URL=「http://{スレ[0]}/bbs/write.cgi/{スレ[1]}/{スレ[3]}/{スレ[2]}/」。
ソース=HEADとBODYをURLへHTTPポスト。
ソース=ソースをSJIS変換。
もし、ソースの1から「<title>書きこみました。</title>」を文字検索≦0ならば
ソースを言う。
エラー発生。
ソースで戻る。
●したらばクッキー準備(スレの)
HEAD=空。
URL=「http://{スレ[0]}/bbs/read.cgi/{スレ[1]}/{スレ[3]}/{スレ[2]}/1」。
ソース=URLをHTTPデータ取得。
ソースの「<input type="hidden" name="TIME" value="」から「"」まで範囲切り取る。
それで戻る。
●したらばスレURL分解(URLから|URLの|URLを)
退避URL=URL。A=空。B=空。C=空。URL=URLの「/」を「//」に置換。URL=URLの「/bbs//read.cgi/」を空に置換。
A=URLの「////」から「/」まで範囲切り取る。C=URLを『\d{10}』で正規表現マッチ。URL=URLのそれを空に置換。
B=URLの「/」から「/」まで範囲切り取る。D=退避URLの「{B}/」から「/{C}」まで範囲切り取る。
E=退避URLの「http://{A}/bbs/read.cgi//」を空に置換。
「{A}{改行}{B}{改行}{C}{改行}{D}{改行}{E}」で戻る。
----
//- 大阪デリヘル・ホテヘル風俗 -- 大阪風俗アインズグループ (2012-02-28 18:15:55)
//- ビックリマン、キン消し等高額買取 ttp://kaitoricollector.com -- 買取コレクター (2012-04-03 01:00:55)
#comment()
----
2014-12-28T16:37:28+09:00
1419752248