テキスト操作2
前章でテキストファイルを安全に読み書きする方法の説明を行いました。
この章ではnotesel命令で指定したメモリノートパッドデータを1行単位に操作する命令の紹介を行います。
尚、この章に紹介する命令は全て、このメモリノートパッド系操作命令となるので、
サンプル同様に処理前には必ずnotesel命令で対象の変数を指定しておくようにしてください。
始めに紹介するのは、変数内にあるテキストデータの1行を取得する命令です。
| noteget 代入先変数, 取得行 |
| | | |
| 代入先変数 | 取得した1行分のデータを代入する変数を指定する。 |
| 取得行 | 先頭行を0として、取得するインデクスを指定する。 |
第1パラメータに取り出したデータをセットする変数の指定を行います。
指定された変数は現在の型に関わらず、文字列型変数となりますので覚えておきましょう。
第2パラメータには、変数のないテキストの1行目を0、2行目を1、3行目を2…
とした、取得したい「実際の行番−1」を指定してください。
もし、存在しない行番やマイナス値を指定してもエラーにはならず、空文字が返ります。
ヘルプには「指定する変数には、読み出すのに十分なバッファを確保するのを忘れないでください。」
とありますが、HSP3からは変数(バッファ)サイズの自動拡張が行われるようになりましたので、
仮に変数サイズよりも大きいデータを取得しても安全に拡張して処理されます。
次に紹介するのは、指定した行データを丸ごと削除する命令です。
第1パラメータに指定した行位置にあるテキストデータを除去します。
他の行には影響がありませんが、削除後は行番が1つずつシフトダウンするので間違えないようにしましょう。
行の取得、削除、と来た次は…行の挿入(置換)を行う命令です。
| noteadd 代入文字列, 追加行, モード |
| | | |
| 代入文字列 | メモリノートパッドに代入したいテキストを指定する。 |
| 追加行 | 追加するインデクスを指定する。 |
| モード | 追加挿入(=0)するか、上書置換(=1)するかを指定する。 |
第1パラメータにメモリノートパッドへ追加するテキストまたは文字列型変数を指定します。
第2パラメータに追加する行を指定し、第3パラメータに挿入するのか上書きするのかを指定します。
指定するモードにより変わりますが、もし第3パラメータに0または省略した場合、
指定した行以降のデータは1行ずつシフトアップしますので以後の処理は注意してください。
1(0と省略以外)を指定すると、指定した行データが入れ替わり、その他の行には行番を含め影響ありません。
尚、第2パラメータに−1を指定した場合は最終行が対象となります。
あと、「メモリノートパッド命令でテキストを増やした場合は拡張されるが、通常の連結時は拡張されない」と
ヘルプに記述されていますが、この説明はHSP2以前向けのもので、
HSP3以降であれば、通常の文字列連結時も自動拡張されるので心配ありません。
この章最後に紹介するのは、HSP3で追加された命令です。
| noteunsel |
| | | |
| [パラメータなし] | メモリノートパッドの対象変数を戻すだけの為、パラメータは必要ない。 |
この命令は主に、複数の変数をメモリノートパッドとして扱いたい場合に使用するものと思われます。
noteunsel命令を置くと、「最後にnotesel命令でメモリノートパッドの対象となった変数」の前に
「notesel命令で指定されていた変数」が対象となります。
今ココで紐解くとややこしくなりそうなので簡単にだけ書いておきますが、
HSPでは、HSPの命令や関数を複数用いて新しく命令・関数をユーザー定義することができます。
この新命令・関数内でメモリノートパッド対象変数を変更してしまうと、
メモリノートパッド対象先を新命令外・関数外の変数に戻すことが出来ませんでしたが、
HSP3から登場した、このnoteunsel命令で戻すことが出来るようになりました。
この説明は、またその時に改めて説明しようと思います。
notesel命令を繰り返し使用すると、バッファの多重指定になるような書き方がヘルプにあります。
100万回ほどnotesel命令を連続使用してみましたが、影響はないように感じられました。
ただ、今回の検証で何も問題が発生しなかっただけかもしれませんし、
ヘルプに注意書きがされている以上、気をつけるべきポイントなのかもしれません。
複数回notesel命令でメモリノートパッド対象先を変更するようなプログラムを組む場合は、
念のためnoteunsel命令で戻すようにしておくとイイかもしれませんね。