수색…


소개

진행 ABL에는 CHARACTERLONGCHAR 로 정의 된 두 가지 유형의 문자열이 있습니다. 길이가 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.

CHRASC - 하나의 문자를 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 문서의이 예제는 OVERLAYSUBSTRING 의 차이점을 다룹니다.

/* 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-TRIMRIGHT-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.


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow