수색…
소개
진행 ABL에는 CHARACTER
와 LONGCHAR
로 정의 된 두 가지 유형의 문자열이 있습니다. 길이가 32K를 초과하는 파일은 LONGCHAR
입니다. 대부분의 문자열은 대소 문자를 구별하지 않는 한 다른 방법으로 지정하지 않는 한 있습니다.
비고
기억하십시오 - 모든 위치는 1 위!로 시작합니다!
문자열 정의, 표시 및 표시
일반적으로 모든 변수와 매개 변수는 반드시 필요하다면 NO-UNDO
로 정의해야합니다.
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
cString = "HELLO".
DISPLAY cString.
문자열 연결하기
+
연산자를 사용하면 두 개 이상의 문자열을 쉽게 연결할 수 있습니다.
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 - 하나의 문자를 ascii로 또는 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 (문자열, 시작 위치, 길이).
"starting-position"위치에서 시작하여 "string"의 "length"문자를 반환합니다.
- 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
라는 유사한 함수가 있습니다. Progress 문서의이 예제는 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 - 선행 및 후행 공백 (또는 다른 문자)을 제거합니다.
이것은 indata를 정리할 때 유용 할 수 있습니다.
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 문자열
진행률 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.
(이 경우에는 문자열 중 하나에 충분합니다.)
시작과 일치
BEGINS - 한 문자열 이 다른 문자열로 시작 하면 TRUE를 반환합니다.
string1 BEGINS string2
string1이 BEGINS와 string2가 같거나 (또는 같으면) true를 반환합니다. 그렇지 않으면 거짓을 반환합니다. 문자열 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 는 true를 반환합니다.
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 - 함수 - 목록에서 지정된 항목을 반환합니다.
평소 시작 위치는 0이 아닌 1입니다!
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 - 목록에서 특정 항목을 확인하십시오. 항목을 반환합니다.
문자열이 목록에 없으면 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
특수 문자 (및 이스케이프)
Progress 4GL에서 특수 문자를 쓰는 일반적인 방법은 물결표 문자 (~)로 시작하는 것입니다.
이들은 기본 특수 문자입니다.
순서 | 다음과 같이 해석됩니다. | 논평 |
---|---|---|
~ " | " | "string"을 사용하여 정의 된 문자열 내부에 쓰는 데 사용됩니다. |
~ ' | ' | 'string'을 사용하여 정의 된 문자열 내부에 쓰는 데 사용됩니다. |
~~ | ~ ~ | 예를 들어 순서를 인쇄하고 인쇄 방법을 해석하지 않으려는 경우입니다. |
~ \ | \ | |
~ { | { | {는 전처리 기에서 사용되며 때로는 이스케이프 처리가 필요합니다. |
~ nnn | 한 문자 | nnn은 문자의 ascii 값을 나타내는 8 진수입니다. |
~ ~ | 탭 | |
~ 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.