Poznámky zo zrkadla

18.08.2014 Nové funkcie pre prácu s reťazcami

Realizované vo verzii 8.3.6.1977.

Rozšírili sme sadu funkcií pre prácu s reťazcami. Urobili sme to preto, aby sme vám poskytli pokročilejšie nástroje na analýzu údajov reťazca. Nové funkcie budú pohodlné a užitočné v technologických úlohách analýzy textu. V úlohách súvisiacich s analýzou textu, ktorý obsahuje údaje vo formátovanej forme. Môže ísť o analýzu niektorých súborov prijatých zo zariadenia, alebo napríklad o analýzu technologického denníka.

Všetky akcie, ktoré nové funkcie vykonávajú, ste mohli vykonávať predtým. S pomocou viac či menej zložitých algoritmov napísaných vo vstavanom jazyku. Nové funkcie vám teda nedávajú zásadne nové príležitosti. Umožňujú vám však znížiť množstvo kódu, urobiť kód jednoduchším a zrozumiteľnejším. Okrem toho vám umožňujú urýchliť vykonávanie akcií. Pretože funkcie implementované v platforme fungujú, samozrejme, rýchlejšie ako podobný algoritmus napísaný vo vstavanom jazyku.

Funkcia formátovania StrTemplate()

Táto funkcia nahrádza parametre do reťazca. Potreba takejto konverzie často vzniká napríklad pri zobrazovaní varovných správ. Syntax tejto funkcie je nasledovná:

StrTemplate(<Шаблон>, <Значение1-Значение10>)

<Шаблон>je reťazec, v ktorom sa majú nahradiť reprezentácie parametrov.

<Значение1> , ... <Значение10>- to sú parametre (maximum - desať), ktorých reprezentácie musia byť dosadené do reťazca.

Ak chcete zadať konkrétne miesto v šablóne, na ktorom chcete vykonať nahradenie, musíte použiť značky v tvare %1, ... %10. Počet značiek zahrnutých v šablóne a počet parametrov obsahujúcich hodnoty sa musia zhodovať.

Napríklad výsledok vykonania takéhoto operátora:

bude tam riadok:

Chyba údajov v riadku 2 (vyžaduje typ dátumu)

Funkcia reťazca StrCompare()

Táto funkcia necitlivo porovnáva veľkosť dvoch reťazcov. Napríklad takto:

Pred použitím objektu môžete vykonať rovnakú akciu Porovnávanie hodnôt:

Používanie novej funkcie však vyzerá jednoduchšie. A okrem toho funkcia, na rozdiel od objektu Porovnávanie hodnôt, pracuje v tenkého klienta a vo webovom klientovi.

Funkcie reťazcov StrBeginsC(), StrEndsTo()

Tieto funkcie určujú, či reťazec začína určeným podreťazcom, alebo či reťazec končí určeným podreťazcom. Algoritmus týchto funkcií nie je ťažké implementovať do vstavaného jazyka, ale ich prítomnosť vám umožňuje písať čistejší a zrozumiteľnejší kód. A pracujú rýchlejšie.

Napríklad je vhodné ich použiť v operátorovi Ak:

Funkcie na prácu s reťazcami StrSplit(), StrJoin()

Tieto funkcie rozdelia reťazec na časti podľa zadaného oddeľovača. Alebo naopak, spoja niekoľko riadkov do jedného, ​​pričom medzi ne vložia vybraný oddeľovač. Sú vhodné na vytváranie alebo analýzu protokolov, technologického denníka. Napríklad záznam technologického denníka môžete jednoducho rozložiť na časti vhodné pre ďalšiu analýzu:

Funkcia práce s reťazcami StrFind()

Namiesto starej funkcie Nájsť() sme implementovali Nová funkcia, ktorý má ďalšie funkcie:

  • Hľadať v rôznych smeroch (od začiatku, od konca);
  • Vyhľadajte zo zadanej pozície;
  • Vyhľadajte výskyt so zadaným číslom (druhý, tretí atď.).

V skutočnosti duplikuje schopnosti starej funkcie. Deje sa tak s cieľom zachovať kompatibilitu s modulmi zostavenými v starších verziách. stará funkcia Nájsť() odporúča sa znovu nepoužívať.

Nižšie je uvedený príklad použitia nových možností vyhľadávania. Spätné vyhľadávanie je užitočné, keď potrebujete posledný kus formalizovaného reťazca, ako je napríklad úplný názov súboru v adrese URL. A vyhľadávanie zo zadanej pozície pomáha v prípadoch, keď potrebujete hľadať v známom fragmente, a nie v celom reťazci.

