|   |   | 
| 
 | v7: Функция обработки спецсимволов ↓ (Волшебник 08.01.2025 18:28) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Маленький Вопросик naïve 04.01.25✎ 14:40 | 
        Товарищи, у меня еще к вам один вопрос:
 Подскажите пожалуйста "готовую" функцию по обработки строки со спецсимволами - такими как кавычки, например Спасибо! Речь идет о 7.7 (обработка json) СтрЗаменить - как-то не правильно применять наверное? | |||
| 1
    
        Волшебник 04.01.25✎ 14:45 | 
        СтрЗаменить нормально     | |||
| 2
    
        Lazy Stranger 04.01.25✎ 14:49 | 
        Чем СтрЗаменить не нравится? Мне кажется там больше ничего и не придумать.
 Функция ИсправитьКавычки(стр) Экспорт стр=СтрЗаменить(стр, "\","\\"); стр=СтрЗаменить(стр, "/","\/"); Возврат СтрЗаменить(СокрЛП(стр),"""","\"""); КонецФункции | |||
| 3
    
        DiMel_77 04.01.25✎ 15:19 | 
        (0) 
 Что то типа такого:Функция ЗаменитьНедопустимыеСимволы(Знач Текст, СимволЗамены) Итог = ""; ДлинаСтроки = СтрДлина(Текст); Для НомерСимвола = 1 По ДлинаСтроки Цикл Символ = Сред(Текст, НомерСимвола, 1); КодСимвола = КодСимв(Символ); Если (КодСимвола < 9) Или ((КодСимвола > 10) И (КодСимвола < 13)) Или ((КодСимвола > 13) И (КодСимвола < 32)) Или ((КодСимвола > 55295) И (КодСимвола < 57344)) Тогда Символ = СимволЗамены; КонецЕсли; Итог = Итог + Символ; КонецЦикла; Возврат Итог; КонецФункции | |||
| 4
    
        mishaPH 05.01.25✎ 17:09 | 
        (0) имеешь в виду функцию изоляции символов?     | |||
| 5
    
        Гена 04.01.25✎ 16:02 | 
        Более красиво на мой вкус в одной строке: внутри - СтрРазделить (по спецсимволам), а снаружи - СтрСоединить (по заменному символу)
 Без циклов и Если ) | |||
| 6
    
        Гена 04.01.25✎ 16:21 | 
        т.е. сначала нарезаем бастурму по испачканным кольцам и тут же соединяем через кусочки лаваша...
 Просто мне не нравится перебирать по каждой букве "Войну и мир". Может во всём романе только пару раз корректор не заметил символа "..й!" ) | |||
| 7
    
        Маленький Вопросик naïve 04.01.25✎ 16:51 | 
        Вообще я воспользовался немного модифицированной функцией:
 Функция УбратьЛишниеСимволы(Строка1) Экспорт НовСтрока = ""; ПравильныеСимволы = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю"; Для Сч = 1 по СтрДлина(Строка1) Цикл ТекСимв = Сред(Строка1, Сч, 1); Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда НовСтрока = НовСтрока + ТекСимв; КонецЕсли; КонецЦикла; Возврат НовСтрока; КонецФункции | |||
| 8
    
        Волшебник 04.01.25✎ 16:52 | 
        (7) Вы отлично срезали все пробелы!     | |||
| 9
    
        Маленький Вопросик naïve 04.01.25✎ 16:54 | 
        (8) защита от копипаста     | |||
| 10
    
        Волшебник 04.01.25✎ 17:00 | 
        (9) Ваша функция нахер никому не нужна. Тем более в ней нет буквы Ё     | |||
| 11
    
        Волшебник 04.01.25✎ 17:23 | 
        Я ещё добавлю, что Ваше презрительное 
 >> защита от копипаста не сочетается с сабжем: >> Подскажите пожалуйста "готовую" функцию по обработки строки со спецсимволами - такими как кавычки, например Отсюда я делаю вывод, что Вы не тот, за кого себя выдаёте. | |||
| 12
    
        Волшебник 04.01.25✎ 18:15 | 
        Смотри, как это делается в 21 веке. (копипаст он тут запрещает...)
 промт: На языке 1С напиши функцию УбратьЛишниеСимволы(Строка)
 где лишними считаются все, кроме: - буквы [a-z][A-Z][а-я][А-Я] - пробел - обычные знаки препинания (точка, запятая, скобки и т.п.) Кавычку " замени на \" Вот пример реализации функции УбратьЛишниеСимволы на языке 1С: Функция УбратьЛишниеСимволы(Строка)
    // Создаем строку, содержащую разрешенные символы
    РазрешенныеСимволы = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZабвгдеёжзийклмнопрстуфхцчшщьыъэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ .,(){}[]?!:;-";
    // Заменяем кавычку на \"
    Строка = СтрЗаменить(Строка, """", "\"");
    // Перебираем каждый символ в строке
    ОчищеннаяСтрока = "";
    Для Индекс = 1 По СтрДлина(Строка) Цикл
        Символ = Сред(Строка, Индекс, 1);
        Если Найти(РазрешенныеСимволы, Символ) > 0 Тогда
            // Если символ разрешён, добавляем его в очищенную строку
            ОчищеннаяСтрока = ОчищеннаяСтрока + Символ;
        КонецЕсли;
    КонецЦикла;
    
    Возврат ОчищеннаяСтрока;
