strmidと置き換えるだけで使えます。右から取り出す場合はstrlenが重くてどうしようもありませんでした。(´・ω・`)
strmidと置き換えるだけで使えます。右から取り出す場合はstrlenが重くてどうしようもありませんでした。(´・ω・`)
// // [ Infomation ] // Name : 高速strmid // SubName : // Version : 1.00 // copyright : GENKI // // [ Update history ] // 2017/09/17 : 1.00 : 完成。 // // [ Comment ] // 遅いと指摘され続けてきたstrmid命令の高速動作する互換命令です。 // これまでstrmid命令の代わりにmemcpyを用いて高速化する手法が // 広く利用されていましたが、当然ながら使いにくくなるという問 // 題を有していました。 // 本モジュールでは内部でmemcpyを用いて高速に動作させつつ、 // 必要な面倒な手続きを省略し、strmidと同じ要領で使用できるよ // うにしています。 // 使い方は、strmid命令を使用しているスクリプトで本モジュー // ルをincludeし、strmidをstrmid2に置換するだけで高速に動作す // るstrmid互換命令を使用できるようになります。 // なお文字列を右側から取り出す場合は、strmidと同等程度の速 // 度に低下します。 // ;#ifndef __MODULE_NAME__ ;#define global __MODULE_NAME__ #module // ------------------------------------------------------------ // // // 関 数 :strmid2 // // 引 数 :var p1=変数名 : 取り出すもとの文字列が格納されている変数名 // int p2=-1~ : 取り出し始めのインデックス // int p3=0~ : 取り出す文字数 // // 返り値 :refstr // 0 : hogehoge // 1 : hogehoge // // 機能説明: // strmid命令よりも高速度さする互換命令です。 // p2に-1を指定した場合は内部でstrmid命令を呼び出します。 // // p1で指定した文字列型変数の中から、 p2,p3で指定した条件で文字を取り出したものを返します。 // p2で取り出し始めるインデックスを指定します。これは、文字列の始まり1文字目を0として、1,2,3...と順番に増えていくものです。1から始まりではないので注意してください。 // p3で取り出す文字数を指定します。実際に格納されている文字数よりも多く指定した場合は、実際の文字数までが取り出されます。 // また、p2に-1を指定すると文字列の右からp3で指定した文字数だけ取り出します。 // // // ------------------------------------------------------------ // #defcfunc strmid2 var p_txt, int p_idxStart, int p_lenPickChar ;-------------------- ; 右から取り出す ;-------------------- if p_idxStart<0 { ;右から取り出す場合は、strlenが遅いのでstrmidを使ったほうが速くなる。 return strmid(p_txt, p_idxStart, p_lenPickChar) } ;-------------------- ; 引数チェック ;-------------------- if p_lenPickChar<=0 { return "" } ;-------------------- ; 出力初期化 ;-------------------- ; 出力する文字列 sdim res_text, p_lenPickChar ;-------------------- ; 左から取り出す ;-------------------- ; 取り出す文字数を決定 ;バッファオーバーフロー対策 i = varsize(p_txt) if i - p_idxStart - p_lenPickChar < 0 { ; 文字数オーバーする場合 l = i - p_idxStart } else { l = p_lenPickChar } ; 文字列取り出し memcpy res_text, p_txt, l, 0, p_idxStart return res_text #global ;#endif ;__MODULE_NAME__ ;------------------------------------------------------------------------------- ; ; 仮実行スクリプト(デバッグ作業用) ; ;##################################################################### ;ここにはデバッグ作業用のスクリプトを記述します。 ;ここを有効にするとこのファイル単独での実行が可能になります。 ; ;0 :リリースモード 本体側から#includeで連結して動作させる場合です。 ;1 :デバッグモード このファイル単品で動作確認が出来ます。 #if 0 b = "ABCDEF" mes b mes "- strmid" mes strmid(b,-1,3) ; 右から3文字を取り出す mes strmid(b,1,3) ; 左から2文字目から3文字を取り出す mes "- strmid2" mes strmid2(b,-1,3) ; 右から3文字を取り出す mes strmid2(b,1,3) ; 左から2文字目から3文字を取り出す #endif ;#####################################################################