Typ String sa nachádza vo všetkých programovacích jazykoch. Je to primitívne a v 1C je veľa funkcií na prácu s ním. V tomto článku sa na to pozrieme bližšie rôznymi spôsobmi práca s typmi reťazcov v 1C 8.3 a 8.2 s príkladmi.

Linka

Na konverziu premennej akéhokoľvek typu na reťazec existuje funkcia "String ()" s rovnakým názvom. Vstupným parametrom bude samotná premenná, ktorej reťazcová reprezentácia sa má získať.

String(False) // vráti "Nie"
String(12345) // vráti "12 345"
String(CurrentDate()) //"21.07.2017 11:55:36"

Na reťazec je možné previesť nielen primitívne typy, ale aj iné, napríklad prvky adresárov a dokumentov.

Skrátené LP, Skrátené L, Skrátené P

Ako vstupné parametre z týchto funkcií je premenná typu reťazec. Funkcie odstraňujú nepodstatné znaky (medzery, návraty vozíka atď.): z ľavej a pravej strany, iba z ľavej strany a iba z pravej, resp.

abbrl("Medzery na oboch stranách budú odstránené") // "Medzery na oboch stranách budú odstránené"
abbr("Medzery na oboch stranách budú odstránené") // "Medzery na ľavej strane budú odstránené"
abbr(" Medzery na oboch stranách budú odstránené ") // "Medzery na pravej strane budú odstránené"

Leo, vpravo, uprostred

Tieto funkcie vám umožňujú odrezať časť reťazca. Funkcia Lion() vráti časť reťazca na jeho ľavej strane zadanej dĺžky. Funkcia "Right()" je podobná, ale orezanie sa vykonáva vpravo. Funkcia "St()" umožňuje určiť číslo znaku, z ktorého sa reťazec vyberie, a jeho dĺžku.

Lion("String variable", 4) // vráti "Stro"
Right("String variable", 7) // vráti "variable"
avg("Premenná reťazca", 2, 5)// vráti "troco"

StrLength

Funkcia určuje počet znakov, ktoré sú obsiahnuté v reťazcovej premennej.

StrLength("Word") // výsledkom vykonania bude číslo 5

Nájsť

Funkcia umožňuje vyhľadať časť reťazca v reťazcovej premennej. Návratová hodnota bude číslo, ktoré označuje pozíciu začiatku nájdeného reťazca. Ak sa nenájdu žiadne zhody, vráti sa nula.

Upozorňujeme, že vyhľadávanie rozlišuje veľké a malé písmená. Ak je v pôvodnom reťazci viac ako jeden výskyt hľadaného podreťazca, funkcia vráti začiatok prvého výskytu.

Find("jeden, dva, jeden, dva, tri", "dva") // funkcia vráti číslo 6

Prázdny riadok

Pomocou tejto funkcie môžete určiť, či je reťazec prázdny. Nepodstatné znaky, ako je medzera, návrat vozíka a iné, sa neberú do úvahy.

EmptyString("Vasily Ivanovič Pupkin") // funkcia vráti hodnotu False
EmptyString(" ") // funkcia vráti hodnotu True

VReg, NReg, TReg

Tieto funkcie sú veľmi užitočné pri porovnávaní a konverzii reťazcových premenných. "Vreg()" vráti pôvodný reťazec veľkými písmenami, "HReg()" malými písmenami a "TReg()" ho naformátuje tak, že prvý znak každého jednotlivého slova bude veľký a všetky nasledujúce znaky budú malé.

VReg("GENERAL DIRECTOR") // návratová hodnota - "GENERAL DIRECTOR"
HReg("GENERAL DIRECTOR") // návratová hodnota - "CEO"
TReg("GENERAL DIRECTOR") // návratová hodnota - "Generálny riaditeľ"

StrReplace

Táto funkcia je analogická s výmenou v textové editory. Umožňuje vám nahradiť jeden znak alebo sadu znakov iným v reťazcových premenných.

StrReplace("red, white, yellow", ",", ";") // vráti "red; biely; žltá"

StrNumberRows

Funkcia vám umožňuje určiť počet riadkov oddelených znakom návratu vozíka v textovej premennej.

Slučka v príklade nižšie prejde cez tri kruhy, pretože funkcia StrNumberRows vráti hodnotu 3:

Pre ind \u003d 1 podľa StrNumber of Lines ("Line1" + Symbols.PS + "String2" + Symbols.PS + "Line3") slučka
<тело цикла>
EndCycle;

StrGetString

Táto funkcia pracuje s viacriadkovým textom rovnakým spôsobom ako predchádzajúca. Umožňuje vám získať konkrétny reťazec z textovej premennej.

StrGetString("Reťazec1" + Symboly.PS + "Reťazec2" + Symboly.PS + "Reťazec3", 2) // vráti "Riadok2"

StrNumberOccurrences

Funkcia spočíta počet výskytov znaku alebo podreťazca v hľadanom reťazci.

StrNumberInstallations("a;b;c;d; ", ";") // funkcia vráti číslo 4

Symbol a SymbolCode

Tieto funkcie vám umožňujú získať znak podľa jeho kódu Unicode, ako aj určiť tento kód podľa samotného znaku.

SymbolCode("A") // funkcia vráti číslo 1 040
SymbolCode(1040) // funkcia vráti "A"

Časté úlohy pri práci so strunami

Spájanie reťazcov

Na zreťazenie viacerých reťazcov (reťazenie) stačí použiť operátor sčítania.

"Riadok 1" + "Riadok 2" //výsledkom pridania dvoch riadkov bude "Riadok 1 Riadok 2"

Konverzia typu

Na konverziu typu na reťazec, napríklad odkaz na prvok slovníka, číslo atď., stačí použiť funkciu "String ()". Funkcie ako "ShortLP()" tiež konvertujú premenné na reťazec, ale okamžite s odrezaním nepodstatných znakov.

String(1000) // vráti "1000"

Upozorňujeme, že pri prevode čísla na reťazec program automaticky pridal medzeru oddeľujúcu tisícku. Aby ste tomu zabránili, môžete použiť nasledujúce štruktúry:

StrReplace(String(1000),Characters.NPP,"") // vráti "1000"

String(Format(1000,"CH=")) // vráti "1000"

Citácie v reťazci

Pomerne často sa budete musieť vysporiadať s potrebou vkladať úvodzovky do premennej reťazca. Môže to byť buď text požiadavky napísaný v konfigurátore, alebo len premenná. Na vyriešenie tohto problému stačí nastaviť dva znaky úvodzoviek.

Header = String("Roga and Hooves LLC sme my!") // vráti "Roga and Hooves LLC sme my!"

Viacriadok, zalomenie riadku

Ak chcete vytvoriť viacriadkový text, stačí doň pridať znaky pre zalomenie riadku (Symbols.PS).

ViacriadkovýText = "Prvý riadok" + Znaky.PS + "Druhý riadok"

Ako odstrániť medzery

Ak chcete odstrániť medzery vpravo alebo vľavo, môžete použiť funkciu „Stretch()“ (rovnako ako „Scrpt()“ a „ScreenP()“):

StringWithoutSpaces = ShortLP(" Veľa písmen ") // funkcia vráti hodnotu "Veľa písmen"

Ak po prevode čísla na reťazec potrebujete odstrániť pevné medzery, použite nasledujúcu konštrukciu:

StringWithoutSpaces = StrReplace(String(99999),Characters.NPP,"") // vráti "99999"

Programátori tiež často používajú nasledujúcu konštrukciu, ktorá vám umožňuje odstrániť alebo nahradiť všetky medzery textovej premennej iným znakom:

StringWithoutSpaces = StrReplace(" ahoj", " ","") // vráti "ahoj"

Porovnávanie reťazcov medzi sebou

Výrazy môžete porovnať s obvyklým znakom rovnosti. Pri porovnaní sa rozlišujú malé a veľké písmená.

"ahoj" = "ahoj" // vráti hodnotu false
"Ahoj" = "Ahoj" // vráti hodnotu True
"Ahoj" = "Dovidenia" // vráti hodnotu False

Existuje niekoľko mechanizmov na prácu s reťazcami v dopytoch 1C. Najprv je možné pridať reťazce. Po druhé, podreťazec môže byť prevzatý z reťazca. Po tretie, reťazce možno porovnávať, a to aj podľa vzoru. To je asi tak všetko, čo môžete so šnúrkami robiť.

Pridávanie reťazcov

Operátor „+“ sa používa na pridávanie reťazcov do dotazu. Môžete pridať iba reťazce obmedzenej dĺžky.

SELECT "Názov: " + Dodávatelia.Názov AS Stĺpec 1 FROM Adresár.Dodávatelia AKO Dodávatelia WHERE Dodávatelia.Odkaz = &Odkaz

Funkcia podreťazca

SUBSTRING(<Строка>, <НачальнаяПозиция>, <Длина>)

Analóg funkcie Environment() from objektový model. Funkciu Substring() možno použiť na údaje typu reťazec a umožňuje vám vybrať fragment <Строки> , začínajúc číselným znakom <НачальнаяПозиция> (znaky v reťazci sú číslované od 1) a dĺžku <Длина> postavy. Výsledok vyhodnotenia funkcie má reťazec typu s premenlivou dĺžkou a dĺžka sa bude považovať za neobmedzenú, ak <Строка> má neobmedzenú dĺžku a parametre <Длина> nie je konštantná alebo väčšia ako 1024.

Ak je dĺžka reťazca menšia ako špecifikovaná v druhom parametri, funkcia vráti prázdny reťazec.

Pozor! Použitie funkcie SUBSTRING() na konverziu reťazcov neobmedzenej dĺžky na reťazce obmedzenej dĺžky sa neodporúča. Namiesto toho je lepšie použiť operátor obsadenia EXPRESS().

Funkcia podobná

Ak sa potrebujeme uistiť, že atribút string spĺňa určité kritériá, porovnáme ho:

SELECT Counterparties.Name AS Stĺpec 1 FROM Directory.Counterparties AS Counterparties WHERE Counterparties.Name = "Gazprom"

Ale čo ak je potrebné jemnejšie porovnanie? Nielen pre rovnosť alebo nerovnosť, ale pre podobnosť s určitým vzorom? Presne na to bola vytvorená funkcia LIKE.

LIKE – Operátor na kontrolu, či je reťazec podobný vzoru. Analóg LIKE v SQL.

Operátor LIKE vám umožňuje porovnať hodnotu výrazu zadaného naľavo od neho s reťazcom šablóny zadaným napravo. Hodnota výrazu musí byť typu string. Ak sa hodnota výrazu zhoduje so šablónou, výsledok operátora bude TRUE, inak bude FALSE.

Nasledujúce znaky v reťazci šablóny sú servisné znaky a majú iný význam ako znak reťazca:

  • % (percento): sekvencia obsahujúca ľubovoľný počet ľubovoľných znakov;
  • _ (podčiarkovník): jeden ľubovoľný znak;
  • […] (jeden alebo viac znakov v hranatých zátvorkách): každý jeden znak uvedený v hranatých zátvorkách. Enumerácia môže obsahovať rozsahy, ako napríklad a-z, čo znamená akýkoľvek znak v rozsahu, vrátane koncov rozsahu;
  • [^…] (v hranatých zátvorkách znak záporu, za ktorým nasleduje jeden alebo viacero znakov): Akýkoľvek jednotlivý znak okrem tých, ktoré sú uvedené za znakom záporu.

Akýkoľvek iný symbol znamená sám seba a nenesie žiadnu dodatočnú záťaž. Ak je potrebné napísať jeden z uvedených znakov ako samotný, potom mu musí predchádzať<Спецсимвол>. Ja sám<Спецсимвол>(akýkoľvek vhodný znak) je definovaný v tom istom príkaze za kľúčové slovoŠPECIÁLNY SYMBOL.

String je jedným z primitívnych dátových typov v systémoch 1C:Enterprise 8. Premenné s typom riadok obsahovať text.

Zadajte hodnoty premenných riadok sú v dvojité úvodzovky. Viaceré premenné tohto typu dá sa zložiť.

Per1 = "Slovo 1" ;
Per2 = "Slovo 2" ;
Per3 = Per1 + " " + Per2 ;

Nakoniec Per3 bude záležať" Slovo 1 Slovo 2″.

Systémy 1C:Enterprise 8 navyše poskytujú funkcie pre prácu s reťazcami. Zvážte tie hlavné:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — funkcia je určená na zobrazenie dialógového okna, v ktorom môže používateľ zadať hodnotu typ premennej Linka. Parameter <Строка> je povinný a obsahuje názov premennej, do ktorej sa zadaný reťazec zapíše. Parameter <Подсказка> nepovinný je názov dialógového okna. Parameter <Длина> voliteľné, označuje maximálnu dĺžku vstupného reťazca. Predvolená hodnota je nula, čo znamená neobmedzenú dĺžku. Parameter <Многострочность> voliteľné. Určuje režim vstupu viacriadkový text: True - zadajte viacriadkový text s oddeľovačmi riadkov; False – Zadajte jednoduchý reťazec.

