今までにテキストの連結や演算は行えていましたが、 逆である、既存のテキストの一部を取り出したり、編集することは出来ませんでした。 今回はそのやり方について説明します。
| サイズ = strlen(調査対象変数) | |||
| サイズ | 取得した変数のバイト数。 | ||
| 調査対象変数 | サイズを調査する文字列型変数を指定する。 | ||
1 2 3 |
sdim s, 16 s = "abcあいう" mes "変数s「" + s + "」には" + strlen(s) + "バイト入っています。" |
| 取得テキスト = strmid(取出元変数, 開始インデクス, 取出サイズ) | |||
| 取得テキスト | 取出元変数から取出した文字列。 | ||
| 取出元変数 | 対象の文字列型変数。 | ||
| 開始インデクス | 先頭を0としたバイト単位の開始位置。 | ||
| 取出サイズ | 開始インデクスから実際に取出す、バイト単位のサイズ。 | ||
1 2 3 4 5 6 |
s = "abcdefghijklmnopqrstuvwxyz" mes "1:" + strmid(s, 10, 10) mes "2:" + strmid(s, -1, 10) mes "3:" + strmid(s, 10, 99) mes "4:" + strmid(s, 99, 10) mes "5:" + strmid(s, 10, -1) |
| インデクス = instr(検索対象変数, 開始インデクス, 検索文字列) | |||
| インデクス | 取得した位置。 | ||
| 検索対象変数 | 検索元の文字列型変数を指定する。 | ||
| 開始インデクス | 先頭を0としたバイト単位の検索開始位置を指定する。 | ||
| 検索文字列 | 検索する文字列を指定する。 | ||
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
sdim p3, 16 p1 = "This site is Hot Soup Processor Beginner's Club." pos 50, 50 : mes "検索する文字列" pos 200, 50 : input p3, 100 pos 350, 50 : button "検索", *search pos 50, 100 : mes "下記の文字列から検索を行います。" color 255 pos 50, 120 : mes p1 stop *search p2 = 0 // 開始位置を先頭に設定する repeat i = instr(p1, p2, p3) // 指定位置から検索する if i = -1 : dialog "見つかりませんでした。" : break dialog "先頭から" + (p2 + i) + "バイト目に発見しました。\n引き続き検索しますか?", 2 if stat = 7 : break p2 += i + 1 // 次回の開始位置を「今回+1」に設定する loop |
1 2 |
a="ABC" mes instr(a, 3, "a") // 半角小文字の「a」はないので−1となるはず… |
| getstr 保持変数, 取得元変数, インデクス, 区切り文字コード | |||
| 保持変数 | 取得したテキストを保持する変数を指定する。 | ||
| 取得元変数 | 取得する対象の文字列型変数を指定する。 | ||
| インデクス | 先頭を0として、取得開始位置をバイト単位で指定する。 | ||
| 区切り文字コード | 1バイトのデリミタをASCIIコードで指定する。 | ||
| コード表 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|---|
| 30 | 空白 | ! | " | # | $ | % | & | ' | ||
| 40 | ( | ) | * | + | , | - | . | / | 0 | 1 |
| 50 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; |
| 60 | < | = | > | ? | @ | A | B | C | D | E |
| 70 | F | G | H | I | J | K | L | M | N | O |
| 80 | P | Q | R | S | T | U | V | W | X | Y |
| 90 | Z | [ | \ | ] | ^ | _ | ` | a | b | c |
| 100 | d | e | f | g | h | i | j | k | l | m |
| 110 | n | o | p | q | r | s | t | u | v | w |
| 120 | x | y | z | { | | | } | ~ |
1 |
mes '\\' // ¥等は通常テキスト同様にエスケープすること! |
1 2 3 |
txt = "HSPBC-Author:Ultimate/Satoshi" getstr get, txt, instr(txt, , ":") + 1, '/' // 「:」の次から「/」までを取り出す mes "取得サイズ:" + strsize + "\n取得テキスト:" + get |
| split 分割元変数, 区切り文字列, 分割先変数… | |||
| 分割元変数 | 分割対象のテキストが格納された変数を指定する。 | ||
| 区切り文字列 | 分割対象の区切りテキストを指定する。 | ||
| 分割先変数… | 分割した文字列の格納先変数を指定する。 分割数分変数を指定することで各変数にセット可能。 分割数よりも指定変数が少ない場合は配列変数として各要素にセットする。 | ||
1 2 3 4 5 |
v = "分割先に指定した変数の個数よりも\n分割元変数の分割個数が多い場合は\n分割先を配列にして\n要素0から順に格納します" split v, "\n", ary foreach ary mes strf("%d. ", cnt) + ary.cnt loop |
| 受取先 = strtrim(除去対象変数, 除去タイプ, 除去文字コード) | |||
| 受取先 | 除去後テキストの受取先を指定する。 | ||
| 除去対象変数 | 除去対象のテキストが格納された変数を指定する。 | ||
| 除去タイプ | 除去タイプ(0:両端, 1:左端, 2:右端, 3:全箇所対象)を指定する。 | ||
| 除去文字コード | 除去対象文字をASCIIコードで指定する。 | ||
1 2 3 4 5 |
hspbc = " Hot Soup Processor Beginner's Club " repeat 4 mes strf("type=%d [%s]", cnt, strtrim(hspbc, cnt)) // HSP3.2以降用 // mes "type=" + cnt + " [" + strtrim(hspbc, cnt) + "]" // HSP3.1以前用 loop |