Добрый день всем!
ОФ 8.2

Есть строки такого формата: машина // car , яблоко // apple.

Как вывести раздельно строку на русском и на латинице ?
То есть: 1) машина 2) car ; две строки.
Отсечение строк не подойдёт, ибо у всех реквизитов разная длин наименовании.

Может есть какая-либо функция поиска и вывода латиницы, и наоборот ?
---
Посимвольный перебор и сравнение символа со строкой символов латиницы или кириллицы...

```1c
    КириллическиеСимволы = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЫыЪ­ъЭэЮюЯя";
    ЛатинскиеСимволы = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

    Для НомерСимвола = 1 По ОбщаяДлинаТекста Цикл

    ТекущийСимвол = Сред(ИсходныйТекст, НомерСимвола, 1);

    Если СтрНайти(КириллическиеСимволы , ТекущийСимвол) <> 0 Тогда
    КириллическийТекст = КириллическийТекст + ТекущийСимвол;
    ИначеЕсли СтрНайти(ЛатинскиеСимволы, ТекущийСимвол) <> 0 Тогда
    ЛатинскийТекст = ЛатинскийТекст + ТекущийСимвол;
    КонецЕсли;

    КонецЦикла;
```
---
Очевидно же - до двойного слеша на русском, после на английском, разделитель паттерна - запятая.)
---
Это игра на предположениях. Предположениями пусть искусственный интеллект занимается. А в суровых реалиях строки "ручками набивают девочки и мальчики", и для получения корректного результат нужен качественный перебор.
А попытки экстраполировать видимые два примера на миллион невидимых - это вероятностная лотерея )))
---
В том то и дело. Напишите слово "сосна" латинскими буквами.
---
cocna (cocha) <> сосна, cocka ~ соска, cepa = сера.
---
СОСНА (COCHA), СОСКА(COCKA), СЕРА(CEPA).
---
Это частный случай с написанием в верхнем регистре, на что я и указал.
---
Решение задачи должно подходить для всех случаев. А не только для логически и визуально кажущихся правильными ))
---
Разве я, что-то упоминал по поводу метода решения в данном контексте? Я лишь привел пример на предложение:
(7) Напишите слово "сосна" латинскими буквами.
(16) Только 8.2 уже в гробу вместе с обычными формами...
Смело, если смотреть на используемые до сих пор конфигурации. Я уж молчу о 7.7.
---
это не мешает им доживать свое. Не видел новых внедрений на старых конфигурациях.
---
"им доживать свое" <> "уже в гробу", по крайней мере в моем понимании.
Я бы понял, если бы ими действительно пользовались "последние 3 калеки".
Есть множество крупных организаций, которые до сих пор используют конфигурации на обычных формах, ибо в них есть куча накопившихся за годы доработок, которые так просто скопом в новую конфу не перенести.
---
"им доживать свое" <> "уже в гробу", по крайней мере в моем понимании.И такое бывает. ПО - это очень быстро развивающаяся штуковина. Если нет новых внедрений, а старые доживают свое, то вряд ли такое ПО можно назвать "живым". Это как офис 97, который еще где-то, полагаю. используется, но никто не будет ставить его на новый компьютер.

По поводу 8.2, то люди не переходят с решений на ней на 8.3 только потому, что они не уверены, что режим совместимости, реализованный платформой, будет работать правильно. Но они таким образом и конфигурацию уже давно не обновляют, т.к. современные решения (последние обновления даже УПП 1.3, которая еще поддерживается, но уже опубликовано сообщение о снятии с поддержки) требуют определенных версий платформы. А основная часть конфигураций на обычных формах уже снята с поддержки, что уж там говорить о 8.1 или 7.7. Сложно при таком положении назвать данные продукты "живыми". Они не растут, не размножаются, не эволюционируют - да, можно назвать их "живыми трупами", но не более..
---
Я вам совсем о другом. Вы пытаетесь построить решение на поиске закономерностей видимых исходных данных, и предположить, что невидимы вами данные построены на тех же закономерностях.
Однако в задаче вам никто не говорил, что это строгий формат данных и он используется всегда.
К тому же автор ясно дал понять - ему надо определить латиницу. А не предположить визуально (к вопросу о сосне).
---
автор вообще не дал понять, каков должен быть результат, хотя бы исходя из предоставленного примера.
В качестве примера приведена одна строка или две? Как минимум, что делать с возможными разделителями, запятыми пробелами и т.п.?
---
Посимвольный перебор и сравнение символа со строкой символов латиницы или кириллицы...

```1c
    КириллическиеСимволы = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЫыЪ­ъЭэЮюЯя";
    ЛатинскиеСимволы = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

    Для НомерСимвола = 1 По ОбщаяДлинаТекста Цикл

    ТекущийСимвол = Сред(ИсходныйТекст, НомерСимвола, 1);

    Если СтрНайти(КириллическиеСимволы , ТекущийСимвол) <> 0 Тогда
    КириллическийТекст = КириллическийТекст + ТекущийСимвол;
    ИначеЕсли СтрНайти(ЛатинскиеСимволы, ТекущийСимвол) <> 0 Тогда
    ЛатинскийТекст = ЛатинскийТекст + ТекущийСимвол;
    КонецЕсли;

    КонецЦикла;
```
---
Я бы, наверное, реализовал через КодСимвола и диаппазоны этих кодов, должно быть несколько быстрее.
---
Согласен, но так нагляднее. В любом случае основное здесь - это полный перебор символов и их анализ.
А сам метод определения того - латинский это символ или кришнаитский - просто вопрос религии ))
---
должно быть несколько быстрее медленнее
Следующий код выполняется ~670 мс:

```1c
    ЛатинскиеСимволы = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";
    Для Сч = 1 По 1000000 Цикл ЭтоЛатиница = Найти(ЛатинскиеСимволы, "Я") > 0 КонецЦикла;
```

Следующий код выполняется ~1120 мс:

```1c
    Для Сч = 1 По 1000000 Цикл Код = КодСимвола("Я"); ЭтоЛатиница = (Код >= 65 И Код <= 90) ИЛИ (Код >= 97 И Код <= 125) КонецЦикла
```
---
Набросал код для более объективного теста:

```1c
    &НаКлиенте
    Процедура Вариант1(_Символы)
    ТекДата = ТекущаяУниверсальнаяДатаВМиллисекундах();

    ЛатинскиеСимволы = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

    Для Сч = 1 По 1000000 Цикл
    Позиция = Найти(ЛатинскиеСимволы, _Символы[Сч - 1]);
    ЭтоЛатиница = Позиция > 0
    КонецЦикла;

    Сообщить("Вариант 1: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - ТекДата) + "мс");
    КонецПроцедуры

    &НаКлиенте
    Процедура Вариант2(_Символы)
    ТекДата = ТекущаяУниверсальнаяДатаВМиллисекундах();

    Для Сч = 1 По 1000000 Цикл
    Код = КодСимвола(_Символы[Сч - 1]);
    ЭтоЛатиница = (Код >= 65 И Код <= 90) ИЛИ (Код >= 97 И Код <= 125);
    КонецЦикла;

    Сообщить("Вариант 2: " + (ТекущаяУниверсальнаяДатаВМиллисекундах() - ТекДата) + "мс");
    КонецПроцедуры

    &НаКлиенте
    Процедура Тест(Команда)
    ГСЧ = Новый ГенераторСлучайныхЧисел(1000000);

    Для НомерПопытки = 1 По 3 Цикл
    _Символы = Новый Массив;

    Для Сч = 1 По 1000000 Цикл
    _Символы.Добавить(Символ(ГСЧ.СлучайноеЧисло(1, 200)));
    КонецЦикла;

    Вариант1(_Символы);
    Вариант2(_Символы);
    КонецЦикла;
    КонецПроцедуры
```

Получилось так:
Вариант 1: 10 033мс
Вариант 2: 9 364мс
Вариант 1: 9 145мс
Вариант 2: 9 361мс
Вариант 1: 9 078мс
Вариант 2: 9 323мс
Но меня удивило, что множественное условие "(Код >= 65 И Код <= 90) ИЛИ (Код >= 97 И Код <= 125)" отрабатывает так медленно, сопоставимо с функцией "Найти(ЛатинскиеСимволы, _Символы[Сч - 1])". А с "КодСимвола(_Символы[Сч - 1])" работает еще медленнее, что вообще странно.
---
Видимо потому что КодСимвола() - это фактически точно такой же поиск перебором в системной таблице символов.
---
Либо идет преобразование из Unicode в ASCII, что-то вроде использования "WideCharToMultiByte()" из WinAPI. А потом уже получение его кода.
---
СтрНайти это как ?
---
Это в Синтакс-помощнике.
---
Думаю вопрос был в этом (из СП):
СтрНайти (StrFind)
Доступен, начиная с версии 8.3.6 (в режиме совместимости с версией 8.3.6 и последующими).
В (1) "ОФ 8.2".
---
А, вон чо...
А что там в 8.2 было? Просто Найти() вроде бы...
---
Да, понял. Спасибо. Вот к чему приводит разработки на 8.1 и 8.2 в большей степени..
---
Да, Найти() и два параметра, вместо пяти. Но в указанном примере их хватает.
---
Преобразование значения к типу число не может быть выполнено. Кирилический текст это что?
upd. разобрался..
---
не совсем понял какой нужен конечный результат, но

СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок или СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивСлов
а затем
СтроковыеФункцииКлиентСервер.ТолькоЛатиницаВСтроке
---
лучше использовать функцию глобального контекста: СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>)
---
В 8.2 то?
---
```1c
    Результат = СтрРазделить(СтрокиСоСловами, "/,", Ложь);
    Флаг = Ложь;
    Русское = ";
    Для Каждого Ст ИЗ Результат Цикл
    Если Флаг Тогда Сообщить(СтрШаблон("%1 = %2", Русское, Ст)
    Иначе Русское = Ст
    КонецЕсли;
    флаг = не флаг;
    КонецЦикла;
```

Будет выведено что-то типаМашина = Car
Яблоко = Apple

В 8.2. для этих функций есть БСП, методами которой можно воспользоваться. Только 8.2 уже в гробу вместе с обычными формами, поэтому я даже не подскажу, какими точно, но они отличаются от приведенных выше.

Но вообще в 1С есть многоязыковые строки.
---
Не вводите в заблуждение. В 8.2 нет БСП. И даже в 8.3 нет. Больше скажу - и в 8.5 БСП тоже не планируется.
---
никто и не говорит что в 8.2 есть БСП. Читайте внимательно.
---
Странно, кто бы мог это сказать тогда?
---
для тех, кто не способен включить мозг, иногда что-то может показаться. Как в трудах Канта для человека, который плохо ориентируется в языковых возможностях и смысле, который язык оставляет в тексте.
---
Автор, вообще мастер постановки задач, что в итоге ему конкретно нужно уже додумывают сами, может ему вообще нужно тупо отделить русские слова от английских, или наоборот, если так, то можно посмотреть в сторону регулярок, например, выражение для поиска английских слов: [a-zA-Z]+
---
Лучше воспользоваться всё же разделителями – на практике наименования чего бы то ни было на русском языке могут содержать латинские символы: бренды, маркировки, размеры и т.п.
---
Насколько я понимаю автора - это теоретическая задача на умение работать со строками. А не прикладная. Да, он упоминает про реквизиты наименования, но все равно практический смысл в задаче отсутствует напрочь. В том числе по той же причине, которую вы и указываете.
Предполагаю, конечно, что вопрос стоит в необходимости мультиязычности данных. Но вряд ли это решается через разбиение наименования...
---
Автор, вообще, молча отказывается что-либо комментировать.
Только задает вопросы не по первоначальной теме (как в чате), вместо того, чтобы следовать правилам и создать отдельную по интересующему вопросу.