Je možné zadať reťazec a so znalosťou kódu znaku v Unicode:

Symbol(<КодСимвола>) — Kód sa zadáva ako číslo.

Letter= Symbol(1103 ) ; // Ja

Je tu tiež inverzná funkcia, ktorý umožňuje zistiť kód znaku.

Kód symbolu(<Строка>, <НомерСимвола>) — Vráti číslo Unicode zadaného znaku ako číslo.

Funkcie prevodu malých a veľkých písmen:

VReg(<Строка>) - prevedie všetky znaky v reťazci na veľké písmená.

HReg(<Строка>) - Prevedie všetky znaky v reťazci na malé písmená.

TReg(<Строка>) - konvertuje všetky znaky reťazca na veľkosť písmen. To znamená, že prvé písmená vo všetkých slovách sa skonvertujú na veľké a zvyšné písmená sa skonvertujú na malé.

Funkcie na vyhľadávanie a nahradenie znakov v reťazci:

Nájsť(<Строка>, <ПодстрокаПоиска>) - nájde číslo znaku výskytu hľadaného podreťazca. Napríklad:

Nájsť ("String" , "oko" ) ; // štyri

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — nájde číslo znaku výskytu hľadaného podreťazca, číslo výskytu je uvedené v príslušnom parametri. V tomto prípade vyhľadávanie začína od znaku, ktorého číslo je uvedené v parametri StartPosition. Vyhľadávanie je možné od začiatku alebo od konca reťazca. Napríklad:

Položka číslo4= StrFind( "obrana", "o" , Smer vyhľadávania. Najprv 1, 4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) Vyhľadá všetky výskyty hľadaného podreťazca v zdrojovom reťazci a nahradí ho náhradným podreťazcom.

StrReplace("String" , "oko" , "" ) ; // Stránka

Prázdny riadok (<Строка>) - skontroluje, či reťazec neobsahuje významné znaky. Ak neexistujú žiadne alebo žiadne významné znaky, vráti sa hodnota Pravda. Inak - Klamať.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) – vypočíta počet výskytov hľadaného podreťazca v zdrojovom reťazci.

StrNumberOccurrences ( "Študovať, študovať a ešte raz študovať", "študovať" , "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — nahradí parametre do reťazca číslom. Reťazec musí obsahovať substitučné značky v tvare: "%1..%N". Číslovanie značiek začína od 1. Ak je hodnota parametra Nedefinované, prázdny reťazec je nahradený.

StrPattern ( "Možnosť 1 = %1, možnosť 2 = %2", "1" , "2" ) ; // Parameter 1= 1, Parameter 2 = 2

Funkcie konverzie reťazcov:

Lev(<Строка>, <ЧислоСимволов>) vráti prvé znaky reťazca.

Správny(<Строка>, <ЧислоСимволов>) - vráti posledné znaky reťazca.

streda(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - vráti reťazec dĺžky<ЧислоСимволов>, začínajúc symbolom<НачальныйНомер>.

Abbr(<Строка>) odreže nepodstatné znaky naľavo od prvého významný charakter v rade.

abbr(<Строка>) - odreže nepodstatné znaky vpravo od posledného významného znaku v reťazci.

Abbrl(<Строка>) - odreže nevýznamné znaky naľavo od prvého významného znaku v reťazci a napravo od posledného významného znaku v reťazci.

StrGetString(<Строка>, <НомерСтроки>) – získa reťazec viacriadkového reťazca podľa čísla.

Ďalšie vlastnosti:

StrLength(<Строка>) - vráti počet znakov v reťazci.

StrNumber of Lines(<Строка>) - vráti počet riadkov vo viacriadkovom reťazci. Riadok sa považuje za nový, ak je oddelený od predchádzajúceho riadku znakom nového riadku.

StrCompare(<Строка1>, <Строка2> ) - necitlivo porovnáva veľkosť písmen dvoch reťazcov. Funkcia funguje ako objekt Porovnávanie hodnôt. Vrátenie:

  • 1 - ak je prvý riadok väčší ako druhý
  • -1 - ak je druhý riadok väčší ako prvý
  • 0 - ak sú reťazce rovnaké

StrCompare("Prvý riadok" , "Druhý riadok" ) ; // jeden