+---------------------------------------------------------- | | mod_dstr.as | | Ver 1.0 (※注意:「hsp3dish.as」が必須です。事前に「hsp3dish.as」をインクルードしてください) | +---------------------------------------------------------- | | HSP3.4β2以降 (スマートフォン(HSP3Dish)/WindowsOS) 用 | | HSP3Dish用 文字列モジュール | | By. しまくろねこ | +---------------------------------------------------------- (1). 当モジュールの概要 HSP3Dish用の文字列処理に関するモジュールです。 Windows上でシフトJISで保存されたテキストファイル等をAndroidやiOSで、「bload」命令や「noteload」命令で読み込むと、 AndroidやiOS上では文字コードがUTF-8なためシフトJISで保存されたテキストを扱うには一度UTF-8に変換してあげる必要があります。 そのため、このモジュールを作りました。 また、HSP標準命令である「strmid」/「strlen」/「split」」/「instr」とほぼ同等の機能を持たせました。 特徴としては、HSPでは「strmid」、「strlen」、「instr」はバイト毎の処理になっておりますが、このモジュールでは文字列を簡単に扱うために『1文字毎』の処理にしております。 (2). 機能一覧 ・(dstr_utf8) : シフトJIS(SJIS)コードの文字列をUTF-8コードの文字列に変換。 ・(dstr_mid) : 文字列の一部を取り出す。 (HSP標準の「strmid」命令と同等) ・(dstr_len) : 文字列の長さを調べる(バイト数ではなく文字数)。 (HSP標準の「strlen」命令と同等) ・(dstr_split) : 文字列を分割する。 (HSP標準の「split」命令と同等) ・(dstr_instr) : 文字列の検索をする。(HSP標準の「instr」命令と同等) ※(dstr_rep 命令はHSP3Dish標準にてstrrepが使用可能となりましたので廃止しました) (3). UTF-8に変換できる文字について ・JIS X 0213(JIS2000)の情報を元にしております。 (4). "mod_dstr.ini"について "dstr_init" 命令、"dstr_utf8" 関数を使用するにあたり必要なファイルとなります。 HSP3Dish Helperにて、Android実機で動作可能なAPKファイルをビルドする際には、"mod_dstr.ini" をDPMファイルに含ませてください。 (!!) DPMファイルに含ませてAndroid実機でプログラムが落ちてしまう場合は、[assets] フォルダに入れてください。 (!!) "dstr_init" 命令、"dstr_utf8" 関数を使用しない場合、"mod_dstr.ini" は不要となります。 (5). 当モジュール(mod_dstr.as)のファイル配置フォルダ HSP3の[common]フォルダに "mod_dstr.as" をコピーしてください。 もしくは現在作成しているソースが保存されているフォルダにコピーしてください。 (6). 当モジュールで使用しているiniファイル(mod_dstr.ini)のファイル配置フォルダ 現在作成しているソースが保存されているフォルダに "mod_dstr.ini" をコピーしてください。 (7). 当モジュールのHSP3上での使用準備 まず最初に、#includeで "mod_dstr.as" を必ず呼び出します。 次に、当モジュールを初期化するために、プログラムの先頭などで "dstr_init" 命令を1度呼び出してください。 これで当モジュールを使用する準備が整いました。 (!!) "dstr_utf8" 関数を使用しない場合は "dstr_init" 命令を呼び出す必要はありません。 (8). 命令/関数 ■命令 ============================================= ■dstr_init ・概要 当モジュールの初期化処理を行ないます。 必ず一番最初に呼び出してください。 ※ "dstr_utf8" 関数を使用しない場合は "dstr_init" 命令を呼び出す必要はありません。 ※ "dstr_init" 命令を使用しない場合は "mod_dstr.ini" は必要ありません。 ・引数 なし ・戻り値 なし ・使用例 dstr_init ■dstr_split "p1", "p2", "p3" ・概要 "p1"で指定した文字列型変数の内容を、"p2"で指定した文字列を区切り文字として、"p3"の文字列配列変数に分割された文字列を渡します。 HSP標準のsplitとほぼ同じです。 ・引数 "p1": 元の文字列が代入された文字列変数 "p2": 区切り用文字列 "p3": 分割された要素が代入される変数 ・戻り値 システム変数(stat)に分割された数が返されます。 ・使用例 A = "12\t3\t456789\t0" dstr_split A, "\t", B repeat stat mes B(cnt) loop (結果・・・"12") ( "3") ( "456789") ( "0") ■関数 ============================================= ■dstr_utf8("p1") ・概要 シフトJIS(SJIS)コードの文字列をUTF-8コードの文字列に変換します。 実行しているプラットフォームがWindowsの場合は、特に変換されずにシフトJISコードの文字が返ります。 実行しているプラットフォームがAndroid/iOSの場合は、UTF-8コードの文字が返ります。 ・引数 "p1": 変換したい文字。または変数 ・戻り値 UTF-8コードに変換された文字列が返ります。 ・使用例 [TEST.TXT] = "じゅわいよくちゅーるマキ" bload "TEST.TXT", buff A = dstr_utf8(buff) picmes "" + A (結果・・・"じゅわいよくちゅーるマキ") ・注意 変換する元の文字は、必ずシフトJISコードの文字でなければいけません。 ■dstr_len("p1") ・概要 文字列の長さを調べる。(バイト単位ではないので半角/全角は関係ありません。文字数で調べます) ・引数 "p1": 文字列の長さを調べたい文字。または変数 ・戻り値 半角/全角関係なく文字数が返ります。 ・使用例 A = dstr_len("今は朝です") picmes "" + A (結果・・・"5") ・注意 実行しているプラットフォームがWindowsの場合は、文字コードがシフトJISコードの文字が対象となります。 実行しているプラットフォームがAndroid/iOSの場合は、文字コードがUTF-8コードの文字が対象となります。 ■dstr_mid("p1", p2, p3) ・概要 文字列の一部を取り出す。(バイト単位ではないので半角/全角は関係ありません。文字数で取り出します。) HSP標準のstrmidとほぼ同じです。 ・引数 "p1": 取り出すもとの文字列。または変数 p2 : 取り出し始めのインデックス([0]が1文字目になります。また[-1]を指定すると右側からのインデックス位置となります) p3 : 取り出す文字数 ・戻り値 半角/全角関係なくインデックスの位置から取り出す文字数分だけの文字が返ります。 ・使用例 A = dstr_mid("今は朝です", 2, 3) picmes "" + A (結果・・・"朝です") ・注意 実行しているプラットフォームがWindowsの場合は、文字コードがシフトJISコードの文字が対象となります。 実行しているプラットフォームがAndroid/iOSの場合は、文字コードがUTF-8コードの文字が対象となります。 ■dstr_instr("p1", p2, "p3") ・概要 "p1"で指定した文字列型変数の中に、"p3"で指定した文字列があるかどうか調べて、インデックスを返します。 もし、指定した文字列が見つからなかった場合には[-1]が返されます。 HSP標準のinstrとほぼ同じです。 ・引数 "p1": 検索される文字列が格納されている文字列型変数名 p2 : 検索を始めるインデックス "p3": 検索する文字列 ・戻り値 半角/全角関係なく検索開始インデックスの位置から見つかった文字位置のインデックスが返ります。 ・使用例 A = dstr_instr("あいうえおかきくけこ", 5, "きく") picmes "" + A (結果・・・"1") ・注意 実行しているプラットフォームがWindowsの場合は、文字コードがシフトJISコードの文字が対象となります。 実行しているプラットフォームがAndroid/iOSの場合は、文字コードがUTF-8コードの文字が対象となります。 (9). 実際の使用方法(例) #include "hsp3dish.as" #include "mod_picmes.as" #include "mod_dstr.as" file_name = "test.txt" picmes_init dstr_init exist file_name : size = strsize sdim buff, size notesel buff noteload file_name redraw 0 color 0, 0, 0 : boxf pos 0, 0 repeat notemax line_buff = "" noteget line_buff, cnt line_buff = dstr_utf8(line_buff) picmes line_buff loop redraw 1 stop (10). 履歴 2022/02/03 (Ver1.0) ・dstr_instr関数で無駄な処理をしていたのを修正。 2022/02/02 (Ver0.9) ・dstr_instr関数を追加。 2018/10/28 (Ver0.8) ・Windows, Android, iOS以外のOSでも(多分)動くように追加。 2018/08/22 (Ver0.7) ・dstr_utf8関数にて[半角スペース],[!],["]の変換コード(mod_dstr.ini)を修正。 2016/05/15 (Ver0.6) ・1面1区点〜1面7区点コードのAndroid上で2バイトで全角文字(記号)を定義されている文字の一部が、dstr_mid関数、dstr_len関数で正常な情報を返さなかったのを修正。 ・当ReadMe.txtファイルの「(4). "mod_dstr.ini"について」に注意文を追加。 ・当ReadMe.txtファイルの「(7). 当モジュールのHSP3上での使用準備」に注意文を追加。 2016/05/05 (Ver0.5) ・63区点以降の文字が正しく変換されていなかったため修正。 2016/01/05 (Ver0.4) ・設定ファイル『mod_dstr.ini』をバイナリ化。バイナリ化したことで初期化処理が高速化。 2014/12/11 (Ver0.32) ・DPMファイルに『mod_dstr.ini』を含めてビルドするとAndroid実機で「dstr_init」使用時にファイルが存在しないことになってしまい落ちてしまう現象があるため、ファイルが存在しない場合メッセージを表示してプログラムを終了するように修正。 2014/10/20 (Ver0.31) ・HSP3Dish上にて標準strrep命令が使用可能となったため、dstr_rep命令を廃止。 ・dstr_split命令にて、分割できる上限数を256個から99999個に変更。 2014/02/08 (Ver0.2) ・dstr_split命令を追加。 2013/08/19 (Ver0.1) ・初版。 (11). 配布等について 当モジュールはフリー(商用可)です。 使う人がいるか不明ですが、もし使われる場合は配布用ReadMe等に当モジュールを使用している旨を記載する必要はありません。 もし使われる際は、メール(simakuroneko@gmail.com)もしくは、 掲示板(http://simakuroneko.bbs.fc2.com/)に使用するとだけ一言書いてもらえると作者が喜びます。 再配布もOKですが、その場合事後で結構ですのでE-Mail( simakuroneko@gmail.com )までご連絡ください。 また、書籍等に掲載する場合も自由に掲載していただいてOKです。 その場合も事後で結構ですのでE-Mail( simakuroneko@gmail.com )までご連絡頂けると嬉しいです。 (12). 動作確認OS ・WindowsXP ・WindowsVISTA ・Windows8 ・Android(HSP3Dishを利用) (13). 作者情報 ハンドルネーム : しまくろねこ Webページ : https://sites.google.com/site/simakuroneko/ https://plus.google.com/108269656292156038015 Twitter : https://twitter.com/simakuroneko_tw E-Mail : simakuroneko@gmail.com 掲示板(BBS) : http://simakuroneko.bbs.fc2.com/