(28) Последнее сообщение по поводу УПП, которое я видел, собираются и дальше поддерживать. Как раз по причине, что еще достаточно большое количество организаций ее использует.
Что касается версий платформ, то в моем понимании, они являются "живыми" пока их использует большое количество пользователей, пусть даже и в режиме совместимости. Т.е. 7.7, ну да, можно назвать "полумертвым", 8.1 "отмирающим" видом, а вот 8.2 я бы поостерегся еще, так называть. Есть куча отраслевых решений, которые основаны на 8.2 (обычные формы, перетекшие из 8.1) и до сих пор поддерживаются (обновляются), пусть и в режиме совместимости платформы.
Как по мне, это так же, как назвать "(живыми) трупами" всех пенсионеров - большинство не растет, не размножается и уж точно не эволюционирует.
---
Как по мне, это так же, как назвать "(живыми) трупами" всех пенсионеровНу так государство, и, особенно, пенсионные фонды, которые на этих отраслевых решениях работают (хотя наше давно уже на базе БП 3.0), к пенсионерам примерно так и относятся. активно ожидая вестей о безвременной кончине клиента (у них там модели статистически по срокам дожития - будь здоров, а реклама алкоголя и табака - одна из основных строк расходов).
---
Но ведь даже они не делают, по крайней мере публично, таких заявлений. Я именно об этом. Для себя лично, у каждого может быть свое мнение.
---
Но ведь даже они не делают, по крайней мере публично, таких заявлений.Если они сделают такое заявление, то за них перестанут голосовать, а пенсионеры - это значительная часть голосующего электората.
---
Можно регулярными выражениями, будет быстрее и точнее. Главное подобрать шаблон под свою задачу.

```1c
    RegExp = Новый COMОбъект("VBScript.RegExp");// создаем объект для работы с регулярными выражениями
    RegExp.MultiLine = Истина; // истина — текст многострочный, ложь — одна строка
    RegExp.Global = Истина; // истина — поиск по всей строке, ложь — до первого совпадения
    RegExp.IgnoreCase = Истина; // истина — игнорировать регистр строки при поиске

    Шаблон = .........; //шаблон проверки

    RegExp.Pattern = Шаблон; // шаблон (регулярное выражение)

    Если Не RegExp.Test(ПроверяемаяСтрока) Тогда

    КонецЕсли;
```
---
автор с трудом СтрНайти() осваивает, а вы ему COMОбъект-ы, регулярные выражения...
---
Ну с COMОбъектом можно просто скопировать... а регулярки нужно регулярно курить :)
Зато 1-работает быстро,
2-задачу автора решает спокойно,
3-на будущее куча возможностей.
---
Регулярки - сила. Для вдумчивого курения советую добавить себе в закладки сайт: https://regex101.com/
Это онлайн отладчик регулярных выражений. Красиво, цветом подсвечивает совпадения и т.п. Решал задачу поиска телефонных номеров в комментариях - этот сайт просто выручил.
---
notepad++, любой редактор под лынукс, ...
---
предложу свой вариант...
```1c
    КириллическиеСимволы = "АаБбВвГгДдЕеЁёЖжЗзИиЙйКкЛлМмНнОоПпРрСсТтУуФфХхЦцЧчШшЩщЬьЫыЪъЭэЮюЯя";
    ЛатинскиеСимволы = "AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz";

    ЛатинскийТекст = СтрСоединить(СтрРазделить(Строка,КириллическиеСимволы+" ",Ложь)," ");
    КириллическийТекст = СтрСоединить(СтрРазделить(Строка,ЛатинскиеСимволы+" ",Ложь)," ");
```
не 8.2, конечно, но вдруг кому действительно надо...
---
Сообщение было скрыто модератором.