КонецФункции
 | |||
| 13
    
        Djelf 04.01.25✎ 18:19 | 
        (11) Он хотел сказать что иногда при копипасте пролезают непечатные симоволы, ниже 32, они не адекватно работают в 7.7
 Достаточно заменить символы <32 и усе будет хорошо. (12) Это из пушки по воробьям. | |||
| 14
    
        MWWRuza 05.01.25✎ 17:30 | 
        Хм... Как у вас все просто...
 Мы же до конца не знаем задачу ТС... Да, если нужно просто вырезать все непечатные символы - то все так. Но, иногда, их нужно сохранить в строках, не смотря на то, что 1с77 это не умеет... (точнее, умеет, в строку в ДБФку можно чего угодно запихнуть, но первое же ТиИ их грохнет). Как частный пример - марки Честного Знака. Они содержат разделители GS1, которые есть в строках марок, и иногда их надо хранить в справочнике... Но, низяяя... Точнее, можно до первого ТиИ. Поэтому, строку марки можно обработать такой функцией: Функция УбратьСпецСимволы(СтрМарки) Стр = СтрЗаменить(СтрМарки, Симв(29), "(GS1)"); Возврат Стр; КонецФункции А потом, когда нужна полная строка со всеми "кракозябрами", напрмер для передачи в ККТ, преобразовать обратно: КТН = СтрЗаменить(СокрЛП(ОбрДок.КТН), "(GS1)", Симв(29)); Это частный случай, именно для марок с GS1, но, принцип я думаю понятен - если нужно сохранить спецсимволы, а не просто их убрать - то меняем их на что-то печатное, а при использовании - преобразовываем обратно, по коду символа. | |||
| 15
    
        Волшебник 05.01.25✎ 17:08 | 
        (14) Вот именно! Из автора получится великолепный партизан! На вопрос "Сколько у вас танков?!" он будет твердить "My name is John Connor"     | |||
| 16
    
        Fedor-1971 08.01.25✎ 09:14 | 
        (12) а цифры? 0-9 и прочее (№, *, &, @ и т.д.)     | |||
| 17
    
        Волшебник 08.01.25✎ 11:19 | 
        (16) ах, да, цифры забыл     | |||
| 18
    
        MWWRuza 08.01.25✎ 11:40 | 
        См. (13) там Djelf все правильно отписал, и проще, и не забудешь ничего.     | |||
| 19
    
        Fedor-1971 08.01.25✎ 12:16 | 
        (18) Не проще, при выгрузке в XML для обмена с 1С8 можно получить нечитаемый файл (будут вываливаться всякие ошибки, типа, недопустимый символ ...), при том, что сам XML корректный
 Решение - оставить только корректные символы, остальные убрать | |||
