*情報 作者名:fuji、五十六 引用元:[[なでしこプログラム掲示板「ソース高速HTML化」>http://www.himanavi.net/cgi/nade-bbs/cbbs.cgi?mode=al2&namber=444&rev=&no=0]] 勝手に改変 *概要 ソースを最適化します。 具体的にはこんな変化があります。(↑が変化前 ↓が変化後) 「てすてす」 (『てすてす』) 「あいうえお{変数A}かきくけこ」。 (『あいうえお』&(変数A)&『かきくけこ』)。 これの作成にあたってfujiさんの[[★ソース高速HTML化]]を参考にさせて頂きました。 というかほとんど流用です。ごめんなさい。 *解説 ※最適化の効果を確認してみるプログラム 引用+改変:[[なでしこプログラム掲示板「メモリ不足??」ツリーより 焼きそばさんの検証プログラム>http://www.himanavi.net/cgi/nade-bbs2/cbbs.cgi?mode=one&number=7258&type=7250&space=120&no=0]] ほげほげ=「hoge ほげ ホゲ」。 A=システム時間。 100000回 親回数=回数 TEMP=「{母艦パス}てすてす{ほげほげ[0]}」。 もし、回数%1000=0ならば母艦のタイトルは回数。 A=システム時間-A。 「最適化前 {A}」を表示。 A=システム時間。 100000回 親回数=回数 TEMP=母艦パス&「てすてす」&ほげほげ[0]。 もし、回数%1000=0ならば母艦のタイトルは回数。 A=システム時間-A。 「最適化後 」&Aを表示。 ***引数 ソース:ソース本文(≠.nakoへの絶対パス) ***返り値 最適化されたソース *サンプルプログラム A=(「.nako」のファイル選択)を開く。 A=Aをソース最適化。 Aを言う。 *//本体 ●ソース最適化(ソースを|ソースの) '定数 文字列色は"#000080" # CR=CHR(13) //「"”『``{{・/*##//'’※ 囲み文字=`「 " ” `&"『 ` `"&` { { /* ・ # # // ' ’ ※` 閉じ文字=`」"”`&"』``"&`}}`#*/ 囲み文字数=要素数(囲み文字)。 最初部分=「」 (ソース!=『』)の間 最小文字数=文字数(ソース) 番号=-1 囲み文字を反復 ソースで対象が何文字目。 もし、(それ<最小文字数)かつ(それ>0)なら 最小文字数=それ。 番号=回数-1 次囲み文字=対象。 #関数を探す 「●{~}■{~}*」を反復 ソースを"^\t* * *{対象}"で正規表現マッチ。 それ=それ\0。 もし、(それ<>「」)かつ(何文字目(ソース,それ)<最小文字数)なら 番号=囲み文字数+回数-1 次囲み文字=対象。 #次の囲み文字を言う。 もし、番号=-1なら、抜ける。#囲み文字が見つからなかった場合。 ソースの次囲み文字までを切り取る。 最初部分=最初部分&それ。 #囲み文字に応じて切り取り もし、番号<=9ならば もし、番号<=8ならば、 もし、番号=8ならば 次閉じ文字="*/" 違えば 次閉じ文字=MID(閉じ文字,番号+1,1) 違えば、 もし、(何文字目(ソース," "))<(何文字目(ソース,改行))ならば 次閉じ文字=" " 違えば 次閉じ文字=改行。 違えば、次閉じ文字=改行 もし、次閉じ文字=改行なら、 ソースの改行までを切り取る。 切り取り部分=「{次囲み文字}{それ}」 ソース=改行&ソース 違えば、 ソースの次閉じ文字までを切り取る。 切り取り部分=「{次囲み文字}{それ}{次閉じ文字}」。 もし、番号<6なら //ここから文字列 文字列判定=切り取り部分の1から1文字抜き出す。 もし、(文字列判定=『「』)ならば 切り取り部分=切り取り部分の『{』を`』&(`に置換。 切り取り部分=切り取り部分の『}』を`)&『`に置換。 切り取り部分=切り取り部分の『{』を`』&(`に置換。 切り取り部分=切り取り部分の『}』を`)&『`に置換。 切り取り部分の1から1文字削除。切り取り部分=`(『`&切り取り部分。 切り取り部分から1文字右端削除。切り取り部分=切り取り部分&`』)`。 切り取り部分=切り取り部分の`&『』&`を空に置換。 切り取り部分=切り取り部分の`『』&`を空に置換。 切り取り部分=切り取り部分の`&『』`を空に置換。 もし、(切り取り部分の1から2文字抜き出す=「((」)かつ(切り取り部分から2文字右部分=「))」)ならば 切り取り部分の1から1文字削除。切り取り部分から1文字右端削除。 もし、(文字列判定=『"』)ならば 切り取り部分=切り取り部分の『{』を『`&(』に置換。 切り取り部分=切り取り部分の『}』を『)&`』に置換。 切り取り部分=切り取り部分の『{』を『`&(』に置換。 切り取り部分=切り取り部分の『}』を『)&`』に置換。 切り取り部分の1から1文字削除。切り取り部分=『(`』&切り取り部分。 切り取り部分から1文字右端削除。切り取り部分=切り取り部分&『`)』。 切り取り部分=切り取り部分の『&``&』を空に置換。 切り取り部分=切り取り部分の『``&』を空に置換。 切り取り部分=切り取り部分の『``&』を空に置換。 もし、(切り取り部分の1から2文字抜き出す=「((」)かつ(切り取り部分から2文字右部分=「))」)ならば 切り取り部分の1から1文字削除。切り取り部分から1文字右端削除。 最初部分=最初部分&切り取り部分。 完成文=最初部分&ソース。 完成文を戻す。 ---- - WinAPI利用してるとソースがむちゃくちゃになるかも・・・いずれ直します -- 管理人 (2009-01-06 22:27:21) - http://www.example.com エラー -- http://www.example.com (2010-01-21 18:27:57) #comment() ----