Zoeken…


Invoering

In uitvoering ABL zijn er twee soorten strings, die zijn gedefinieerd als CHARACTER en die zijn gedefinieerd als LONGCHAR . Een bestand dat groter is dan 32K is een LONGCHAR . De meeste tekenreeksen zijn, tenzij anders vermeld, hoofdletterongevoelig.

Opmerkingen

Onthoud - alle posities beginnen met positie 1!

Een string definiëren, beoordelen en weergeven

Over het algemeen moet u altijd alle variabelen en parameters definiëren als NO-UNDO tenzij u dit echt nodig hebt.

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

DISPLAY cString.

Tekenreeksen samenvoegen

Met de operator + kunt u eenvoudig twee of meer strings samenvoegen.

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

cString = cString + " " + "GOODBYE".

DISPLAY cString FORMAT "X(20)".

String manipulatie

Er zijn een aantal handige ingebouwde functies voor het werken met tekenreeksen. Alle functies die werken met de positie van tekens beginnen met index 1 als het eerste teken, niet 0 zoals in veel talen gebruikelijk is.

STRING - converteert elke waarde naar een string

Dit voorbeeld converteert het gehele getal 2000 naar de tekenreeks "2000".

DEFINE VARIABLE i AS INTEGER     NO-UNDO.
DEFINE VARIABLE c AS CHARACTER   NO-UNDO.

i = 2000.

c = STRING(i).

DISPLAY c.

CHR en ASC - converteert enkele tekens van en naar ASCII.

CHR (integer)

Retourneert de karakterrepresentatie voor ascii code integer

ASC (teken)

Retourneert de ascii-integerwaarde voor het teken

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".

LENGTE - geeft de lengte van een string terug

LENGTE (string). // Retourneert een geheel getal met de lengte van de tekenreeks.

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

MESSAGE "The string " cString " is " LENGTH(cString) " characters long" VIEW-AS ALERT-BOX. 

SUBSTRING - retourneert of wijst een deel van een string toe

  • SUBSTRING (string, startpositie, lengte).

Retourneert "lengte" -tekens uit "string" beginnend op positie "startpositie".

  • SUBSTRING (string, startpositie).

Retourneert de rest van "string", beginnend bij positie "startpositie"

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "ABCDEFGH".

DISPLAY SUBSTRING(cString, 4, 2). //Displays "DE" 
DISPLAY SUBSTRING(cString, 4). //Displays "DEFGH"

Substring kan ook worden gebruikt om een deel van een string te overschrijven. Gebruik dezelfde syntaxis maar wijs in plaats daarvan die substring toe:

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "ABCDEFGH".
 
SUBSTRING(cString, 4, 2) = "XY". //Replaces position 4 and 5 with "XY" 

DISPLAY cString.  

Er is ook een vergelijkbare functie genaamd OVERLAY Dit voorbeeld uit de Progress-documentatie behandelt de verschillen tussen OVERLAY en 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 - geeft de positie van een string in een string terug.

R-INDEX zal hetzelfde doen, maar van rechts naar links zoeken.

INDEX (bron, doel)

Zoek doel in bron (van links naar rechts) en geef zijn positie terug. Als het ontbreekt, geef dan 0 terug.

INDEX (bron, doel, startpositie).

Hetzelfde als hierboven, maar begin met zoeken op startpositie

DEFINE VARIABLE str AS CHARACTER   NO-UNDO.

str = "ABCDEFGH".

DISPLAY INDEX(str, "cd") INDEX(str, "cd", 4). //Will display 3 and 0

VERVANG - vervangt een string binnen een string.

REPLACE (string, van-string, naar-string)

Vervangt van-string naar naar-string in string. From-string en to-string hoeven niet dezelfde lengte te hebben, to-string kan ook niets ("") zijn om een karakter te verwijderen.

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 - verwijdert voorloop- en volgspaties (of andere tekens).

Dit kan handig zijn bij het opschonen van indata.

TRIM (string)

Verwijdert alle voorloop- en volgspaties, tabbladen, lijnfeeds, regelterugloop.

TRIM (tekenreeks, teken).

Verwijdert alle voorloop- en volg "karakters".

LEFT-TRIM en RIGHT-TRIM hetzelfde, maar alleen leiden of volgen.

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

VERVANGEN - vervangt parameters in een string.

SUBSTITUTE is a limited function for replacing up to nine preformatted parameters in a string.

VERVANGEN (string, param1, param2, ..., param9).

De parameters moeten de notatie &1 tot &9 .

Als u een en-teken in de tekenreeks wilt gebruiken (en dit niet als parameter wilt gebruiken), kunt u dit ontsnappen met een ander en-teken: && .

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.

Een parameter kan meerdere keren in een string voorkomen, alle worden vervangen:

MESSAGE SUBSTITUTE("&1 &2 or not &1 &2", "To", "Be") VIEW-AS ALERT-BOX.

CASE-SENSITIVE-tekenreeksen

Alle strings in Progress ABL zijn hoofdlettergevoelig, tenzij anders aangegeven.

In dit voorbeeld wordt een berichtvenster weergegeven waarin staat dat de tekenreeksen identiek zijn.

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.

Om een tekenreeks hoofdlettergevoelig te verklaren, voegt u gewoon het kenmerk 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.

(Het is voldoende dat een van de tekenreeksen het in dit geval heeft).

BEGINT EN WEDSTRIJDEN

BEGINS - geeft WAAR terug als een string begint met een andere string.

string1 BEGINT string2

Als string1 BEGINSELT met (of gelijk is aan) string2, geeft dit true terug. Anders zal het onwaar terugkeren. Als string twee leeg is (""), zal deze altijd true retourneren.

BEGINS is erg handig in zoekopdrachten waarbij u het begin van iets wilt zoeken, bijvoorbeeld een naam. Maar het is eigenlijk een functie die werkt op strings.

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 retourneert true als aan bepaalde jokertekens in een string wordt voldaan.

string1 MATCHES expressie

Retourneert true als string1 overeenkomt met de jokertekenuitdrukking:

* (asterisk) = 0 tot n tekens (in principe elke string van elke lengte)

. (punt) = jokerteken voor elk teken (behalve 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

Hoofdletters en kleine letters omzetten

Zoals eerder vermeld, zijn tekenreeksen normaal niet hoofdlettergevoelig, maar dat geldt alleen voor vergelijking van tekenreeksen. Er zijn ingebouwde functies voor het veranderen van geval.

CAPS (string)

Hiermee maakt u een tekenreeks in hoofdletters

LC (string)

Hiermee maakt u tekenreeks kleine letters

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

Onthoud dat tekenreeksen normaal niet hoofdlettergevoelig zijn

DEFINE VARIABLE c AS CHARACTER   NO-UNDO.
DEFINE VARIABLE d AS CHARACTER   NO-UNDO.

c = "hello".
d = "hello".

DISPLAY CAPS(c) = LC(d). // yes

Tenzij gespecificeerd als 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

lijsten

Er zijn een aantal functies en methoden voor het werken met door komma's (of andere tekens) gescheiden lijsten in Progress 4GL.

NUM-ENTRIES Retourneert het aantal items in een lijst. U kunt desgewenst scheidingsteken opgeven, komma is standaard

NUM-ENTRIES (string [, scheidingsteken])

Met komma, het standaardscheidingsteken:

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye,cruel,world!".

DISPLAY NUM-ENTRIES(cList). //3

Met een ander scheidingsteken, puntkomma:

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye;cruel;world!".

DISPLAY NUM-ENTRIES(cList, ";"). //3

INGANG - functie - retourneert een opgegeven item in een lijst

Zoals gebruikelijk is de startpositie 1, niet 0!

INGANG (vermelding, lijst [, scheidingsteken]).

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye,cruel,world!".

DISPLAY ENTRY(2, cList). //cruel

TOEGANG - methode - toewijzen van de waarde van een opgegeven item in een lijst

INGANG (invoer, lijst [, scheidingsteken]) = waarde

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!

ZOEKEN - controleer een lijst voor een specifiek item. Retourneert zijn invoer.

Als de string niet in de lijst voorkomt, retourneert lookup 0

ZOEKEN (tekenreeks, lijst [, scheidingsteken])

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

Speciale tekens (en ontsnappen)

In Progress 4GL is de normale manier om een speciaal teken te schrijven het voorafgaan door een tilde-teken (~).

Dit zijn de standaard speciale tekens

Volgorde Geïnterpreteerd als Commentaar
~" " Wordt gebruikt om "binnen strings te schrijven die zijn gedefinieerd met" string ".
~' ' Wordt gebruikt om 'binnen strings te schrijven die zijn gedefinieerd met' string '.
~~ ~ Als u bijvoorbeeld de reeks wilt afdrukken en niet hoe deze wordt geïnterpreteerd.
~ \ \
~ { { {wordt gebruikt in preprocessors en soms is ontsnappen nodig.
~ nnn Een enkel karakter nnn is een octaal getal dat de ascii-waarde van het teken vertegenwoordigt.
~ t tab
~ n Nieuwe lijn / lijn feed
~ r Vervoer terug
~ E Ontsnappen
~ b Backspace
~ f Form feed

Als je tilde helemaal wilt tonen, moet het ontsnapt zijn!

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow