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_idxStartreturn res_text#global;#endif ;__MODULE_NAME__;-------------------------------------------------------------------------------;; 仮実行スクリプト(デバッグ作業用);;#####################################################################;ここにはデバッグ作業用のスクリプトを記述します。;ここを有効にするとこのファイル単独での実行が可能になります。;;0 :リリースモード本体側から#includeで連結して動作させる場合です。;1 :デバッグモードこのファイル単品で動作確認が出来ます。#if 0b = "ABCDEF"mes bmes "- 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;#####################################################################