Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=23009)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Вся 1С _ Полезные функции для работы со строками

Автор: Vofka 23.04.15, 10:23

Для себя писал несколько функций, которыми периодически пользуюсь. Ничего сверхъестественного, просто полезно иметь что-то такое под рукой. Если у вас есть что-то подобное - можно так же тут выкладывать.

// Возвращает массив цифр в виде стоковых символов
//
Функция ПолучитьМассивЦифровыхСимволов() Экспорт
    
    МассивЦифр = Новый Массив();
    
    МассивЦифр.Добавить("0");
    МассивЦифр.Добавить("1");
    МассивЦифр.Добавить("2");
    МассивЦифр.Добавить("3");
    МассивЦифр.Добавить("4");
    МассивЦифр.Добавить("5");
    МассивЦифр.Добавить("6");
    МассивЦифр.Добавить("7");
    МассивЦифр.Добавить("8");
    МассивЦифр.Добавить("9");
    
    Возврат МассивЦифр;
    
КонецФункции

// Возвращает Истину, если в передаваемой строке есть что-то кроме цифр
//
Функция ЕстьНеЦифры(Строка) Экспорт
    
    МассивЦифр = ПолучитьМассивЦифровыхСимволов();
    
    ЕстьНеЦифры = Ложь;
    Для ъ = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, ъ, 1);
        Если МассивЦифр.Найти(Символ) = Неопределено Тогда
            ЕстьНеЦифры = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Возврат ЕстьНеЦифры;
    
КонецФункции

// Возвращает строку, в которой убирает любые символы, кроме цифр
//
Функция ПолучитьТолькоЦифры(Строка) Экспорт
    
    МассивЦифр = ПолучитьМассивЦифровыхСимволов();
    
    Для ъ = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, ъ, 1);
        Если МассивЦифр.Найти(Символ) = Неопределено Тогда
            Строка = СтрЗаменить(Строка, Символ, " ");
        КонецЕсли;
    КонецЦикла;
    Строка = СтрЗаменить(Строка, " ", "");
    
КонецФункции

// Возвращает Истину, если в передаваемой строке есть буквы
//
Функция ЕстьБуква(Строка) Экспорт
    
    МассивБукв = ПолучитьМассивБукв();
    ЕстьБуква = Ложь;
    Для ъ=1 По СтрДлина(Строка) Цикл
        Буква = ВРег(Сред(Строка, ъ, 1));
        Если МассивБукв.Найти(Буква) <> Неопределено Тогда
            ЕстьБуква = Истина;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Возврат ЕстьБуква;
    
КонецФункции

// Просто возвращает массив наших и латинских букв
//
Функция ПолучитьМассивБукв() Экспорт
    
    МассивБукв = Новый Массив;
    
    МассивБукв.Добавить("А");
    МассивБукв.Добавить("Б");
    МассивБукв.Добавить("В");
    МассивБукв.Добавить("Г");
    МассивБукв.Добавить("Д");
    МассивБукв.Добавить("Е");
    МассивБукв.Добавить("Ё");
    МассивБукв.Добавить("Ж");
    МассивБукв.Добавить("З");
    МассивБукв.Добавить("И");
    МассивБукв.Добавить("Й");
    МассивБукв.Добавить("К");
    МассивБукв.Добавить("Л");
    МассивБукв.Добавить("М");
    МассивБукв.Добавить("Н");
    МассивБукв.Добавить("О");
    МассивБукв.Добавить("П");
    МассивБукв.Добавить("Р");
    МассивБукв.Добавить("С");
    МассивБукв.Добавить("Т");
    МассивБукв.Добавить("У");
    МассивБукв.Добавить("Ф");
    МассивБукв.Добавить("Х");
    МассивБукв.Добавить("Ц");
    МассивБукв.Добавить("Ч");
    МассивБукв.Добавить("Ш");
    МассивБукв.Добавить("Щ");
    МассивБукв.Добавить("Ъ");
    МассивБукв.Добавить("Ы");
    МассивБукв.Добавить("Ь");
    МассивБукв.Добавить("Э");
    МассивБукв.Добавить("Ю");
    МассивБукв.Добавить("Я");
    МассивБукв.Добавить("І");
    МассивБукв.Добавить("Ї");
    МассивБукв.Добавить("Є");
    МассивБукв.Добавить("Ґ");
    
    МассивБукв.Добавить("A");
    МассивБукв.Добавить("B");
    МассивБукв.Добавить("C");
    МассивБукв.Добавить("D");
    МассивБукв.Добавить("E");
    МассивБукв.Добавить("F");
    МассивБукв.Добавить("G");
    МассивБукв.Добавить("H");
    МассивБукв.Добавить("I");
    МассивБукв.Добавить("J");
    МассивБукв.Добавить("K");
    МассивБукв.Добавить("L");
    МассивБукв.Добавить("M");
    МассивБукв.Добавить("N");
    МассивБукв.Добавить("O");
    МассивБукв.Добавить("P");
    МассивБукв.Добавить("Q");
    МассивБукв.Добавить("R");
    МассивБукв.Добавить("S");
    МассивБукв.Добавить("T");
    МассивБукв.Добавить("U");
    МассивБукв.Добавить("V");
    МассивБукв.Добавить("W");
    МассивБукв.Добавить("X");
    МассивБукв.Добавить("Y");
    МассивБукв.Добавить("Z");
    
    Возврат МассивБукв;
    
КонецФункции

// Из передаваемой строки убираются любые не буквенные символы
//
Функция ПолучитьТолькоБуквы(Строка) Экспорт
    
    ВозвращаемаяСтрока = "";
    МассивБукв = ПолучитьМассивБукв();
    
    Для ъ = 1 По СтрДлина(Строка) Цикл
        Буква = ВРег(Сред(Строка, ъ, 1));
        
        Если МассивБукв.Найти(Буква) = Неопределено Тогда
            Продолжить;
        КонецЕсли;
        
        ВозвращаемаяСтрока = ВозвращаемаяСтрока + Сред(Строка, ъ, 1);
    КонецЦикла;
    
    Возврат ВозвращаемаяСтрока;
    
КонецФункции

Автор: sava1 23.04.15, 10:35

Про Регулярные выражения слышали ?

Автор: Petre 23.04.15, 10:41

Цитата(sava1 @ 23.04.15, 11:35) *
Про Регулярные выражения слышали ?

Расскажите о регулярных выражениях в 1с на Линукс.

Автор: sava1 23.04.15, 10:42

Не пользую

Автор: Vofka 23.04.15, 10:45

Слышали. Но для них, как минимум, нужно использовать COM объект, а это использование не родного функционала платформы (я не говорю, что это есть какая-то большая проблема, но в Линуксе, например, работать оно в таком случае не будет). Конечно, во многих случаях на это можно забить. Ну и лично я в регулярных выражениях не шибко силен и мне удобнее использовать подобные функции.

Автор: Petre 23.04.15, 10:55

Регулярные выражения - очень мощный инструмент. Но в большинстве случаев необходимо отдавать предпочтение штатным возможностям 1с. В конце концов проблема не только в Линукс, но и в доменных политиках, в тонких и веб-клиентах...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua