Suche…


Einführung

In Progress ABL gibt es zwei Arten von Zeichenfolgen, die als CHARACTER und die als LONGCHAR definiert LONGCHAR . Eine Datei mit einer Länge von mehr als LONGCHAR ist ein LONGCHAR . Die meisten Zeichenfolgen sind, sofern nicht anders angegeben, unabhängig von der Groß- und Kleinschreibung.

Bemerkungen

Denken Sie daran - alle Positionen beginnen mit der Position 1!

Eine Zeichenfolge definieren, bewerten und anzeigen

Generell sollten Sie immer alle Variablen und Parameter als NO-UNDO sofern Sie NO-UNDO nicht wirklich NO-UNDO .

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

DISPLAY cString.

Zeichenketten verketten

Mit dem Operator + können Sie zwei oder mehr Strings problemlos verketten.

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

cString = cString + " " + "GOODBYE".

DISPLAY cString FORMAT "X(20)".

String-Manipulation

Es gibt einige nützliche Funktionen für die Arbeit mit String. Alle Funktionen, die mit der Position von Zeichen arbeiten, beginnen mit Index 1 als erstem Zeichen und nicht mit 0, wie in vielen Sprachen üblich.

STRING - wandelt einen beliebigen Wert in einen String um

In diesem Beispiel wird die Ganzzahl 2000 in die Zeichenfolge "2000" konvertiert.

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

i = 2000.

c = STRING(i).

DISPLAY c.

CHR und ASC - konvertiert einzelne Zeichen von und nach ASCII.

CHR (ganze Zahl)

Gibt die Zeichendarstellung für den ASCII-Code Integer zurück

ASC (Zeichen)

Gibt den ganzzahligen ASCII-Wert für das Zeichen zurück

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 - gibt die Länge eines Strings zurück

LÄNGE (String). // Gibt eine Ganzzahl mit der Länge der Zeichenfolge zurück.

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "HELLO".

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

SUBSTRING - gibt einen Teil einer Zeichenfolge zurück oder weist einen Teil zu

  • SUBSTRING (String, Startposition, Länge).

Gibt "length" Zeichen aus "string" zurück, beginnend an Position "Startposition".

  • SUBSTRING (String, Startposition).

Gibt den Rest von "string" zurück, beginnend an Position "Startposition"

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

cString = "ABCDEFGH".

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

Teilzeichenfolge kann auch verwendet werden, um einen Teil einer Zeichenfolge zu überschreiben. Verwenden Sie dieselbe Syntax, weisen Sie stattdessen diesen Teilstring zu:

DEFINE VARIABLE cString AS CHARACTER   NO-UNDO.

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

DISPLAY cString.  

Es gibt auch eine ähnliche Funktion namens OVERLAY Dieses Beispiel aus der Fortschrittsdokumentation behandelt die Unterschiede zwischen OVERLAY und 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 - gibt die Position eines Strings in einem String zurück.

R-INDEX sucht dasselbe, sucht aber von rechts nach links.

INDEX (Quelle, Ziel)

Suchziel innerhalb der Quelle (von links nach rechts) und seine Position zurückgeben. Wenn es fehlt, geben Sie 0 zurück.

INDEX (Quelle, Ziel, Startposition).

Wie oben, aber Suche an der Startposition beginnen

DEFINE VARIABLE str AS CHARACTER   NO-UNDO.

str = "ABCDEFGH".

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

REPLACE - ersetzt einen String innerhalb eines Strings.

REPLACE (Zeichenfolge, Von-Zeichenfolge bis Zeichenfolge)

Ersetzt from-string durch to-string in string. From-string und to-string müssen nicht die gleiche Länge haben, to-string kann auch nichts ("") sein, um ein Zeichen zu entfernen.

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 - Entfernt führende und nachgestellte Leerzeichen (oder andere Zeichen).

Dies kann beim Aufräumen von Daten hilfreich sein.

TRIM (String)

Entfernt alle führenden und nachgestellten Leerzeichen, Tabulatoren, Zeilenvorschub und Wagenrücklauf.

TRIM (Zeichenfolge, Zeichen).

Entfernt alle führenden und nachgestellten "Zeichen".

LEFT-TRIM und RIGHT-TRIM dasselbe, führen aber nur nach vorne oder nach hinten.

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 - Ersetzt Parameter in einer Zeichenfolge.

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

SUBSTITUTE (Zeichenfolge, Parameter1, Parameter2, ..., Parameter9).

Die Parameter müssen im Format &1 bis &9 .

Wenn Sie ein kaufmännisches Und in der Zeichenfolge verwenden möchten (und nicht als Parameter verwenden), müssen Sie es mit einem anderen kaufmännischen Und-Zeichen ersetzen: && .

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.

Ein Parameter kann in einer Zeichenfolge mehr als einmal vorkommen. Alle werden ersetzt:

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

CASE-SENSITIVE Zeichenfolgen

Bei allen Zeichenfolgen in Progress ABL wird zwischen Groß- und Kleinschreibung unterschieden, sofern nicht anders angegeben.

In diesem Beispiel wird ein Meldungsfeld mit der Meldung angezeigt, dass die Zeichenfolgen identisch sind.

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.

Um eine Groß- und Kleinschreibung zu definieren, fügen Sie einfach das Attribut 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.

(Es reicht, dass eine der Saiten es in diesem Fall hat).

BEGINNT und Streichhölzer

BEGINS - Gibt TRUE zurück, wenn eine Zeichenfolge mit einer anderen Zeichenfolge beginnt .

Zeichenfolge1 BEGINNT Zeichenfolge2

Wenn string1 mit (oder gleich) string2 BEGINNT, wird true zurückgegeben. Sonst wird es false zurück. Wenn Zeichenfolge zwei leer ist (""), wird immer "true" zurückgegeben.

BEGINS ist sehr nützlich bei Abfragen, bei denen Sie den Anfang von etwas suchen möchten, beispielsweise einen Namen. Aber es ist im Grunde eine Funktion auf Strings arbeiten.

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 gibt true zurück, wenn bestimmte Platzhalterkriterien in einer Zeichenfolge erfüllt sind.

Zeichenfolge1 SPIELE Ausdruck

Gibt true zurück, wenn string1 das Wildcard-Ausdruck entspricht:

* (Sternchen) = 0 bis n Zeichen (grundsätzlich jede Zeichenfolge beliebiger Länge)

. (Periode) = Platzhalter für ein beliebiges Zeichen (außer 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

Konvertierung von Groß- und Kleinschreibung

Wie zuvor erwähnt, sind Zeichenfolgen normalerweise nicht auf Groß- und Kleinschreibung anwendbar, dies betrifft jedoch nur den Vergleich von Zeichenketten. Es gibt eingebaute Funktionen zum Ändern der Groß- und Kleinschreibung.

CAPS (String)

Macht die Großschreibung der Zeichenkette

LC (String)

Macht String in Kleinbuchstaben

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

Denken Sie daran, dass Strings normalerweise nicht zwischen Groß- und Kleinschreibung unterscheiden

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

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

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

Sofern nicht spezifisch 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

Listen

Es gibt eine Reihe von Funktionen und Methoden zum Arbeiten mit durch Kommas (oder andere Zeichen) getrennten Listen in Progress 4GL.

NUM-ENTRIES Gibt die Anzahl der Einträge in einer Liste zurück. Sie können optional Trennzeichen angeben, Komma ist Standard

NUM-ENTRIES (String [, Trennzeichen])

Verwenden Sie das Komma als Standardbegrenzung:

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye,cruel,world!".

DISPLAY NUM-ENTRIES(cList). //3

Mit einem anderen Trennzeichen, Semilcolon:

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye;cruel;world!".

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

ENTRY - Funktion - gibt einen angegebenen Eintrag in einer Liste zurück

Die Startposition ist wie üblich 1, nicht 0!

ENTRY (Eintrag, Liste [, Trennzeichen]).

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye,cruel,world!".

DISPLAY ENTRY(2, cList). //cruel

ENTRY - Methode - Zuweisen des Wertes eines angegebenen Eintrags in einer Liste

ENTRY (Eintrag, Liste [, Trennzeichen]) = Wert

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 - Liste für einen bestimmten Eintrag überprüfen. Gibt den Eintrag zurück.

Wenn die Zeichenfolge nicht in der Listensuche enthalten ist, wird 0 zurückgegeben

LOOKUP (Zeichenfolge, Liste [, Trennzeichen])

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

Sonderzeichen (und Escaping)

In Progress 4GL besteht der normale Weg, ein Sonderzeichen zu schreiben, darin, ein Tilde-Zeichen (~) voranzustellen.

Dies sind die Standard-Sonderzeichen

Sequenz Interpretiert als Kommentar
~ " " Wird verwendet, um "in mit" string "definierte Zeichenfolgen zu schreiben.
~ ' ' Wird verwendet, um 'in Strings zu schreiben, die mit' string 'definiert wurden.
~~ ~ Zum Beispiel, wenn Sie die Sequenz drucken möchten und nicht, wie sie interpretiert wird.
~ \ \
~ { { {wird in Präprozessoren verwendet, und manchmal ist eine Flucht erforderlich.
~ nnn Ein einzelner Charakter nnn ist eine Oktalzahl, die den ASCII-Wert des Zeichens darstellt.
~ t Tab
~ n Neuer Zeilen- / Zeilenvorschub
~ r Wagenrücklauf
~ E Flucht
~ b Rücktaste
~ f Formularvorschub

Wenn Sie Tilde überhaupt anzeigen möchten, muss diese maskiert werden!

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
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow