Вход | Регистрация
    1  2
1С:Предприятие :: 1С:Предприятие 8 общая

Быстрое удаление излишних пробелов, в т.ч. табуляций и т.п.. Какие есть варианты?

Быстрое удаление излишних пробелов, в т.ч. табуляций и т.п.. Какие есть варианты?
Я
   bolobol
 
19.04.19 - 10:18
Добрый утро!

Необходимо из текста кода убрать излишние пробелы, в т.ч. табуляции и т.п.
Быстрое удаление интересует. Какие известны варианты?

Спасибо!
 
 
   Garykom
 
101 - 19.04.19 - 16:11
(100) Ты понимаешь что для этой простейшей задачи регэкспы (движка которых в 1С нет из коробки) не нужны.

И хватит простейшего кода в несколько строчек?
   Garykom
 
102 - 19.04.19 - 16:13
Например твой регэксп как обработает?

Моя_Переменая  =  "Текст_сообщения""c_кавычками_внутри"" -// = не__комментарий \ //  """  //  Комментарий  к  этой  строке  "со  строкой  //  и  "не  комментарием"  !
   Garykom
 
103 - 19.04.19 - 16:15
(102)+ И еще могу разных символов навставлять, которые не " " и не Символ(9)
   Вафель
 
104 - 19.04.19 - 16:33
(99) на регэкспах далеко не уедешь.
ибо это путь райт-онли
   Вафель
 
105 - 19.04.19 - 16:35
вот же quest писал такое
JFlex + CUP – генерация кода на 1С.  Востребовано?
как раз по теме (0)
   bolobol
 
106 - 19.04.19 - 16:40
(103) И чо? В чём смысл ваших сообщений?
   bolobol
 
107 - 19.04.19 - 16:41
(102) Ссылки на тестирование работы приводились. Я пользуюсь этим: https://regex101.com
   fisher
 
108 - 19.04.19 - 16:47
Вспомнилось: "Если у вас есть проблема и вы собираетесь ее решать с помощью регулярных выражений, то теперь у вас две проблемы"
   Mr_Rm
 
109 - 19.04.19 - 16:59
(100) Т.е. пробелы внутри строк тоже сокращаются. Тогда неинтересно.
   bolobol
 
110 - 19.04.19 - 17:00
Однако, почему-то 1С на данную конструкцию ругается, синтакс еррор... мдя..
   Mr_Rm
 
111 - 19.04.19 - 17:03
(110) Точка с запятой - на следующей строке. С ней все нормально.
   bolobol
 
112 - 19.04.19 - 17:08
Что за шайтанство - синтакс еррор (0x800a1399) на "((?<=[^а-яА-ЯёЁa-zA-Z\s\xA0])[\s\xA0]+)|([\s\xA0]+(?=[^а-яА-ЯёЁa-zA-Z\s\xA0]))|((?<=^|[\s\xA0])[\s\xA0]+)|([\s\xA0]+$)" и всё норм лишь на "[\s\xA0]+"?
   fisher
 
113 - 19.04.19 - 17:32
(112) Добро пожаловать в прекрасный мир различных диалектов regexp :)
Начать с того, что в VBScript.RegExp кажись "|" не поддерживается.
   fisher
 
114 - 19.04.19 - 17:36
Хотя нет, в группах поддерживается...
   bolobol
 
115 - 19.04.19 - 17:41
?<= не поддерживается, но пояснений нет пока....
   fisher
 
116 - 19.04.19 - 17:55
Задача какая? Заменить множественные табуляции и пробелы на одиночные пробелы и табуляции? Может, подойдет все пробельные последовательности заменить на одиночные пробелы? Выражение было бы простейшим. Но я бы все равно регекспами в 1С это не решал. Во всяком случае до тех пор, пока их в платформу не засунут.
   bolobol
 
117 - 19.04.19 - 18:05
См. (0)
Упёрлись в то, что не найти пробельную последовательность, идущую после символа к букве, конструкция ?<= не работает, и замены её я не вижу.
   bolobol
 
118 - 19.04.19 - 18:06
*просто "после символа", без разницы до куда.
   Garykom
 
119 - 19.04.19 - 18:32
(117) Ты понимаешь то замена двух пробелов на один дает всегда один пробел, сколько ее раз не применяй?

А можно таб+пробел > пробел, пробле+таб > пробел и т.д. заменять несколько раз.
И будет тебе что требуется простейшим образом без извратов.

Хорош уже прикалываться у тебя задачка простейшая (раз внутри констант тоже меняем), регэкспы нафик не нужны как и синтаксические анализаторы с парсерами.
   Сияющий в темноте
 
120 - 19.04.19 - 18:42
длстп=СтрДлина(СтрокаДляОбработки);
Начало=НЕОПРЕДЕЛЕНО;
Состояние=1;
Для Поз=1 ПО длстр Цикл
 код=КодСимвола(СтрокаДляОбработки,Поз);
 Если ЭтоСимволПробела(код)=ИСТИНА Тогда
  Если Начало<>НЕОПРЕДЕЛЕНО Тогда
   рез=рез+Сред(СтрокаДляОбработки,Начало,Поз-Начало);
   Начало=НЕОПРЕДЕЛЕНО;
  КонецЕсли;
  Если Состояние=2 Тогда
   Состояние=3;
  КонецЕсли;
 ИначеЕсли Начало=НЕОПРЕДЕЛЕНО Тогда
  Если Состояние=3 Тогда
   рез=рез+" ";
  КонецЕсли;
  Состояние=2;
  Начало=Поз;
 КонецЕсли;
КонецЦикла;
Если Начало<>НЕОПРЕДЕЛЕНО Тогда
 рез=рез+Сред(СтрокаДляОбработки,Начало);
КонецЕсли;
// рез-наша строка.
   bolobol
 
121 - 22.04.19 - 09:30
(119) Не понял, о чём вы вообще. Какие два пробела? Если задача простейшая, то где ответ за 116 постов, может, у вас есть?
   bolobol
 
122 - 22.04.19 - 09:31
(120) Так и не рассмотрел, в чём секрет. Читаю-читаю, получается у меня, что "это строка" вашим кодом превратится в "этострока".
   bolobol
 
123 - 22.04.19 - 09:34
+к 122: (120) Независимо от того, что скрывается под ЭтоСимволПробела(), т.к. туда сама строка не передаётся, предыдущий, последующий символ - тоже. Да и данный код на 10000 строках - любой сервер обескуражит.
   Garykom
 
124 - 22.04.19 - 09:37
(121) 1. Если в комментариях и внутри значений строковых переменных можно и нужно удалять пробелы - задача простейшая.

2. Если эти лишние пробелы внутри значений строковых переменных (Перем1 = "Вася  ты <tab> зачем пробелы тут убрал    ?";) надо сохранить - задача нереально сложная.
   bolobol
 
125 - 22.04.19 - 10:08
(124) А задачу читали? Она в (0) описана, да и в заголовке тоже.
И даже решение, при помощи волшебного пинка в сторону регексп - разработано, но не работает на ВБСкрипт.Регексп. Нужен аналог команды "?<=<данные>", работающий в ВБСкрипт.Регексп, команды "поиск последовательности только в том случае, если перед последовательностью <данные>"
   Garykom
 
126 - 22.04.19 - 10:13
(125) 1. Ну скажи где в (0) описано (момент со строковыми значениями переменных), неоднократно этот вопрос задавали.

2. Все что вы смогли (точнее не смогли) сделать через регулярки, делается простейше через СтрЗаменить.
И про это вам сразу и сказали. Но кто то или не слышит или притворяется и троллит.
   bolobol
 
127 - 22.04.19 - 10:19
(126) Троллите, пока что, вы меня. В (0) описано что делать со строкой. Пример был дан в течении постов, решение примера, который мне предложили, с вопросом "Что должно получиться?". Что не понятно в части "излишние пробелы"? Какая разница, в тексте они, в строке, в числе?
   Garykom
 
128 - 22.04.19 - 10:32
(127) >Что не понятно в части "излишние пробелы"? Какая разница, в тексте они, в строке, в числе?

У нас походу недопонимание. Я считал вас программистом. Ошибался, сорри.
   bolobol
 
129 - 22.04.19 - 10:42
(128) Взаимно, не отчаивайтесь))
   Garykom
 
130 - 22.04.19 - 10:49
(129) Просто кое кто недоговаривает и не правильно понимает задачу.

Судя по (61) где "25000 модулей не проверишь глазами." вам нужен именно (33) а простыми регэкспами задачку не решить.

Потому что внутри "25000 модулей" точно будут "строковые значения переменных" с "лишними символами внутри".
 
 
   bolobol
 
131 - 22.04.19 - 12:48
(130) Предложение в 33 излишне для данной задачи. "строковые значения переменных" с из"лишними символами внутри" - почувствуйте разницу - вполне укладываются в задачу. Мне не понятно, что вам не понятно в слове "излишние".
   bolobol
 
132 - 22.04.19 - 12:52
Излишний:
1. превышающий нужное количество чего-либо, потребность в чём-либо; избыточный, чрезмерный.
2. такой, без которого можно обойтись; ненужный.
3. перен. такой, присутствие которого нежелательно
- не вижу противоречий даже при наличии столь интересных вам "строковых значений переменных"
   Garykom
 
133 - 22.04.19 - 12:53
(131) Мне непонятно что вам непонятно если простое и понятное решение приводилось несколько раз.

А с учетом "25000 модулей не проверишь глазами." - это же ваши слова да?

Вы к сожалению неправильно понимаете задачу, что подтверждается попытками использовать регулярки вместо банальной замены по простому шаблону.

Но регулярными выражениями требуемый анализатор написать конечно можно... Но его эффективность будет никакая, потому что регулярки это уже конечный автомат по сути.
   Garykom
 
134 - 22.04.19 - 12:54
(132) Вы мне напоминаете личностей которые да на словах то много говорят и вроде бы даже умно.
Но как поймешь так чушь полная и на деле ничего не могут. Кроме копипастой заниматься.
   Вафель
 
135 - 22.04.19 - 13:09
ну что уже прикрутили парсер или все еще на регэкспах пишите?
   bolobol
 
136 - 22.04.19 - 14:38
(134) Пока что - на деле именно вы себя показываете так, вместо чего-то по теме - пустой трёп ниочём.
Забавно читать, что вы указываете мне, постановщику задачи, что я не правильно понимаю её постановку - это финиш, мистянин! Далее уж лучше и не продолжать троллить.

(135) Я уже неоднократно писал, что на 1С парсер не справится. А регексп - не даёт необходимой функциональности, обратной информации не поступало.
   bolobol
 
137 - 22.04.19 - 14:40
Шанс на ВК остаётся. Правда, если бы хоть конструктор какой, типа "код на Си вставляешь и компилишь"...
   bolobol
 
138 - 22.04.19 - 14:53
О, нашёл и про ВК. Но, не сегодня))
   Garykom
 
139 - 22.04.19 - 15:04
(136) (137) (138) Гыгы. Все с вами понятно, свой ник оправдали на 200%
   MouHacTaBHuk
 
140 - 22.04.19 - 15:06
(0) слишкоммногасообщений уже. Предложу решение, если оно нужно разово:
- копируем код в sublime text3
- ставим плагин для понимания синтаксиса 1С, и выбираем View - Syntax - Language 1C (BSL) - 1C (BSL)
- заменяем "<space><space>" на "<space>" до тех пор пока не станет "вхождений не найдено"
- то же самое делаем с "<tab><tab>"
- то же самое делаем с ненужными непечатными символами (не думаю что их великое разнообразие оказалось в коде)
- затем нажимаем Edit - Line - Reindent и код выстроится с необходимой табуляцией.
   Кирпич
 
141 - 22.04.19 - 15:23
Любой нормальный человек молча решит эту задачу за час и никого не спросит. Но мы наколотим ветку в тыщу постов с регехпами и парсерами :)
Господа, вы звери.
   Garykom
 
142 - 22.04.19 - 15:27
(141) Час это уже с выполнением кода на 25000 файлах, писать тут минут 10 максимум.
   Garykom
 
143 - 22.04.19 - 15:28
(142)+ Если конечно снова не всплывет вопрос что иногда лишние пробелы надо оставлять.
   Кирпич
 
144 - 22.04.19 - 15:32
(143) ага. или высплывет вопрос "а нафиг оно вообще надо? и так сойдет"
   Cyberhawk
 
145 - 22.04.19 - 15:34
А про какой парсер тут речь в последних 10 постах? Всю ветку не читал, сорри
   Garykom
 
146 - 22.04.19 - 15:38
(144) Ну меня пугает мысль что вот эти лишние символы это некая DRM система хитрая или цифровой подписи и кто пытается ее снять.
Иначе нафига их убирать если и так все работает?
   Garykom
 
147 - 22.04.19 - 15:39
(145) См (102) я так и не понял надо ли убирать
Перем ="1     2";
лишние пробелы тут внутри значения строковой переменной.
   Garykom
 
148 - 22.04.19 - 15:39
(147) сорри *"лишние пробелы"
   Кирпич
 
149 - 22.04.19 - 15:55
(147) ну уж конечно не надо убирать. это же текст программы. в строковых константах оставлять однозначно
   bolobol
 
150 - 22.04.19 - 16:01
(141) Так - предложите же, хотя бы, принципиальное решение, или вы не "нормальный человек"?
(145) Ну, парсер - не парсер, но регексп уже попытался заюзать - недостаточен функционал у ВБСкрипт.Регексп оказался.
(149) Кто такую глупость вам сказал? В этой строке - все видимые глазом пробелы - излишние.
   Cyberhawk
 
151 - 22.04.19 - 16:05
(147) (150) Так под "парсером" подразумевается надстройка, выполняющая-обрабатывающая код как текст что ли?
   bolobol
 
152 - 22.04.19 - 16:10
(151) "Я не в курсе, ребята!" ))
Но - обработать нужно текст, являющийся кодом 1С.
   Garykom
 
153 - 22.04.19 - 16:16
(152) Ну так заплати и тебе все сделают как надо.
Или любимое домашнее животное возмущается?
   Cyberhawk
 
154 - 22.04.19 - 16:20
(152) "обработать нужно текст, являющийся кодом 1С" // Выгрузить конфу в файлы, обработать кодом 1С уже предлагали? :)
   Garykom
 
155 - 22.04.19 - 16:30
(154) Чуть реже чем замену "  " на " " и "<tab><tab>" на " "
   Кирпич
 
156 - 22.04.19 - 17:08
(150) "В этой строке - все видимые глазом пробелы - излишние."
так программа неправильно работать будет, если удалить эти пробелы. или вам пробелы удалять чисто из спортивного интереса?
   bolobol
 
157 - 22.04.19 - 17:51
(156) Не пойму, потеря какого из пробелов вызывает у вас опасение за работу программы?
   akronim
 
158 - 22.04.19 - 18:02
Хороший ТС, и вопросы интересные.
(150) "В этой строке - все видимые глазом пробелы - излишние"
Ок, какие лишние пробелы в строке
"ВЫБРАТЬ * ИЗ Документ.ЗаказПокупателя"
?
   Garykom
 
159 - 22.04.19 - 18:17
(158) "ВЫБРАТЬ * ИЗ Документ.ЗаказПокупателя Как Заказ ГДЕ Заказ.Номер Подобно ""%  %"""
   lodger
 
160 - 22.04.19 - 18:33
(158) имхо, в этой строке нет лишних символов.
(159) тут тоже, ведь кавычки не "излишние пробелы, в т.ч. табуляции и т.п."
   Garykom
 
161 - 22.04.19 - 18:51
(160)
Внутри ""%  %"" у мен два пробела и отличается визуально слегка от
Внутри ""% %"" один пробел
   quest
 
162 - 22.04.19 - 19:13
(136) тут парсер даже не нужен. это тупо лексер. голимый лексер который на коленке пишется за вечер. С чтением документациии и перерывами на попить пивка - два вечера. Но ты уперся в регэкспы... Они не работают с твоей задачей, не для этого предназначены регэкспы, но ты упорно пытаешься их прикрутить. И еще обижаешься когда тебе указывают на твои ошибки.
   Garykom
 
163 - 22.04.19 - 19:24
(162) Тут задачку надо от обратного решать, искать через регулярки то что не надо чистить.
Регулярка должна вернуть набор подстрок которые не правятся.
Далее ищем эти подстроки по очереди в тексте, выделяем кодом то что между ними и правим заменой.

Но ТС не справится.
   Garykom
 
164 - 22.04.19 - 19:25
(163)+ Но да это тот же лексер, только неполный и на регэкспах
   quest
 
165 - 22.04.19 - 19:39
(163) Это задача  сводится к другой - pretty-print. Т.е. имея код преобразовать его в поток лексем, затем этот поток вывести на печать. ТС в конце-концов придет к этой задаче, потому что следующим требованием будет - быстро найти и исправить неверное написание ключевых слов (там где ключевые слова отличаются от их канонического написания) , затем найти и исправить отличия в именах типов, затем проанализировать наличие комментариев.. Просто ТС пока этого не понимает и думает что все закончится на пробелах и табах.
Ну а твое предложение - от обратного - вообще за гранью добра и зла.
   Кирпич
 
166 - 23.04.19 - 08:16
(157) если пользователь получит сообщение "Файлненайден.Проверьтеправильностьименифайлаиповторитепопытку.", то это нормально.
 
 Рекламное место пустует
   Bolobol
 
167 - 23.04.19 - 12:12
Балаболы, задачу-то читали, или так - потрещать?
Следующие требования, файл не найден.... Вы к чему это всё? Прочтите задачу.
Но, за ап темы - спасибо, вдруг знаток вбрегексп заскочит
   Кирпич
 
168 - 23.04.19 - 12:19
(167) А где описание задачи?
   Bolobol
 
169 - 23.04.19 - 12:47
Всё ясно с вами
   Кирпич
 
170 - 23.04.19 - 13:12
(169) И тебе не хворать, гений :)
   quest
 
171 - 23.04.19 - 13:13
(169) https://www.anekdot.ru/id/676992/ лети, голубь
   Bolobol
 
172 - 23.04.19 - 13:18
Всё уже давно с вами ясно, не стоит это ещё больше показывать. Засираете тему только своим бредом
   Вафель
 
173 - 23.04.19 - 13:18
(171)нет чтоб помочь человеку, раз уж подобную задачу делал
   Garykom
 
174 - 23.04.19 - 13:19
(173) Дык я делал подобную задачу двумя способами через СтрЗаменить и лексер/парсер.
   quest
 
175 - 23.04.19 - 13:23
(173) для тебя решение задачи - бред. Никого кроме себя не слышишь. Схватил регэкспы - и носишься с ними. И как тебе помочь? Посоветовать книжки почитать? так это очень сложный путь и тебе не осилить. Проще написать (172)
   lodger
 
176 - 23.04.19 - 14:26
(172) потому что в первых 10 сообщениях были озвучены рабочие решения.
а в первой сотне даже куски кода готовые.
   13_Mult
 
177 - 23.04.19 - 14:51
Когда-то давно решал похожую задачку v8: Быстрый способ обработки Таблиц значений, Массивов
   bolobol
 
178 - 24.04.19 - 09:45
(173) Как раз - наоборот! Для меня решение задачи - очень важно, а для вас - выглядит бредом. Если по делу нечего написать, лучшей помощью будет - не засирать тему бессмыслицей. Спасибо за понимание!

(176) Покажите, будьте так любезны, где я пропустил рабочее решение? Ткните носом, если вам так приятнее будет. Осторожнее - лужи!

(177) У вас все пробелы удалить задача - это просто, у нас - только излишние, "РегистрНакопления.Останки КАК Останки" - должно остаться с пробелами, т.к. "РегистрНакопления.ОстанкиКАКОстанки" - это уже названием таблицы становится. Как в данном примере - не принципиально для решения, но вдруг могут случиться такие примеры, где это скажется негативно. Пока - примера подобного не видел, но со счетов сбрасывать опасаюсь. Условие "читабельность" нарушается, и это единственная причина, что сразу не было сделано именно так.
   Кирпич
 
179 - 24.04.19 - 10:15
пятый день пошел
  1  2

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.