Символи пс 1с. Нові функції роботи з рядками. Функції роботи з рядками СтрРозділити()

Рядок — один із примітивних типів даних у системах 1С:Підприємство 8. Змінні з типом рядокмістять текст.

Значення змінних типу рядокполягають у подвійні лапки. Декілька змінних даного типу можна складати.

Пер1 = "Слово 1";
Пер2 = "Слово 2";
Пер3 = Пер1 + "" + Пер2;

В підсумку Пер3матиме значення « Слово 1 Слово 2”.

Крім того, в системах 1С:Підприємство 8 передбачені функції для роботи з рядками. Розглянемо основні:

ВвестиРядок(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — функція призначена для виведення діалогового вікна, в якому користувач може вказати значення змінної типу Рядок. Параметр <Строка> є обов'язковим і містить ім'я змінної, в яку буде записано введений рядок. Параметр <Подсказка> необов'язковий це заголовок діалогового вікна. Параметр <Длина> необов'язковий, показує максимальну довжину рядка, що вводиться. За замовчуванням дорівнює нулю, що означає необмежену довжину. Параметр <Многострочность> необов'язковий. Визначає режим введення багаторядкового тексту: Істина – введення багаторядкового тексту з роздільниками рядків; Брехня - введення простого рядка.

Рядок можна ввести і, знаючи код символу в кодуванні Unicode:

Символ(<КодСимвола>) — код вводиться як числа.

Літера = Символ (1103); // Я

Існує і зворотна функція, що дозволяє дізнатися код символу.

КодСимволу(<Строка>, <НомерСимвола>) — повертає номер вказаного символу у кодуванні Unicode у вигляді числа.

Функції перетворення регістру тексту:

ВРег(<Строка>) - Перетворює всі символи рядка у верхній регістр.

НРег(<Строка>) - Перетворює всі символи рядка в нижній регістр.

трег(<Строка>) - Перетворює всі символи рядка в титульний регістр. Тобто перші літери у всіх словах перетворюється на верхній регістр, інші літери — в нижній.

Функції пошуку та заміни символів у рядку:

Знайти (<Строка>, <ПодстрокаПоиска>) - знаходить номер символу входження підрядка пошуку. Наприклад:

Знайти ("Рядок", "ока"); // 4

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — знаходить номер символу входження підстрою пошуку, номер входження вказується у відповідному параметрі. При цьому пошук починається з символу, номер якого вказано у параметрі Початкова позиція.Пошук можливий з початку або кінця рядка. Наприклад:

Номер4 Входження = СтрНайти ( "Обороноспроможність", "О" , Напрям Пошуку. Спочатку, 1, 4); // 7

СтрЗамінити(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – знаходить у вихідному рядку всі входження підрядка пошуку та замінює її на підрядок заміни.

СтрЗамінити ("Рядок", "ока", ""); // Стор

Порожня стрічка(<Строка>) – перевіряє рядок на наявність символів. Якщо значущих символів немає, або ніяких символів немає, то повертається значення Істина. В іншому випадку - Брехня.

СтрЧислоВходжень(<Строка>, <ПодстрокаПоиска>) – обчислює кількість входжень підрядка пошуку у вихідному рядку.

СтрЧислоВходжень ( "вчитися, вчитися та ще раз вчитися", "вчитися", ""); // 3

СтрШаблон(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — підставляє параметри у рядок за номером. Рядок повинен містити маркер підстановки виду: «%1..%N». Нумерація маркерів починається з 1. Якщо значення параметра Не визначене, підставляється порожній рядок.

СтрШаблон ( "Параметр 1 = %1, Параметр 2 = %2", "1" , "2" ) ; // Параметр 1 = 1, Параметр 2 = 2

Функції перетворення рядків:

Лев(<Строка>, <ЧислоСимволов>) - Повертає перші спочатку символи рядка.

Прав(<Строка>, <ЧислоСимволов>) - Повертає останні символи рядка.

Середа(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) - Повертає рядок довжиною в<ЧислоСимволов>, починаючи з символу<НачальныйНомер>.

СокрЛ(<Строка>) відсікає незначні символи, що стоять ліворуч від першого символу в рядку.

СокрП(<Строка>) — відсікає незначні символи, що стоять праворуч від останнього символу в рядку.

СокрЛП(<Строка>) – відсікає незначні символи, що стоять ліворуч від першого символу в рядку і праворуч від останнього символу в рядку.

СтрОтриматиРоку(<Строка>, <НомерСтроки>) – отримує рядок рядкового рядка за номером.

Інші функції:

СтрДліна(<Строка>) – повертає кількість символів у рядку.

СтрЧислоРядок(<Строка>) – повертає число рядків у рядковому рядку. Рядок вважається новим, якщо він відокремлений від попереднього символом перекладу рядка.

Стр Порівняти(<Строка1>, <Строка2> ) – порівнює два рядки без урахування регістру. Функція працює аналогічно об'єкту ПорівнянняЗначень. Повертає:

  • 1 — якщо перший рядок більший за другий
  • -1 — якщо другий рядок більший за перший
  • 0 - якщо рядки рівні

СтрПорівняти("Перший рядок", "Другий рядок"); // 1

Інформація в 1С може бути представлена: довідником, документом, регістром.

Проте зрештою всі ці об'єкти складаються з полів, а поля – простих типів – число, рядок, дата. І інформації у вигляді рядків завжди більше. Тому з рядками доводиться працювати найчастіше.

Зараз ми розберемо, як з мови 1С можна працювати з рядками. Паралельно спробуємо різні варіанти автоматичного аналізу тексту.

Види рядків

Рядки можуть бути обмежені за довжиною або необмеженою довжиною. Якщо рядкове значення взято з реквізиту – то тип реквізиту вказується це обмеження.

Якщо рядок ввів користувач на формі, то елемент форми може стояти галочки «Многорядковий режим» і «Розширене редагування». Перший означає, що рядок може містити знаки «Переносу рядка 1С (Enter)». Друга – рядок може містити інші службові символи 1С, наприклад TAB.

Якщо рядок взято з файлу, наприклад з використанням Читання Тексту (), то стає важливим і кодування - при читанні файлу потрібно вказувати кодування (UTF-8, KOI8 і т.п.).

Службові символи 1С

Для роботи зі спеціальними символами використовується перелік символів 1С.

Наприклад, рядкове значення, що складається з двох слів:
ТекстовийРядок = "Перший рядок" + Символи.ПС + "Другий рядок";

Наприклад, пошук перенесення рядка 1С у тексті:
Позиція = Знайти(ТекстоваРядок, Символи.ПС);

Працювати можна з такими спеціальними символами:

  • CR та LF
    Означають перенесення рядка 1С. Часто зустрічаються у текстових файлах.
    Код символу в ASCII – 0x0D та 0x0A, у Unicode – U+000D та U+000A.

    У мові 1С виглядають як Символи.CR і Символи.LF, або російською Символы.ВК і Символы.ПС. Для перенесення рядка 1С при її створенні в коді 1С достатньо використання ПС.

Інші символи 1С

Рядки в 1С «фізично» використовуються у форматі Unicode (Юнікод, http://ua.wikipedia.org/wiki/%DE%ED%E8%EA%EE%E4).

Якщо Ви не стикалися раніше з кодуванням символів, коротко зауважимо:

  • При роботі з рядками комп'ютер використовує номери букв, а не самі букви
  • Оскільки «людських» алфавітів безліч (англійська, російська, грецька, китайська та ін., а ще є службові та «недруковані» символи 1С), то існує кілька варіантів комп'ютерних алфавітів, одним з яких є Unicode, який включає символи 1С всіх мов
  • Алфавіт Unicode виглядає приблизно так:
    o Поширені «недруковані» службові символи 1С
    o Знаки сприйняття та математики
    o Цифри
    o Англійська абетка
    o Дод. символи 1С англійського алфавіту, які використовуються в європейських мовах (наприклад, німецькою)
    o Грецька абетка
    o Російський алфавіт
    o …

При необхідності в рядках 1С можна використовувати всі 1С символи, доступні в Unicode.

По-перше, Ви їх можна набрати з клавіатури, якщо у Вас у Windows встановлена ​​розкладка (за замовчуванням на території Росії зазвичай ставиться англійська та російська).

По-друге, можна набрати за допомогою наступного прийому:

По-третє, працювати можна з коду програми. Функція Символ(Цифра) повертає символ з вказаним номером, а функція КодСимвола(Рядок) повертає номер символу першої літери в рядку. Якщо потрібна інша літера в рядку, то КодСимвола (Рядок, Номер Букви).

Наприклад, додамо символ Ž до наступного рядка:
ТекстоваРядок = "Гарне пиво в місті" + Символ(381) + "drobinek";
//Результат: "Гарне пиво в місті Ždrobinek"

Реалізовано у версії 8.3.6.1977.

Ми розширили набір функцій, призначених для роботи з рядками. Ми це зробили для того, щоб дати вам розвиненіші інструменти для розбору рядкових даних. Нові функції будуть зручні та корисні у технологічних завданнях аналізу тексту. У завданнях, пов'язаних із розбором тексту, який містить дані у форматованому вигляді. Це може бути аналіз файлів, отриманих від обладнання, або, наприклад, аналіз технологічного журналу.

Усі дії, які виконують нові функції, ви могли виконувати раніше. За допомогою більш менш складних алгоритмів, написаних вбудованою мовою. Тому нові функції не дають вам якихось нових можливостей. Однак вони дозволяють скоротити кількість коду, зробити код більш простим та зрозумілим. А крім цього, вони дозволяють прискорити виконання дій. Тому що функції, реалізовані в платформі, працюють, звичайно ж, швидше, ніж аналогічний алгоритм, написаний вбудованою мовою.

Функція форматування СтрШаблон()

Ця функція підставляє параметри рядка. Потреба такого перетворення часто виникає, наприклад, при виведенні попереджуючих повідомлень. Синтаксис цієї функції виглядає так:

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

<Шаблон>- це рядок, у якому потрібно підставити уявлення параметрів.

<Значение1> , ... <Значение10>- це параметри (максимально – десять), уявлення яких потрібно підставити у рядок.

Щоб вказати конкретне місце у шаблоні, в якому потрібно виконати підстановку, потрібно використовувати маркер виду %1, ... %10. Кількість маркерів, задіяних у шаблоні, та кількість параметрів, що містять значення, мають збігатися.

Наприклад, результатом виконання такого оператора:

буде рядок:

Помилка даних у рядку 2 (потрібен тип Дата)

Функція роботи з рядками Сравнить()

Ця функція порівнює два рядки без урахування регістру. Наприклад, так:

Цю ж дію ви могли виконати і раніше за допомогою об'єкта ПорівнянняЗначень:

Однак, використання нової функції виглядає більш простим. Крім цього функція, на відміну від об'єкта ПорівнянняЗначень, працює і в тонкому клієнті, і в веб-клієнті.

Функції роботи з рядками СтрНачинаетсяС(), СтрЗаканчиваетсяНа()

Ці функції визначають, чи починається рядок із зазначеного підрядка, чи закінчується рядок зазначеним підрядком. Алгоритм цих функцій нескладно реалізувати вбудованою мовою, але їх наявність дозволяє писати більш чистий і зрозумілий код. І працюють вони швидше.

Наприклад, їх зручно використовувати в операторі Якщо:

Функції роботи з рядками СтрРозділити()

Ці функції поділяють рядок на частини вказаного роздільника. Або навпаки, з'єднують кілька рядків в один, вставляючи між ними вибраний роздільник. Вони зручні для створення чи аналізу логів, технологічного журналу. Наприклад, запис технологічного журналу можна легко розібрати на частини, придатні для подальшого аналізу:

Функція роботи з рядками СтрНайти()

Замість старої функції Знайти() ми реалізували нову функцію, яка має додаткові можливості:

  • Пошук у різних напрямках (з початку, з кінця);
  • Пошук із зазначеної позиції;
  • Пошук входження із зазначеним номером (друге, третє тощо).

Фактично, вона дублює можливості старої функції. Так зроблено для того, щоб зберегти сумісність із модулями, скомпільованими у старих версіях. Стару функцію Знайти() рекомендується не використовувати.

Нижче наведено приклад, який використовує нові можливості пошуку. Пошук у зворотному напрямку зручний тоді, коли вам потрібен останній фрагмент формалізованого рядка, наприклад, повне ім'я файлу в URL. А пошук із зазначеної позиції допомагає у тих випадках, коли потрібно шукати у відомому фрагменті, а не у всьому рядку.

Спеціальні символи в 1С 8.3. спеціальних символівдля рядкових типів даних

Розглянемо кожен із них докладніше.

Спеціальні символи в 1С: ВК, ПТаб, НВП, ПС, ПФ, Таб

Спецсимволи викликаються за допомогою глобальної властивості «Символи», наприклад:

Текст = "Текст до табуляції" + Символи.Таб + "Текст після табуляції";

Отримайте 267 відеоуроків з 1С безкоштовно:

  • ВК (CR) – повернення каретки. У старі часи на матричних чи ромашкових принтерах цей код символу використовувався як команда, яка повертала друкувальну голівку на початок рядка.
  • НВП (NBSp) — нерозривний пробіл (часто можна побачити в рядках числового вигляду, наприклад: 1000).
  • ПС (LF) - Переведення рядка (LF - linefeed) - прокручуємо барабан на один рядок вниз, що друкує головка на тому ж місці.
  • ПФ (FF) – переклад формату. Аркуш викидається з принтера, друк починається з нового аркуша.
  • Таб - символ табуляції. Горизонтальна табуляція - спосіб спозиціонуватися для друку на найближчу колонку, кратну якомусь числу (наприклад, на 8, 16, 24 …).
  • ВТаб (VTab) – вертикальна табуляція. Аналогічна горизонтальна, тільки позиціонуємося на рядок. Викликає деяке прокручування барабана принтера (друкуюча головка залишається на тій же позиції (колонці)!)

ПС + ВК - це комбінація, яка виконує дві операції: прокручує барабан на рядок вниз і повертає каретку друку на початок рядка, що відповідає тому, що користувач очікує отримати, натискаючи на Enter.

Якщо Ви починаєте вивчати 1С програмування, рекомендуємо наш безкоштовний курс(не забудьте

Тип «Рядок» зустрічається у всіх мовах програмування. Він є примітивним, і в 1С існує багато функцій для роботи з ним. У цій статті ми докладно розглянемо різні способироботи з рядковими типами в 1С 8.3 та 8.2 на прикладах.

Рядок

Щоб перетворити змінну будь-якого типу на рядок, існує однойменна функція «Рядок()». Вхідним параметром буде сама змінна, рядкове представлення якої потрібно отримати.

Рядок (Брехня) // повертає «Ні»
Рядок(12345) // повертає «12 345»
Рядок(ПоточнаДата()) //»21.07.2017 11:55:36″

Перетворювати до рядка можна як примітивні типи, а й інші, наприклад елементи довідників, документів.

СокрЛП, СокрЛ, СокрП

Як вхідні параметри даних функцій виступає змінна рядкового типу. Функції видаляють незначні символи (пробіли, переноси каретки та інші): з лівого та правого боку, тільки з лівого боку, і лише з правого відповідно.

СокрЛП(" Будуть видалені пробіли з обох сторін") // "Будуть видалені пробіли з обох сторін"
СокрЛ(" Будуть видалені пробіли з обох боків") // "Будуть видалені пробіли зліва "
СокрП(" Будуть видалені пробіли з обох сторін") // "Будуть видалені пробіли праворуч"

Лев, Прав, Середовище

Ці функції дозволяють обрізати частину рядка. Функція «Лев()» поверне частину рядка з її лівого боку вказаної довжини. Функція «Прав()» аналогічна, але обрізка проводиться праворуч. Функція «Серед()» дозволяє вказати номер символу, з якого буде виділено рядок та його довжину.

Лев («Строкова змінна», 4) // Повертає «Стро»
Прав(«Строкова змінна», 7) // повертає «ременна»
Середовище («Строкова змінна», 2, 5)// повертає «троко»

СтрДліна

Функція визначає кількість символів, які містяться в рядковій змінній.

СтрДліна(«Слово») // результатом виконання буде число 5

Знайти

Функція дає можливість шукати в будь-якій рядковій змінній частині рядка. Як значення, що повертається буде виступати число, яке показує позицію початку знайденого рядка. Якщо збігу не виявлено, повертається нуль.

Зверніть увагу, що пошук здійснюється з урахуванням регістру. Якщо в початковому рядку буде більше одного входження підрядка пошуку, функція поверне початок першого входження.

Знайти («раз, два, раз, два, три», «два») // функція поверне число 6

Порожня стрічка

Використання цієї функції дозволяє визначити, чи є рядок порожнім. Незначні символи, наприклад пробіл, перенесення каретки та інші не враховуються.

ПорожнійРядок(«Пупкін Василь Іванович») // функція поверне значення Брехня
ПорожнійРядок(" ") // функція поверне значення Істина

ВРег, НРег, ТРег

Ці функції дуже корисні при порівнянні та перетворенні рядкових змінних. «Врег()» поверне вихідний рядок у верхньому регістрі, «НРег()» у нижньому, а «Трег()» відформатує його так, що перший символ кожного окремого слова буде з великої літери, а всі наступні з маленької.

ВРег(«ГеНераЛьний ДИРЕКТОР») // значення, що повертається – «ГЕНЕРАЛЬНИЙ ДИРЕКТОР»
НРег(«ГеНераЛьний дИРЕктОр») // значення, що повертається – «генеральний директор»
ТРег(«ГеНераЛьний дИРЕктОр») // значення, що повертається – «Генеральний Директор»

СтрЗамінити

Дана функція є аналогом заміни в текстових редакторів. Вона дозволяє підміняти один символ або набір символів іншим рядковим змінним.

СтрЗаменить(«червоний, білий, жовтий», «,», «;») // поверне «червоний; білий; жовтий»

СтрЧислоРядок

Функція дозволяє визначити кількість рядків, розділених перенесенням каретки у текстовій змінній.

Цикл, у наведеному нижче прикладі, пройде три кола, оскільки функція СтрЧислоРок поверне значення 3:

Для інд = 1 по СтрЧислоРік («Рядок1» + Символи.ПС + «Рядок2» + Символи.ПС + «Рядок3») Цикл
<тело цикла>
КінецьЦикл;

СтрОтриматиРядок

Ця функція працює з багаторядковим текстом так само, як і попередня. Вона дозволяє отримати певний рядок із текстової змінної.

СтрОтриматиСтроку(«Рядок1» + Символи.ПС + «Рядок2» + Символи.ПС + «Рядок3», 2) // поверне «Рядок2»

СтрЧислоВходжень

Функція підраховує кількість входжень символу або підрядки в рядку.

СтрЧислоВкладень(«а;б;в;г;«,«;») // функція поверне число 4

Символ та КодСимволу

Ці функції дозволяють отримувати символ за його кодом у кодуванні Unicode, а також визначати цей код за самим символом.

КодСимволу («А») // функція поверне число 1040
КодСимволу (1040) // функція поверне «А»

Часті завдання під час роботи з рядками

Об'єднання рядків

Щоб об'єднати кілька рядків (здійснити конкатенацію) достатньо використовувати оператор додавання.

"Рядок 1" + "Рядок 2" //результатом складання двох рядків буде "Рядок 1 Рядок 2"

Перетворення типів

Для того, щоб перетворити тип на рядок, наприклад, посилання на елемент довідника, число та інше, достатньо використовувати функцію «Рядок()». Функції, подібні до «СокрЛП()» так само перетворюватимуть змінні в рядок, але вже відразу з відсіченням незначних символів.

Рядок(1000) // поверне «1 000»

Зверніть увагу, що при перетворенні числа в рядок, програма автоматично додала пробіл, що відокремлює тисячу. Для того, щоб цього уникнути, можна скористатися такими конструкціями:

СтрЗаменить(Рядок(1000),Символи.НПП,») // поверне «1000»

Рядок (Формат (1000, "ЧГ =")) // поверне "1000"

Лапки у рядку

Досить часто вам доведеться стикатися з необхідністю вказати у рядковій змінній лапці. Це може бути текст запиту, написаний в конфігураторі, так і просто змінна. Для вирішення цього завдання вам достатньо встановити два символи лапок.

Заголовок = Рядок («ТОВ ««Роги і копита»» - це ми!») // поверне «ТОВ «Роги та копита» - це ми!»

Багаторядність, перенесення рядка

Для того, щоб створити багаторядковий текст, достатньо додати до нього символи перенесення рядка (Символи.ПС).

БагаторядковийТекст = «Перший рядок» + Символи.ПС + «Другий рядок»

Як прибрати прогалини

Для того, щоб прибрати прогалини праворуч або зліва можна скористатися функцією «СокрЛП()» (а також «СокрЛ()» та «СокрП()»):

РядокБезПробілів = СокрЛП(" Багато букв ") // функція поверне значення "Багато букв"

Якщо після перетворення числа в рядок вам потрібно було прибрати нерозривні прогалини, скористайтеся наступною конструкцією:

РядокБезПробілів = СтрЗаменить(Рядок(99999),Символи.НПП,»») // поверне «99999»

Також програмісти часто користуються нижче наведеною конструкцією, яка дозволяє видалити, або замінити на інший символ усі прогалини текстової змінної:

РядокБезПробілів = СтрЗамінити(«прийом», »,») // поверне «привіт»

Порівняння рядків між собою

Порівняти терміни можна звичайним знаком рівності. При порівнянні враховується регістр.

«Здрастуйте» = «здравствуйте» // поверне Брехня
«Здрастуйте» = «Здрастуйте» // поверне Істина
«Здрастуйте» = «До побачення» // поверне Брехня