サーチ…
前書き
進行中のABLには、 CHARACTER
とLONGCHAR
として定義された2種類の文字列があります。長さが32Kを超えるファイルはLONGCHAR
です。ほとんどの文字列は、大文字と小文字を区別しない方法で指定しない限りありません
備考
覚えておいてください - すべてのポジションはポジション1から始まります!
文字列の定義、検査、表示
一般に、本当に必要な場合を除いて、すべての変数とパラメータをNO-UNDO
として定義する必要があります。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "HELLO".
DISPLAY cString.
文字列の連結
+
演算子を使用すると、2つ以上の文字列を簡単に連結できます。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "HELLO".
cString = cString + " " + "GOODBYE".
DISPLAY cString FORMAT "X(20)".
文字列操作
文字列の操作に便利な組み込み関数がいくつかあります。文字の位置を扱うすべての関数は、最初の文字としてインデックス1で始まり、多くの言語では一般的である0ではありません。
STRING - 任意の値を文字列に変換します。
この例では、整数2000を文字列 "2000"に変換します。
DEFINE VARIABLE i AS INTEGER NO-UNDO.
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
i = 2000.
c = STRING(i).
DISPLAY c.
CHRとASC - 1文字をasciiとの間で変換します。
CHR(整数)
ASCIIコード整数の文字表現を返します。
ASC(文字)
文字のASCII整数値を返します。
DEFINE VARIABLE ix AS INTEGER NO-UNDO.
DEFINE VARIABLE letter AS CHARACTER NO-UNDO FORMAT "X(1)" EXTENT 26.
DO ix = 1 TO 26:
letter[ix] = CHR((ASC("A")) - 1 + ix).
END.
DISPLAY SKIP(1) letter WITH 2 COLUMNS NO-LABELS
TITLE "T H E A L P H A B E T".
LENGTH - 文字列の長さを返す
LENGTH(文字列)。 //文字列の長さの整数を返します。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "HELLO".
MESSAGE "The string " cString " is " LENGTH(cString) " characters long" VIEW-AS ALERT-BOX.
SUBSTRING - 文字列の一部を返すか、割り当てます。
- SUBSTRING(文字列、開始位置、長さ)。
位置 "開始位置"から "文字列"の "長さ"文字を返します。
- SUBSTRING(文字列、開始位置)。
"start-position"の位置から始まる残りの "string"を返します。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "ABCDEFGH".
DISPLAY SUBSTRING(cString, 4, 2). //Displays "DE"
DISPLAY SUBSTRING(cString, 4). //Displays "DEFGH"
サブストリングは、文字列の一部を上書きするためにも使用できます。同じ構文を使用しますが、代わりにその部分文字列を割り当てます。
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "ABCDEFGH".
SUBSTRING(cString, 4, 2) = "XY". //Replaces position 4 and 5 with "XY"
DISPLAY cString.
OVERLAY
という類似の関数もありますOVERLAY
ドキュメントのこの例は、 OVERLAY
とSUBSTRING
違いを扱っています。
/* This procedure illustrates the differences between the SUBSTRING and
OVERLAY statements. */
DEFINE VARIABLE cOriginal AS CHARACTER NO-UNDO INITIAL "OpenEdge".
DEFINE VARIABLE cSubstring AS CHARACTER NO-UNDO.
DEFINE VARIABLE cOverlay AS CHARACTER NO-UNDO.
DEFINE VARIABLE cResults AS CHARACTER NO-UNDO.
/* Default behavior without optional LENGTH. */
ASSIGN
cSubstring = cOriginal
SUBSTRING(cSubstring,2) = "***"
cOverlay = cOriginal
OVERLAY(cOverlay,2) = "***"
cResults = "target = ~"OpenEdge~". ~n~n"
+ "If you do not supply a length, SUBSTRING and OVERLAY default as follows:
~n~n" + "SUBSTRING(target,2) = ~"***~" yields: " + cSubstring + ". ~n"
+ "OVERLAY(target,2) = ~"***~" yields: " + cOverlay + ".".
/* Behavior with zero LENGTH. */
ASSIGN
cSubstring = cOriginal
SUBSTRING(cSubstring,2,0) = "***"
cOverlay = cOriginal
OVERLAY(cOverlay,2,0) = "***"
cResults = cResults + "~n~n"
+ "For a zero length, SUBSTRING and OVERLAY behave as follows: ~n~n"
+ "SUBSTRING(target,2,0) = ~"***~" yields: " + cSubstring + ". ~n"
+ "OVERLAY(target,2,0) = ~"***~" yields: " + cOverlay + ".".
/* Behavior with LENGTH < replacement. */
ASSIGN
cSubstring = cOriginal
SUBSTRING(cSubstring,2,1) = "***"
cOverlay = cOriginal
OVERLAY(cOverlay,2,1) = "***"
cResults = cResults + "~n~n"
+ "For a length shorter than the replacement, SUBSTRING and OVERLAY behave
as follows: ~n~n" + "SUBSTRING(target,2,1) = ~"***~" yields: "
+ cSubstring + ". ~n" + "OVERLAY(target,2,1) = ~"***~" yields: "
+ cOverlay + ".".
/* Behavior with LENGTH = replacement. */
ASSIGN
cSubstring = cOriginal
SUBSTRING(cSubstring,2,3) = "***"
cOverlay = cOriginal
OVERLAY(cOverlay,2,3) = "***"
cResults = cResults + "~n~n"
+ "For a length equal to the replacement, SUBSTRING and OVERLAY behave as
follows: ~n~n" + "SUBSTRING(target,2,3) = ~"***~" yields: "
+ cSubstring + ". ~n" + "OVERLAY(target,2,3) = ~"***~" yields: "
+ cOverlay + ".".
/* Behavior with LENGTH > replacement. */
ASSIGN
cSubstring = cOriginal
SUBSTRING(cSubstring,2,6) = "***"
cOverlay = cOriginal
OVERLAY(cOverlay,2,6) = "***"
cResults = cResults + "~n~n"
+ "For a length greater than the replacement, SUBSTRING and OVERLAY behave
as follows: ~n~n" + "SUBSTRING(target,2,6) = ~"***~" yields: "
+ cSubstring + ". ~n" + "OVERLAY(target,2,6) = ~"***~" yields: "
+ cOverlay + ".".
MESSAGE cResults VIEW-AS ALERT-BOX.
INDEX - 文字列内の文字列の位置を返します。
R-INDEX
は同じことになりますが、右に向かって検索します。
INDEX(ソース、ターゲット)
ソース内(左から右)でターゲットを検索し、その位置を返します。見つからない場合は0を返します。
INDEX(ソース、ターゲット、開始位置)。
上記と同じですが、開始位置で検索を開始します
DEFINE VARIABLE str AS CHARACTER NO-UNDO.
str = "ABCDEFGH".
DISPLAY INDEX(str, "cd") INDEX(str, "cd", 4). //Will display 3 and 0
REPLACE - 文字列内の文字列を置き換えます。
REPLACE(文字列、from-string、to-string)
from-stringをto-stringに置き換えます。 From-stringとTo-stringは同じ長さである必要はありません。to-stringは文字を削除するために何もできません( "")。
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
c = "ELLO".
DISPLAY REPLACE(c, "E", "HE"). // Displays "HELLO"
c = "ABABABA".
DISPLAY REPLACE(c, "B", ""). // Remove all Bs
TRIM - 先頭と末尾の空白(またはその他の文字)を削除します。
これは、インダータをクリーンアップするときに便利です。
TRIM(文字列)
先頭と末尾のスペース、タブ、改行、改行をすべて削除します。
TRIM(文字列、文字)。
先頭と末尾の "文字"をすべて削除します。
LEFT-TRIM
とRIGHT-TRIM
は同じことをしますが、先頭または末尾のみを行います。
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
c = "__HELLO_WORLD_____".
DISPLAY TRIM(c, "_").
/*Displays HELLO_WORLD without all the leading and
trailing underscores but leaves the one in the middle.
REPLACE would have removed that one as well */
SUBSTITUTE - 文字列中のパラメータを置換します。
SUBSTITUTE is a limited function for replacing up to nine preformatted parameters in a string.
SUBSTITUTE(文字列、param1、param2、...、param9)。
パラメーターは、 &1
&9
形式でなければなりません。
文字列にアンパサンドを使用する場合(パラメータとして使用しない場合)、別のアンパサンドで&&
エスケープします。
DEFINE VARIABLE str AS CHARACTER NO-UNDO.
str = "&1 made &2 goals in &3 games playing for &4".
MESSAGE SUBSTITUTE(str, "Zlatan Ibrahimovic", 113, 122, "Paris Saint-Germain") VIEW-AS ALERT-BOX.
MESSAGE SUBSTITUTE(str, "Mats Sundin", 555, 1305, "Toronto Maple Leafs") VIEW-AS ALERT-BOX.
パラメータは文字列に複数回現れることがあり、すべてが置換されます:
MESSAGE SUBSTITUTE("&1 &2 or not &1 &2", "To", "Be") VIEW-AS ALERT-BOX.
CASE-SENSITIVE文字列
Progress ABLのすべての文字列は、特に指定しない限り大文字と小文字が区別されます。
この例では、文字列が同一であることを示すメッセージボックスが表示されます。
DEFINE VARIABLE str1 AS CHARACTER NO-UNDO.
DEFINE VARIABLE str2 AS CHARACTER NO-UNDO.
str1 = "abc".
str2 = "ABC".
IF str1 = str2 THEN
MESSAGE "The strings are identical" VIEW-AS ALERT-BOX.
文字列の大文字小文字を区別するように宣言するには、 CASE-SENSITIVE
属性
DEFINE VARIABLE str1 AS CHARACTER NO-UNDO CASE-SENSITIVE.
DEFINE VARIABLE str2 AS CHARACTER NO-UNDO.
str1 = "abc".
str2 = "ABC".
IF str1 = str2 THEN
MESSAGE "The strings are identical" VIEW-AS ALERT-BOX.
ELSE
MESSAGE "There's a difference" VIEW-AS ALERT-BOX.
(この場合は、文字列の1つで十分です)。
始まりと一致
BEGINS - ある文字列が別の文字列で始まる場合はTRUEを返します。
string1 BEGINS string2
string1 BEGINSがstring2と等しい(または等しい)場合、これはtrueを返します。それ以外の場合はfalseを返します。文字列2が空( "")の場合、常にtrueを返します。
BEGINSは、名前のような何かの先頭を検索するクエリで非常に便利です。しかし、基本的には文字列を扱う関数です。
DEFINE VARIABLE str AS CHARACTER NO-UNDO.
DEFINE VARIABLE beg AS CHARACTER NO-UNDO.
str = "HELLO".
beg = "HELLO".
DISPLAY str BEGINS beg. // yes
str = "HELLO".
beg = "H".
DISPLAY str BEGINS beg. // yes
str = "HELLO".
beg = "".
DISPLAY str BEGINS beg. // yes
str = "HELLO".
beg = "HELLO WORLD".
DISPLAY str BEGINS beg. // no
特定のワイルドカード基準が文字列で満たされている場合、 MATCHESは真を返します。
string1 MATCHES式
string1がワイルドカード式に一致する場合はtrueを返します。
*(アスタリスク)= 0〜n文字(基本的に任意の長さの任意の文字列)
。 (ピリオド)=任意の文字のワイルドカード(nullを除く)
DEFINE VARIABLE str AS CHARACTER NO-UNDO.
DEFINE VARIABLE beg AS CHARACTER NO-UNDO.
str = "HELLO".
beg = "HELLO".
DISPLAY str MATCHES beg. // yes
str = "HELLO".
beg = "H*".
DISPLAY str MATCHES beg. // yes
str = "HELLO".
beg = "*O".
DISPLAY str MATCHES beg. // yes
str = "HELLO WORLD".
beg = "HELLO.WORLD".
DISPLAY str MATCHES beg. // yes
str = "HELLO WORLD".
beg = "*WORL..".
DISPLAY str MATCHES beg. // no
str = "*HELLO WORLD".
beg = "WOR*LD".
DISPLAY str MATCHES beg. // no
大文字と小文字の変換
前述のように、文字列は通常大文字小文字を区別しませんが、文字列の比較のみを考慮します。ケースを変更するための関数が組み込まれています。
CAPS(文字列)
大文字にする
LC(文字列)
文字列を小文字にする
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
DEFINE VARIABLE d AS CHARACTER NO-UNDO.
c = "Hello".
d = "World".
DISPLAY CAPS(c) LC(d). // HELLO world
文字列は通常大文字と小文字を区別しません
DEFINE VARIABLE c AS CHARACTER NO-UNDO.
DEFINE VARIABLE d AS CHARACTER NO-UNDO.
c = "hello".
d = "hello".
DISPLAY CAPS(c) = LC(d). // yes
CASE-SENSITIVE
として指定されていない限り
DEFINE VARIABLE c AS CHARACTER NO-UNDO CASE-SENSITIVE.
DEFINE VARIABLE d AS CHARACTER NO-UNDO.
c = "hello".
d = "hello".
DISPLAY CAPS(c) = LC(d). // no
リスト
進捗状況4GLでコンマ(または他の文字)で区切られたリストを扱うための多くの関数とメソッドがあります。
NUM-ENTRIESリスト内のエントリの数を返します。オプションで区切り文字を指定できます。カンマはデフォルトです
NUM-ENTRIES(文字列[、区切り文字])
コンマを使用すると、デフォルトの区切り文字:
DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
cList = "Goodbye,cruel,world!".
DISPLAY NUM-ENTRIES(cList). //3
別の区切り記号semilcolonを使う:
DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
cList = "Goodbye;cruel;world!".
DISPLAY NUM-ENTRIES(cList, ";"). //3
ENTRY - 関数 - リスト内の指定されたエントリを返す
通常の開始位置は1であり、0ではありません!
ENTRY(エントリ、リスト[、デリミタ])。
DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
cList = "Goodbye,cruel,world!".
DISPLAY ENTRY(2, cList). //cruel
ENTRY - メソッド - リスト内の指定されたエントリの値を代入する
ENTRY(エントリ、リスト[、デリミタ])=値
DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
cList = "Goodbye,cruel,world!".
ENTRY(1, cList) = "Hello".
ENTRY(2, cList) = "nice".
MESSAGE REPLACE(cList, ",", " ") VIEW-AS ALERT-BOX. //Hello nice world!
ルックアップ - 特定のエントリのリストを確認します。エントリを返します。
文字列がリストにない場合、lookupは0を返します
LOOKUP(文字列、リスト[、区切り文字])
DEFINE VARIABLE cList AS CHARACTER NO-UNDO.
cList = "Hello,nice,world!".
MESSAGE LOOKUP("nice", cList) VIEW-AS ALERT-BOX. //2
MESSAGE LOOKUP("cruel", cList) VIEW-AS ALERT-BOX. //0
特殊文字(およびエスケープ)
進捗状況4GLでは、特殊文字を書く通常の方法は、チルダ文字(〜)で始めることです。
これらはデフォルトの特殊文字です
シーケンス | 次のように解釈されます。 | コメント |
---|---|---|
〜 " | " | "string"を使用して定義された文字列の内側に書き込むために使用されます。 |
〜 ' | ' | 'string'を使用して定義された文字列の内側に書き込むために使用されます。 |
~~ | 〜 | たとえば、シーケンスを印刷し、その解釈方法が印刷されないようにする場合などです。 |
〜\ | \ | |
〜{ | { | {はプリプロセッサで使用され、時にはエスケープが必要です。 |
〜nnn | 1文字 | nnnは文字のアスキー値を表す8進数です。 |
〜t | タブ | |
〜n | 改行/改行 | |
〜r | キャリッジリターン | |
〜E | エスケープ | |
〜b | バックスペース | |
〜f | フォームフィード |
ティルダをすべて表示したい場合は、それをエスケープする必要があります。
MESSAGE "A single tilde: ~~" VIEW-AS ALERT-BOX.
MESSAGE "At sign: ~100" SKIP
"Tab~tseparated~twords!" SKIP
"A linefeed:~n"
"Escaping a quote sign: ~"This is a quote!~"" SKIP VIEW-AS ALERT-BOX.