खोज…


परिचय

प्रगति 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 - एससीआई से एकल वर्णों को परिवर्तित करता है।

CHR (पूर्णांक)

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 - एक स्ट्रिंग की लंबाई लौटाता है

लंबाई (स्ट्रिंग)। // स्ट्रिंग की लंबाई के साथ एक पूर्णांक देता है।

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 (स्ट्रिंग, प्रारंभिक स्थिति)।

"स्ट्रिंग" के बाकी हिस्सों को लौटाता है, स्थिति "शुरुआती-स्थिति" पर शुरू होता है

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 और 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

उत्तर - स्ट्रिंग के भीतर एक स्ट्रिंग की जगह।

रिपोर्ट (स्ट्रिंग, स्ट्रिंग से, स्ट्रिंग)

स्ट्रिंग में स्ट्रिंग के साथ स्ट्रिंग से प्रतिस्थापित करता है। एक स्ट्रिंग की लंबाई से स्ट्रिंग और टू-स्ट्रिंग की आवश्यकता नहीं है, एक चरित्र को हटाने के लिए स्ट्रिंग भी कुछ नहीं ("") हो सकता है।

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 (स्ट्रिंग, परम 1, परम 2, ..., परम 9)।

पैरामीटर प्रारूप में &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.

मामला-संवेदनशील तार

प्रगति एबीएल के सभी तार संवेदनशील हैं, जब तक कि अन्यथा निर्दिष्ट न हो।

यह उदाहरण एक संदेश बॉक्स प्रदर्शित करेगा जिसमें कहा गया है कि तार समान हैं।

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 और सामग्री

BEGINS - एक स्ट्रिंग दूसरे स्ट्रिंग से शुरू होने पर TRUE लौटाती है।

string1 BEGINS string2

अगर string1 BEGINS के साथ (या बराबर है) string2 यह सच वापस आ जाएगा। नहीं तो झूठे लौटेंगे। यदि स्ट्रिंग दो खाली है ("") तो यह हमेशा सही होगा।

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 वाइल्डकार्ड अभिव्यक्ति से मेल खाता है:

* (तारांकन) = 0 से n अक्षर (मूल रूप से किसी भी लम्बाई के तार)

। (अवधि) = वाइल्डकार्ड किसी भी वर्ण के लिए (शून्य को छोड़कर)

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 (स्ट्रिंग)

स्ट्रिंग अपर केस बनाता है

नियंत्रण रेखा (स्ट्रिंग)

स्ट्रिंग लोअर केस बनाता है

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

एक और सीमांकक का उपयोग, अर्धविराम:

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye;cruel;world!".

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

ENTRY - फ़ंक्शन - एक सूची में एक निर्दिष्ट प्रविष्टि देता है

हमेशा की तरह शुरुआती स्थिति 1 है, 0 नहीं!

प्रवेश (प्रवेश, सूची [, सीमांकक])।

DEFINE VARIABLE cList AS CHARACTER   NO-UNDO.

cList = "Goodbye,cruel,world!".

DISPLAY ENTRY(2, cList). //cruel

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 में एक विशेष चरित्र लिखने का सामान्य तरीका यह है कि इसे टिल्ड चरित्र (~) के साथ आगे बढ़ाया जाए।

ये डिफ़ॉल्ट विशेष वर्ण हैं

अनुक्रम के रूप में व्याख्या की गई टिप्पणी
~ " " "स्ट्रिंग" का उपयोग करके परिभाषित "अंदर के तार" लिखने के लिए उपयोग किया जाता है।
~ ' ' 'स्ट्रिंग' का उपयोग करके परिभाषित 'अंदर के तारों' को लिखने के लिए उपयोग किया जाता है।
~~ ~ उदाहरण के लिए यदि आप अनुक्रम को प्रिंट करना चाहते हैं और इसकी व्याख्या नहीं की गई है।
~ \ \
~ { { {प्रीप्रोसेसरों में उपयोग किया जाता है और कभी-कभी बचने की जरूरत होती है।
~ NNN एक एकल चरित्र nnn एक अष्टक संख्या है जो वर्ण के अस्सी मूल्य का प्रतिनिधित्व करती है।
~ टी टैब
~ n नई लाइन / लाइन फीड
~ r कैरिज रिटर्न
~ ई पलायन
~ ख बैकस्पेस
~ च भोजन की शैली

यदि आप बिल्कुल भी प्रदर्शित करना चाहते हैं तो बच जाना चाहिए!

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