| 20
    
        MWWRuza 08.01.25✎ 12:29 | 
        (19) Хм... Еще раз перечитал всю тему, но так и не нашел, где там написано "XML для обмена с 1С8"... Как я понял, там нужен JSON - "(обработка json)", при чем, не известно для чего...     | |||
| 21
    
        Fedor-1971 08.01.25✎ 12:33 | 
        (20) Это я пояснил чем лучше перечень допустимых символов перед заменой только некоторых по коду, как в (13)     | |||
| 22
    
        Гена 08.01.25✎ 12:56 | 
        (21) Моё мнение противоположное. Во многих языках некоторые буковки со своими шапочками - замучаешься в список разрешённых вносить. Проще составить список запрещённых и пополнять этот "вектор" на конкретной практике.     | |||
| 23
    
        Волшебник 08.01.25✎ 13:01 | 
        (22) Проще составить список разрешённых, потому что в запрещённых могут оказаться десятки тысяч символов, включая невидимые японские пробелы нулевой ширины (реальный случай из опыта). wiki:Пробел_нулевой_ширины     | |||
| 24
    
        Гена 08.01.25✎ 13:11 | 
        (23) На выбор пользователя, какой механизм ему нужен. 
 Если важно, чтобы функция всегда отрабатывала, но при этом не исключена вероятность пропуска чего-то, не заданного в разрешении - то вектор разрешений. Если же неважна стопудовая отработка, но при этом ничего точно не пропустишь - то вектор запрещений. При вылете - довнос символа в список. | |||
| 25
    
        Злопчинский 08.01.25✎ 13:46 | 
        (22) шапочки называются "умляуты". в русском тоже такие буквы есть - й, ё в  белорусском, например, кроме отсутствующих в русском - есть i и "у нескладовае" (у с шапочкой как у й)     | |||
| 26
    
        Djelf 08.01.25✎ 16:01 | 
        (23) Невидимые японские пробелы нулевой ширины в клюшках? оО     | |||
| 27
    
        Волшебник 08.01.25✎ 17:11 | 
        (26) Они могут оказаться в любых строках, скопированных из интернета.     | |||
| 28
    
        Djelf 08.01.25✎ 17:42 | 
        (27) И как ты копиипастом такое сделпаешь? Для клюшек, разумеется.
 Решение в (13 было озучено). На самом деле (0), как я прочитал в парралельных темах автора(0), нужно просто одиночную ковычку на двойную заменить. Телепатировать сложно... | |||
| 29
    
        Волшебник 08.01.25✎ 17:58 | 
        (28) Да всё уже понятно. Не надо передо мной расстилаться. Вся семёрка должна сдохнуть и чем быстрее, тем лучше.     | |||
| 30
    
        Djelf 08.01.25✎ 18:22 | 
        Зачем оскобляешь в (29)? Я тебе не подстилка. Соблюдай корректность своих постов.     | |||
| 31
    
        Волшебник 08.01.25✎ 18:23 | 
        (30) иди ты нахуй     | |||
| 32
    
        Волшебник 08.01.25✎ 18:28 | 
        и решение своё в (13) засунь себе в жопу. ГОВНОКОД!     | |||
| 33
    
        Гена 08.01.25✎ 18:49 | 
        (28) Тогда решение в (5): 
 текст = СтрСоединить(СтрРазделить(текст,"'"),"""); | |||
| 34
    
        Волшебник 08.01.25✎ 18:53 | 
        (33) Гена, это семёрка     | |||
| 35
    
        Гена 08.01.25✎ 18:55 | 
        (34) А какая разница... не помню, но там же вроде были аналогичные функции )     | |||
| 36
    
        Волшебник 08.01.25✎ 18:58 | 
        (35) Гена, Вы не помните, потому что их там не было!     | |||
| 37
    
        Djelf 08.01.25✎ 19:07 | 
        (31) Уточните на какой конкретно, а то я могу перепутать.
 (32) А где там был код? Проспись уже, зожник... | |||
| 38
    
        Волшебник 08.01.25✎ 19:35 | 
        (37) О, меня уже обвиняют, что я зожник... Мир сошёл с ума.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |