Что такое строка в 1с? Строка 1c — это тип данных, значения которого представляют собой произвольную последовательность символов. В исходном коде строка представляет собой набор символов, заключенных в двойные кавычки.
Например, строка «1с» состоит из символов 1 и С.
Функции работы со строками 1С
Список и описание работы с основными строковыми функциями можно найти в синтаксическом помощнике 1с. Его можно вызвать в режиме 1с Конфигуратор через пункт меню «Помощь» или нажатием клавиш CTRL+SHIFT+F1. Ниже мы рассмотрим решение практических задач, связанных с обработкой строковых значений.
Как найти все символы русского алфавита?
// Ищем код первой буквы в алфавите report(CharacterCode("a",1)); // результат = 1072 // снова пропускаем символы с 1072 по 1104 (1072+33 буквы в алфавите и минус 1, т.к символ 1072 тоже считается) Alphabet=""; Для цикла от n=1072 до 1104 //запись всех символов в строку Alphabet=Alphabet+characters(n); конец цикла; Отчет(СилаДлина(Алфавит)); // количество символов 33 Report(Alphabet); // результат абвгдезийклмнопростуфхчшщщыеюя // последний символ ё не подходит, заменяем его на букву ё и ищем букву е // убираем ненужный символ Alphabet=StrReplace(Alphabet,"ё",""); // позиция буквы ei в алфавите PosE=StrFind(alphabet,"e"); // алфавит от а до е AlphabetAE=left(Alphabet,PosE)+"ё"; // алфавит от z до e AlphabetYE=Right(Alphabet,strLength(Alphabet)-PosE); LowercaseAlphabet=АлфавитAE+АлфавитYE; CapitalAlphabet=Wreg(LowerAlphabet); // строчные буквы алфавита // прописные буквы алфавита // вводить алфавит можно только с клавиатуры, но задача научиться работать со строковыми функциями 1с
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 64 3 5 | // Ищем код первой буквы в алфавите report(CharacterCode("a",1)); // результат = 1072 // снова пропускаем символы с 1072 по 1104 (1072+33 буквы в алфавите и минус 1, т.к символ 1072 тоже считается) Alphabet=""; Для цикла от n=1072 до 1104 //запись всех символов в строку Alphabet=Alphabet+characters(n); конец цикла; Отчет(СилаДлина(Алфавит)); // количество символов 33 Report(Alphabet); // результат абвгдезийклмнопростуфхчшщщыеюя // последний символ ё не подходит, заменяем его на букву ё и ищем букву е // убираем ненужный символ Alphabet=StrReplace(Alphabet,"ё",""); // позиция буквы ei в алфавите PosE=StrFind(alphabet,"e"); // алфавит от а до е AlphabetAE=left(Alphabet,PosE)+"ё"; // алфавит от z до e AlphabetYE=Right(Alphabet,strLength(Alphabet)-PosE); LowercaseAlphabet=АлфавитAE+АлфавитYE; CapitalAlphabet=Wreg(LowerAlphabet); // строчные буквы алфавита // прописные буквы алфавита // вводить алфавит можно только с клавиатуры, но задача научиться работать со строковыми функциями 1с |
Как найти гласные и согласные буквы в строке 1с ?
// функция для определения, какая это буква. Функция WhatLetter(Письмо) Гласные="aeeiouyeyuya"; Согласные = "bvgjzyklmnprstfhtschshsch"; Нет звука = "б"; // ищем вхождение буквы в группы гласных и согласных If StrFind(Vowels,HReg(Letter))>0 Then return("Vowel"); ElseIf StrFind(Согласные, NReg(Буква))>0 Then Return("Согласная"); ElseIf StrFind(Silent,NReg(Letter))>0 Then Return("Silent"); В противном случае return("NonRussianAlphabet"); Конец о; Процедура завершения функции MainActionsFormsVowels(Button)StringTextText="Гласные и согласные и английский язык 2019 И ЗНАКИ:ЪЬ"; // удалить все пробелы с помощью StringTextWithoutSpaces=StrReplace(StringWithText," ",""); // определяем переменные StringWithVwels=""; Строковые согласные=""; СтрокаТихая=""; СтрокаДругое=""; // пропускаем все буквы в строке и определяем, какая это буква для n = 1 в цикле StrLength(StringTextWithoutSpaces) If WhatLetter(Average(StringTextWithoutSpaces,n,1)) = "Vowel" then 1) ; Продолжить; Конец, если; Если КакойБуквой(С(СтрокаСТекстомБезПробелов,n,1)) = "Согласная", то СтрокаССогласными=СтрокаССогласными+С(СтрокаСТекстомБезПробелов,n,1); Продолжить; Конец Если; Если КакойБуквой(С(СтрокаСТекстомБезПробелов, n, 1). ,n,1); End if; EndCycle; Notify("StringWithVwels:"+StringWithVwels); Report("LineWithConsonants:"+StringWithConsonants); Notify("StringSilent:"+StringSilent); Notify("StringOthers :"+StringOthers) ; // Результат: //StringTextText="Гласные и согласные onant & english 2019 И ЗНАКИ:ЪЬ"; //Строка с гласными: ayeioayeyyyAnd //Строка с согласными: Glsnsglsnbq //StringSilent: bb //StringOthers:&English2019ZNAKI: EndProcedure
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3 4 5 4 3 4 5 4 4 3 4 5 4 5 4 5 54 55 56 57 58 59 60 61 62 63 | // функция для определения, какая это буква. Функция WhatLetter(Письмо) Гласные="aeeiouyeyuya"; Согласные = "bvgjzyklmnprstfhtschshsch"; Нет звука = "б"; // ищем вхождение буквы в группы гласных и согласных If StrFind(Vowels,HReg(Letter))>0 Then return("Vowel"); ElseIf StrFind(Согласные, NReg(Буква))>0 Then Return("Согласная"); ElseIf StrFind(Silent,NReg(Letter))>0 Then Return("Silent"); В противном случае return("NonRussianAlphabet"); Конец о; Процедура завершения функции MainActionsFormsVowels(Button)StringTextText="Гласные и согласные и английский язык 2019 И ЗНАКИ:ЪЬ"; // удалить все пробелы с помощью StringTextWithoutSpaces=StrReplace(StringWithText," ",""); // определяем переменные StringWithVwels=""; Строковые согласные=""; СтрокаТихая=""; СтрокаДругое=""; // пропускаем все буквы в строке и определяем, какая это буква для n = 1 в цикле StrLength(StringTextWithoutSpaces) If WhatLetter(Average(StringTextWithoutSpaces,n,1)) = "Vowel" then 1) ; Продолжить; Конец, если; Если КакойБуквой(С(СтрокаСТекстомБезПробелов,n,1)) = "Согласная", то СтрокаССогласными=СтрокаССогласными+С(СтрокаСТекстомБезПробелов,n,1); Продолжить; Конец Если; Если КакойБуквой(С(СтрокаСТекстомБезПробелов, n, 1). ,n,1); End if; EndCycle; Notify("StringWithVwels:"+StringWithVwels); Report("LineWithConsonants:"+StringWithConsonants); Notify("StringSilent:"+StringSilent); Notify("StringOthers :"+StringOthers) ; // Результат: //StringTextText="Гласные и согласные onant & english 2019 И ЗНАКИ:ЪЬ"; //Строка с гласными: ayeioayeyyyAnd //Строка с согласными: Glsnsglsnbq //StringSilent: bb //StringOthers:&English2019ZNAKI: EndProcedure |
Как исправить написание каждого отдельного слова в строке 1c с заглавной буквы (например ФИО)?
ФИО = "ИВАНОВ ИВАН МИХАЙЛОВИЧ"; Уведомить (TReg (полное имя)); //Результат: Иванов Иван Михайлович
1 2 3 | ФИО = "ИВАНОВ ИВАН МИХАЙЛОВИЧ"; Уведомить (TReg (полное имя)); //Результат: Иванов Иван Михайлович |
Как часто встречается символ или слово в строке 1с
ФИО = "Иванов Иван Михайлович"; Уведомить(StringNumberOccurrences(Имя, "Иван")); //Результат: 2
1 2 3 | ФИО = "Иванов Иван Михайлович"; Уведомить(StringNumberOccurrences(Имя, "Иван")); //Результат: 2 |
Какая строка 1с больше по длине?
Line1="Сначала строки 1 для сравнения"; Line2="Вторая строка для сравнения"; Если StrLength(String1) StrLength(String2) then Report("Первая строка больше второй."); Else Report("Первая строка такой же длины, как и вторая."); Конец о; //Результат Первая строка больше второй.
1 2 3 4 5 6 7 8 9 10 | Line1="Сначала строки 1 для сравнения"; Line2="Вторая строка для сравнения"; Если StrLength(String1) StrLength(String2) then Report("Первая строка больше второй."); Else Report("Первая строка такой же длины, как и вторая."); Конец о; //Результат Первая строка больше второй. |
Как переставить слова местами в строке 1с?
SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); // разбираем строку в массивWordsArray=StrSplit(OriginalString," "); //выгружаем массив в таблицу значений и сортируем в обратном порядке Table = New ValueTable; Таблица.Столбцы.Добавить("Порядок"); Таблица.Столбцы.Добавить("Слово"); порядок=0; Для каждого элемента из цикла ArrayWords Order=Order+1; StringT3 = Таблица.Добавить(); StringTZ.Order = Заказ; String.Words = Элемент; Конец цикла; Table.Sort("По убыванию"); МассивСлов = Таблица.ВыгрузитьКолонку("Слова"); //Преобразуем массив обратно в строку StringAfterSort=StringConnect(ArrayWords," "); Отчет(StringAfterSort); //Результат //Стало: Мама вырыла яму, папа вырыл канаву //Стало: Папа вырыл канаву, мама вырыла
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); // разбираем строку в массивWordsArray=StrSplit(OriginalString," "); //выгружаем массив в таблицу значений и сортируем в обратном порядке Table = New ValueTable; Таблица.Столбцы.Добавить("Порядок"); Таблица.Столбцы.Добавить("Слово"); порядок=0; Для каждого элемента из цикла ArrayWords Order=Order+1; StringT3 = Таблица.Добавить(); StringTZ.Order = Заказ; String.Words = Элемент; Конец цикла; Table.Sort("По убыванию"); МассивСлов = Таблица.ВыгрузитьКолонку("Слова"); //Преобразуем массив обратно в строку StringAfterSort=StringConnect(ArrayWords," "); Отчет(StringAfterSort); //Результат //Стало: Мама вырыла яму, папа вырыл канаву //Стало: Папа вырыл канаву, мама вырыла |
Как выбрать инициалы из полного ФИО в 1с?
ФИО = "Иванов Иван Михайлович"; Отчет (ФИО); // разбираем строку в массивWordsArray=StrSplit(fullname," "); Первый=истина; Для каждого слова из цикла "Массив слов" // Фамилия (первое слово не меняется) Если не первое, то Finalals=Finitials+Lev(Word, 1)+""; В противном случае Finals=Word+" "; Первый = Ложь; Конец о; конец цикла; Отчет(Финал); //Раньше: Иванов Иван Михайлович //Стало:Иванов И.М.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ФИО = "Иванов Иван Михайлович"; Отчет (ФИО); // разбираем строку в массивWordsArray=StrSplit(fullname," "); Первый=истина; Для каждого слова из цикла "Массив слов" // Фамилия (первое слово не меняется) Если не первое, то Finalals=Finitials+Lev(Word, 1)+""; В противном случае Finals=Word+" "; Первый = Ложь; Конец о; конец цикла; Отчет(Финал); //Раньше: Иванов Иван Михайлович //Стало:Иванов И.М. |
Как перевернуть строку в 1с?
SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); //перебираем строку посимвольно, начиная с конца и вставляем их в новую строку NumberLastCharacter=StrLength(OriginalString); СтрокаПослеСортировки=""; в то время как NumberLastCharacter>0 Цикл StringAfterSort = StringAfterSort + Среднее (исходная строка, NumberLastCharacter, 1); // CTRL+ALT +Break для разрыва цикла NumberLastCharacter=NumberLastCharacter-1; ДействиеПользовательского Прерывания(); Конец цикла; Отчет(StringAfterSort); //Результат//Было: Мама вырыла яму, папа вырыл канаву//Стало: уванак лыр апап, умный алыр амаМ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); //перебираем строку посимвольно, начиная с конца и вставляем их в новую строку NumberLastCharacter=StrLength(OriginalString); СтрокаПослеСортировки=""; в то время как NumberLastCharacter>0 Цикл StringAfterSort = StringAfterSort + Среднее (исходная строка, NumberLastCharacter, 1); // CTRL+ALT +Break для разрыва цикла NumberLastCharacter=NumberLastCharacter-1; ДействиеПользовательского Прерывания(); Конец цикла; Отчет(StringAfterSort); //Результат//Было: Мама вырыла яму, папа вырыл канаву//Стало: уванак лыр апап, умный алыр амаМ |
Как найти самое длинное слово в строке 1с
SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); // разбираем строку в массивWordsArray=StrSplit(OriginalString," "); //загружаем массив в таблицу значений и находим длину каждого слова Table = New ValueTable; Таблица.Столбцы.Добавить("Длина"); Таблица.Столбцы.Добавить("Слово"); порядок=0; Для каждого элемента из цикла ArrayWords Order=Order+1; StringT3 = Таблица.Добавить(); StringTZ.length = StrLength(элемент); String.Words = Элемент; Конец цикла; // Сортировка по длине - первое слово в таблице будет самым длинным Table.Sort("Length Desc"); Report("Самое длинное слово: "+Table[0].Words); //Результат //Это было: Мама вырыла яму, папа вырыл канаву //Самое длинное слово: канава
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | SourceString="Мама вырыла яму, папа вырыл канаву"; Уведомить(ИсходнаяСтрока); // разбираем строку в массивWordsArray=StrSplit(OriginalString," "); //загружаем массив в таблицу значений и находим длину каждого слова Table = New ValueTable; Таблица.Столбцы.Добавить("Длина"); Таблица.Столбцы.Добавить("Слово"); порядок=0; Для каждого элемента из цикла ArrayWords Order=Order+1; StringT3 = Таблица.Добавить(); StringTZ.length = StrLength(элемент); String.Words = Элемент; Конец цикла; // Сортировка по длине - первое слово в таблице будет самым длинным Table.Sort("Length Desc"); Report("Самое длинное слово: "+Table[0].Words); //Результат //Это было: Мама вырыла яму, папа вырыл канаву //Самое длинное слово: канава |
Как узнать английскую букву в строке 1с?
Function ThisLatin(Letter) // Латинские символы Юникода имеют коды от 65 до 90 и от 97 до 122. Если CharacterCode(Letter,1)>=97 и CharacterCode(Letter,1)=65 andCharacterCode(Letter,1) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 Function ThisLatin(Letter) // Латинские символы Юникода имеют коды от 65 до 90 и от 97 до 122. Если CharacterCode(Letter,1)>=97 и CharacterCode(Letter,1)=65 andCharacterCode(Letter,1).
