文字列の両端の空白と制御文字を取り除きます。
- 構文
- UString = TRIM( 文字列, 全角空白 )
- 引数
- 文字列 (String)必須
- 文字列
- 全角空白 (Boolean = False)省略可
- FALSE
- 全角の空白は含めない(デフォルト)
- TRUE
- 全角の空白を含めて削除
- 戻り値
- 両端の空白と制御文字が取り除かれた文字列
制御文字
コンピューターで文字データを扱うとき改行などを制御する特別な文字で、画面や印刷には表示されません。
以下の表は制御文字の一覧で、TRIM関数では0x7FのDEL以外の制御文字を取り除くことができます。
| コード | キャレット |
略号 | 名称 | |
|---|---|---|---|---|
| 10進数 | 16進数 | |||
| 0 | 0x00 | ^@ | NUL | 空文字 Null |
| 1 | 0x01 | ^A | SOH | ヘッダー開始 Start of Heading |
| 2 | 0x02 | ^B | STX | テキスト開始 Start of Text |
| 3 | 0x03 | ^C | ETX | テキスト終了 End of Text |
| 4 | 0x04 | ^D | EOT | 転送終了 End of Transmission |
| 5 | 0x05 | ^E | ENQ | 照会 Enquiry |
| 6 | 0x06 | ^F | ACK | 受信OK Acknowledge |
| 7 | 0x07 | ^G | BEL | 警告(ベル) Bell |
| 8 | 0x08 | ^H | BS | 後退 Backspace |
| 9 | 0x09 | ^I | HT | タブ Horizontal Tabulation |
| 10 | 0x0A | ^J | LF | 改行 Line Feed |
| 11 | 0x0B | ^K | VT | 垂直タブ Vertical Tabulation |
| 12 | 0x0C | ^L | FF | 改ページ Form Feed |
| 13 | 0x0D | ^M | CR | 復帰 Carriage Return |
| 14 | 0x0E | ^N | SO | シフトアウト Shift Out |
| 15 | 0x0F | ^O | SI | シフトイン Shift In |
| 16 | 0x10 | ^P | DLE | データリンクエスケープ Data Link Escape |
| 17 | 0x11 | ^Q | DC1 | 装置制御1 Device Control 1 |
| 18 | 0x12 | ^R | DC2 | 装置制御2 Device Control 2 |
| 19 | 0x13 | ^S | DC3 | 装置制御3 Device Control 3 |
| 20 | 0x14 | ^T | DC4 | 装置制御4 Device Control 4 |
| 21 | 0x15 | ^U | NAK | 受信失敗 Negative Acknowledge |
| 22 | 0x16 | ^V | SYN | 同期 Synchronous Idle |
| 23 | 0x17 | ^W | ETB | 転送ブロック終了 End of Transmission Block |
| 24 | 0x18 | ^X | CAN | キャンセル Cancel |
| 25 | 0x19 | ^Y | EM | メディア終了 End of Medium |
| 26 | 0x1A | ^Z | SUB | 置換 Substitute Character |
| 27 | 0x1B | ^[ | ESC | エスケープ Escape |
| 28 | 0x1C | ^\ | FS | フォーム区切 File Separator |
| 29 | 0x1D | ^] | GS | グループ区切 Group Separator |
| 30 | 0x1E | ^^ | RS | レコード区切 Record Separator |
| 31 | 0x1F | ^_ | US | ユニット区切 Unit Separator |
| 127 | 0x7F | ^? | DEL | 削除 Delete |
タブ(0x09)と改行(0x0D0x0A)はUWSCで特殊文字として用意されているので、それぞれ<#TAB>、<#CR>で書き換えることができます。
制御文字は直接文字として入力することはできませんが、CHR関数に10進数の値を指定することで制御文字に一致させることができます。
使い方
両端の制御文字を取り除く
stringの両端のタブ(制御文字)を取り除きます。
- 結果
制御文字が連続している場合は、連続するすべての制御文字が取り除かれます。
- 結果
種類の違う制御文字が連続している場合でも、すべて取り除かれます。
- 結果
取り除かれるのは先頭もしくは末尾から連続する制御文字のため、文中の制御文字を取り除くことはできません。以下の場合両端の<#TAB>は削除されますが、文中の<#CR>は削除されません。
- 結果
一部の制御文字のみ取り除く
CHR関数とPOS関数を組み合わせて制御文字の位置を取得することで、一部の制御文字のみを取り除くことができます。
以下は0x09であるタブの位置を取得するプログラムです。stringの中でタブが最初に見つかった位置が1文字目なので1が返ります。
- 結果
stringから連続する左側のタブのみ取り除くには以下のように記述します。1文字目がタブならstringに2文字目以降を代入を繰り返すことで左側のタブを取り除いています。
- 結果
右側のタブを取り除くにはPOS関数の第三引数に-1を指定し、後ろからサーチします。左側のタブはそのまま残ります。[HT]がタブを表しています。
- 結果
文中の制御文字を取り除く
両端だけでなく文字列全体から特定の制御文字を取り除きたい場合は、CHR関数とREPLACE関数 (スクリプト関数)の組み合わせで置換することができます。以下はstringからCR、LFの続く制御文字を取り除きます。CRLFはWindowsでよく使われる改行を意味する制御文字です。
- 結果
CRだけ取り除く場合は、以下のように記述します。
- 結果
LFだけ取り除く場合は、以下のように記述します。
- 結果
全角スペース
第二引数にTrueを指定すると両端の全角スペースを取り除くことができます。
- 結果
制御文字
以下のプログラムはTRIM関数で制御文字を取り除くプログラムです。UWSC Debuggerでは制御文字の入力ができないため、サクラエディタで編集して実行しています。
実行時は制御文字を直接入力してテストしていますが、制御文字は通常見えなく区別もつかないため可視化しています。[ ]で囲まれたアルファベットが制御文字を表しています。以下のプログラムは制御文字を直接入力しているわけではないため、実行しても制御文字は取り除くことはできません。
TRIM関数を実行する前の文字数と実行した後の文字数を比較し、変化があれば制御文字を取り除けたと判定しTrueを、取り除けなければFalseと出力しています。
以下の結果からわかるように0x00〜0x1Fの範囲の制御文字はTRIM関数で取り除くことができますが、0x7Fの削除(DEL)のみは取り除くことができません。
- 結果
プログラム実行例
システムの起動時間を取得
システムの起動時間をyyyy年m月d日 h:n:sの形式で取得します。
