Occurrence of a substring in line 1c. New functions for working with strings. Function for working with strings StrFind()

Implemented in version 8.3.6.1977.

We have expanded the set of functions designed to work with strings. We did this in order to give you more advanced tools for parsing string data. The new functions will be convenient and useful in technological tasks of text analysis. In tasks related to parsing text that contains data in formatted form. This could be an analysis of some files received from the equipment, or, for example, an analysis of a technological log.

You could perform all the actions that perform new functions before. Using more or less complex algorithms written in a built-in language. Therefore, new functions do not give you any fundamentally new capabilities. However, they allow you to reduce the amount of code and make the code simpler and more understandable. In addition, they allow you to speed up the execution of actions. Because the functions implemented in the platform work, of course, faster than a similar algorithm written in a built-in language.

Formatting function StrTemplate()

This function substitutes parameters into a string. The need for such a conversion often arises, for example, when displaying warning messages. The syntax for this function is as follows:

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

<Шаблон>- this is the string into which you need to substitute the parameter representations.

<Значение1> , ... <Значение10>- these are parameters (maximum ten), the representations of which must be substituted into the string.

To indicate a specific place in the template where you want to perform the substitution, you need to use markers like %1, ... %10. The number of markers involved in the template and the number of parameters containing values ​​must match.

For example, the result of executing such an operator:

there will be a line:

Data error on line 2 (Date type required)

Function for working with strings StrCompare()

This function compares two strings in a case-insensitive manner. For example, like this:

You could perform the same action earlier using the Value Comparison object:

However, using the new feature looks easier. And besides this, the function, unlike the Value Comparison object, works in both the thin client and the web client.

Functions for working with strings StrStartsWith(), StrEndsAt()

These functions determine whether a string begins with a specified substring or whether a string ends with a specified substring. The algorithm for these functions is not difficult to implement in an embedded language, but their presence allows you to write cleaner and more understandable code. And they work faster.

For example, they are convenient to use in the If statement:

Functions for working with strings StrDivide(), StrConnect()

These functions split a string into parts using a specified delimiter. Or vice versa, they combine several lines into one, inserting the selected separator between them. They are convenient for creating or analyzing logs and technological journals. For example, you can easily parse a technological log entry into parts suitable for further analysis:

Function for working with strings StrFind()

Instead of the old Find() function, we have implemented a new function that has additional capabilities:

  • Search in different directions (from the beginning, from the end);
  • Search from a specified position;
  • Search for an occurrence with a specified number (second, third, etc.).

In fact, it duplicates the capabilities of the old function. This is done in order to maintain compatibility with modules compiled in older versions. It is recommended that you no longer use the old Find() function.

Below is an example using the new search capabilities. Reverse search is useful when you need the last part of a formalized string, such as the full file name in a URL. And searching from a specified position helps in cases where you need to search in a known fragment, and not in the entire line.

A string is one of the primitive data types in 1C:Enterprise 8 systems. Variables with the type line contain text.

Type variable values line are enclosed in double quotes. Several variables of this type can be added.

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

Eventually Per3 will mean " Word 1 Word 2″.

In addition, 1C:Enterprise 8 systems provide functions for working with strings. Let's look at the main ones:

EnterString(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — the function is designed to display a dialog box in which the user can specify the value of a variable of type Line. Parameter <Строка> is required and contains the name of the variable into which the entered string will be written. Parameter <Подсказка> optional - this is the title of the dialog box. Parameter <Длина> optional, shows the maximum length of the input string. Defaults to zero, which means unlimited length. Parameter <Многострочность> optional. Defines the multiline text input mode: True—multiline text input with line separators; False - enter a simple string.

You can enter a string if you know the character code in Unicode:

Symbol(<КодСимвола>) — the code is entered as a number.

Letter= Symbol(1103) ; // I

There is also an inverse function that allows you to find out the code of a symbol.

SymbolCode(<Строка>, <НомерСимвола>) — returns the Unicode number of the specified character as a number.

Text case conversion functions:

VReg(<Строка>) — Converts all characters in a string to uppercase.

NReg(<Строка>) — Converts all characters in a string to lowercase.

TReg(<Строка>) — converts all characters in the string to title case. That is, the first letters in all words are converted to upper case, and the remaining letters are converted to lower case.

Functions for searching and replacing characters in a string:

Find(<Строка>, <ПодстрокаПоиска>) — finds the character number of the occurrence of the search substring. For example:

Find ("String" , "oka" ) ; // 4

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — finds the character number of the occurrence of the search substring, the occurrence number is indicated in the corresponding parameter. In this case, the search begins with the character whose number is specified in the parameter InitialPosition. Searching is possible from the beginning or the end of the string. For example:

Number4 Occurrences = Str Find ( "Defensiveness", "about" ,Search Direction. From Start, 1, 4); // 7

StrReplace(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – finds all occurrences of the search substring in the source string and replaces it with the replacement substring.

StrReplace ("String" , "oka" , "" ) ; // Page

Empty line(<Строка>) – checks the string for significant characters. If there are no significant characters, or no characters at all, then the value is returned True. Otherwise - Lie.

StrNumberOccurrences(<Строка>, <ПодстрокаПоиска>) – Calculates the number of occurrences of the search substring in the source string.

StrNumberOccurrences ( "Study, study and study again", "study" , "" ) ; // 3

StrTemplate(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — substitutes parameters into a string by number. The line must contain substitution markers of the form: “%1..%N”. Marker numbering starts from 1. If the parameter value Undefined, an empty string is substituted.

StrTemplate ( "Parameter 1 = %1, Parameter 2 = %2", "1" , "2" ) ; // Parameter 1= 1, Parameter 2 = 2

String conversion functions:

A lion(<Строка>, <ЧислоСимволов>) – returns the first characters of a string.

Right(<Строка>, <ЧислоСимволов>) – returns the last characters of a string.

Wednesday(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – returns a string of length<ЧислоСимволов>, starting from symbol<НачальныйНомер>.

AbbrL(<Строка>) trims non-significant characters to the left of the first significant character in the string.

Abbreviation(<Строка>) — cuts off insignificant characters to the right of the last significant character in the line.

AbbrLP(<Строка>) – cuts off insignificant characters to the left of the first significant character in the line and to the right of the last significant character in the line.

StrGetString(<Строка>, <НомерСтроки>) – Gets a multiline string by number.

Other features:

StrLength(<Строка>) – returns the number of characters in the string.

StrNumberRow(<Строка>) – returns the number of lines in a multiline string. A line is considered new if it is separated from the previous one by a newline character.

StrCompare(<Строка1>, <Строка2> ) – compares two strings in a case-insensitive manner. A function works similar to an object Comparison of Values. Returns:

  • 1 - if the first line is greater than the second
  • -1 - if the second line is greater than the first
  • 0 - if the strings are equal

StrCompare("First line" , "Second line" ) ; // 1

Special characters in 1C 8.3 are a set of special characters for string data types.

Let's look at each of them in more detail.

Special characters in 1C: VK, VTab, NPP, PS, PF, Tab

Special characters are called using the global “Characters” property, for example:

Text = “Text before tab” + Symbols.Tab + “text after tab”;

Get 267 video lessons on 1C for free:

  • VC (CR) - carriage return. In the old days, on dot matrix or daisy printers, this character code was used as a command that returned the print head to the beginning of the line.
  • NSP (NBSp) - non-breaking space (often seen in numeric strings, for example: 1,000).
  • PS (LF) - Line feed (LF - linefeed) - scroll the drum one line down, the print head is in the same place.
  • PF (FF) - format translation. The sheet is ejected from the printer and printing begins on a new sheet.
  • Tab is the tab character. Horizontal tabulation is a way to position yourself to print on the nearest column that is a multiple of a number (for example, 8, 16, 24...).
  • VTab - vertical tabulation. Similar to horizontal, but positioned on a line. Causes some scrolling of the printer drum (the print head remains in the same position (column)!)

PS + VK is a combination that performs two operations: it scrolls the reel down a line and returns the print carriage to the beginning of the line, which corresponds to what the user expects to get when pressing Enter.

If you are starting to learn 1C programming, we recommend our free course (don’t forget

The String type is found in all programming languages. It is primitive, and in 1C there are many functions for working with it. In this article we will look in detail at various ways of working with string types in 1C 8.3 and 8.2 using examples.

Line

In order to convert a variable of any type into a string, there is a function of the same name “String()”. The input parameter will be the variable itself, the string representation of which must be obtained.

String(False) // returns "No"
String(12345) // returns "12,345"
String(CurrentDate()) //"07/21/2017 11:55:36″

It is possible to convert not only primitive types to a string, but also others, for example, elements of directories and documents.

SokrLP, SokrL, SokrP

The input parameters of these functions are a variable of string type. The functions remove insignificant characters (spaces, carriage returns, etc.): from the left and right sides, only from the left side, and only from the right, respectively.

Abbreviation(" Spaces will be removed on both sides ") // "Spaces will be removed on both sides"
Abbreviation(" Spaces on both sides will be removed ") // " Spaces on the left will be removed "
Abbreviation(" Spaces on both sides will be removed ") // " Spaces on the right will be removed"

Leo, Right, Medium

These functions allow you to trim part of a string. The "Left()" function will return the portion of a string from its left side of the specified length. The "Right()" function is similar, but crops from the right. The “Avg()” function allows you to specify the number of the character from which the line will be selected and its length.

Lev("String variable", 4) // returns "Str"
Right("String variable", 7) // returns "variable"
Medium("String variable", 2, 5) // returns "troco"

StrLength

The function determines the number of characters that are contained in a string variable.

StrLength("Word") // the result of execution will be the number 5

Find

The function makes it possible to search for part of a string in a string variable. The return value will be a number that shows the position of the beginning of the found string. If no match is found, zero is returned.

Please note that the search is case sensitive. If there is more than one occurrence of the search substring in the original string, the function will return the beginning of the first occurrence.

Find("one, two, one, two, three", "two") // the function will return the number 6

Empty line

Using this function allows you to determine whether a string is empty. Minor characters such as space, carriage return, and others are not taken into account.

EmptyString("Pupkin Vasily Ivanovich") // function will return the value False
EmptyString(" ") // function will return the value True

VReg, NReg, TReg

These functions are very useful when comparing and converting string variables. "Vreg()" will return the original string in uppercase, "HPreg()" in lowercase, and "TReg()" will format it so that the first character of each individual word is capitalized, and all subsequent characters are capitalized.

VReg("GENERAL DIRECTOR") // return value - "GENERAL DIRECTOR"
NReg(“CEO DIRECTOR”) // return value – “CEO”
TREG(“CEO DIRECTOR”) // return value – “General Director”

PageReplace

This function is analogous to replacement in text editors. It allows you to replace one character or set of characters with another in string variables.

StrReplace("red, white, yellow", ","", ";") // returns "red; white; yellow"

StrNumberLines

The function allows you to determine the number of lines separated by carriage returns in a text variable.

The loop in the example below will go through three rounds because the LineNumberRow function will return the value 3:

For ind = 1 by StrNumber of Strings ("Line1" + Symbols.PS + "Line2" + Symbols.PS + "Line3") Cycle
<тело цикла>
EndCycle;

StrGetString

This function works with multiline text in the same way as the previous one. It allows you to get a specific string from a text variable.

StrGetString("String1" + Characters.PS + "String2" + Characters.PS + "String3", 2) // return "String2"

PageNumberOccurrences

The function counts the number of occurrences of a character or substring in the search string.

StrNumberAttachments("a;b;c;d; ", ";") // function will return the number 4

Symbol and Symbol Code

These functions allow you to obtain a character by its code in the Unicode encoding, as well as determine this code by the character itself.

SymbolCode("A") // function will return the number 1,040
CharacterCode(1040) // function will return “A”

Common tasks when working with strings

Concatenating Strings

To combine several strings (to perform concatenation), it is enough to use the addition operator.

“Line 1″ + “Line 2″ //the result of adding two lines will be “Line 1 Line 2”

Type Conversion

In order to convert a type into a string, for example, a link to a directory element, a number, etc., it is enough to use the “String()” function. Functions like “ScrLP()” will also convert variables into a string, but immediately with cutting off insignificant characters.

String(1000) // returns "1,000"

Please note that when converting a number to a string, the program automatically added a space separating the thousand. In order to avoid this, you can use the following constructions:

StrReplace(String(1000),Characters.NPP,"") // returns "1000"

String(Format(1000,"HG=")) // returns "1000"

Quotes in a string

Quite often you will have to deal with the need to specify quotation marks in a string variable. This can be either the request text written in the configurator, or just a variable. To solve this problem, you just need to set two quotation marks.

Header = String("Horns and Hooves LLC - that's us!") // will return "Horns and Hooves LLC - that's us!"

Multi-line, line break

In order to create multi-line text, just add line breaks (Symbols.PS) to it.

MultilineText = “First Line” + Symbols.PS + “Second Line”

How to remove spaces

In order to remove spaces on the right or left, you can use the “ScrAP()” function (as well as “ScrL()” and “ScrP()”):

StringNoSpaces = Abbreviation(" Many letters ") // the function will return the value "Many letters"

If, after converting a number to a string, you need to remove non-breaking spaces, use the following construction:

StringNoSpaces = StrReplace(String(99999),Characters.NPP,"") // returns "99999"

Programmers also often use the following construction, which allows you to remove or replace with another character all spaces in a text variable:

StringNoSpaces = StrReplace("hello","") // returns "hello"

Comparing strings with each other

You can compare terms with the usual equal sign. The comparison is case sensitive.

"Hello" = "hello" // returns False
"Hello" = "Hello" // returns True
"Hello" = "Goodbye" // will return False

There are few mechanisms for working with strings in 1C queries. First, the lines can be added. Secondly, you can take a substring from a string. Thirdly, strings can be compared, including by pattern. That's probably all that can be done with strings.

String addition

To add rows in a query, the “+” operation is used. You can only add strings of limited length.

SELECT "Name: " + Counterparties. Name AS Column 1 FROM Directory. Counterparties AS Counterparties WHERE Counterparties. Link = &Link

Substring function

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

An analogue of the Environment() function from the object model. The Substring() function can be applied to string data and allows you to select a fragment <Строки> , starting with the character number <НачальнаяПозиция> (characters in a line are numbered starting from 1) and length <Длина> characters. The result of the function calculation has a variable-length string type, and the length will be considered unlimited if <Строка> has unlimited length and parameter <Длина> is not a constant or greater than 1024.

If the length of the string is less than specified in the second parameter, then the function will return an empty string.

Attention! Using the SUBSTRING() function to convert strings of unlimited length to strings of limited length is not recommended. Instead, it is better to use the cast operator EXPRESS().

Function Similar

If we need to make sure that a string attribute meets certain criteria, we compare it:

SELECT Counterparties. Name AS Column 1 FROM Directory. Counterparties AS Counterparties WHERE Counterparties. Name = "Gazprom"

But what if you need a more subtle comparison? Not just equality or inequality, but similarity to a certain pattern? This is exactly what the SIMILAR function was created for.

LIKE — Operator for checking a string for similarity to a pattern. Analogue of LIKE in SQL.

The SIMILAR operator allows you to compare the value of the expression specified to the left of it with the pattern string specified to the right. The value of the expression must be of type string. If the value of the expression matches the pattern, the result of the operator will be TRUE, otherwise it will be FALSE.

The following characters in the template string are service characters and have a meaning different from the string character:

  • % (percent): a sequence containing any number of arbitrary characters;
  • _ (underscore): one arbitrary character;
  • […] (one or more characters in square brackets): any single character listed inside the square brackets. The enumeration may contain ranges, for example a-z, meaning an arbitrary character included in the range, including the ends of the range;
  • [^...] (in square brackets a negation sign followed by one or more characters): any single character other than those listed following the negation sign.

Any other symbol means itself and does not carry any additional load. If one of the listed characters needs to be written as itself, then it must be preceded by<Спецсимвол>. Myself<Спецсимвол>(any suitable character) is defined in the same statement after the SPECIAL CHARACTER keyword.



If you find an error, please select a piece of text and press Ctrl+Enter.