|
v7: Функция обработки спецсимволов 🠗 (Волшебник 08.01.2025 18:28) | ☑ | ||
---|---|---|---|---|
0
Маленький Вопросик
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
Маленький Вопросик
04.01.25
✎
16:51
|
Вообще я воспользовался немного модифицированной функцией:
Функция УбратьЛишниеСимволы(Строка1) Экспорт НовСтрока = ""; ПравильныеСимволы = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnmЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю"; Для Сч = 1 по СтрДлина(Строка1) Цикл ТекСимв = Сред(Строка1, Сч, 1); Если Найти(ПравильныеСимволы, ТекСимв) > 0 Тогда НовСтрока = НовСтрока + ТекСимв; КонецЕсли; КонецЦикла; Возврат НовСтрока; КонецФункции |
|||
8
Волшебник
04.01.25
✎
16:52
|
(7) Вы отлично срезали все пробелы!
|
|||
9
Маленький Вопросик
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) О, меня уже обвиняют, что я зожник... Мир сошёл с ума.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |