Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Find Replace Tool

362  
anly коренной житель07.06.17 23:22
anly
NEW 07.06.17 23:22 

Кто знает, есть ли такая тулза, которая выполняет поиск замену в конкретно указанных файлах и в конкретно указанных строках файла?


Спрашиваю, потому что такая тулза может значительно облегчить жизнь в такой рутинной работе:

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

- и вот смысл поменять поиском заменой только в тех строках, на которые выругался компилятор


С помощью регулярных выражений можно вычленить нужные строки прямо из Output Window, получив полный путь файла, с номером строки.

Далее этот список положить в тулзу, и одним кликом всё поменять.

Не знаю, может есть и другой способ, чтоб руками поменьше двигать?

Проклят нарушающий межи ближнего своего (Втор.27:17)
#1 
AlexNek патриот08.06.17 01:07
AlexNek
08.06.17 01:07 
в ответ anly 07.06.17 23:22

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

Никогда подобного не встречал

#2 
pavel-hh коренной житель08.06.17 06:22
pavel-hh
NEW 08.06.17 06:22 
в ответ AlexNek 08.06.17 01:07

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


но если результат должен иметь смысл, то с вами согласен.

Linux is like a Wigwam. No Windows! No Gates! And Apache inside.
#3 
anly коренной житель08.06.17 07:00
anly
NEW 08.06.17 07:00 
в ответ AlexNek 08.06.17 01:07, Последний раз изменено 08.06.17 07:04 (anly)

странные пока не столкнешься.

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

В сишарпе проблем нет - там рефактор-рэнэйм с этим отлично справляется, а вот в плюсах - справляется не всегда даже в последней студии, не говоря уже если проэкт под ВС2008 напр, или вообще какое нибудь стороннее ИДЕ.

Ну а с стакой тулзой - без проблем

Проклят нарушающий межи ближнего своего (Втор.27:17)
#4 
kashej свой человек08.06.17 07:19
kashej
NEW 08.06.17 07:19 
в ответ anly 07.06.17 23:22

sed и/или awk. Утилиты из Unix.

http://denis-aristov.ucoz.com
#5 
Simple Nothing is f*cked08.06.17 09:17
Simple
NEW 08.06.17 09:17 
в ответ anly 08.06.17 07:00
MrSanders старожил08.06.17 12:02
NEW 08.06.17 12:02 
в ответ kashej 08.06.17 07:19

sed-а хватит

#7 
Murr_0002 постоялец08.06.17 12:27
Murr_0002
NEW 08.06.17 12:27 
в ответ AlexNek 08.06.17 01:07

Никогда подобного не встречал

-----

У меня сейчас есть именно такое.

Имеется 100+ проектов дллок - по одной на каждую единицу оборудования на заводе.

Каждый раз, когда в интерфейс вносятся изменения - вылетает 100-200-300 однотипных ошибок.

Их аккурат можно исправить пакетным редактированием.


#8 
AlexNek патриот08.06.17 18:34
AlexNek
NEW 08.06.17 18:34 
в ответ anly 08.06.17 07:00
странные пока не столкнешься.


может поэтому и не сталкивался что руками не менял....


а вот в плюсах

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

#9 
LifeRider постоялец08.06.17 19:13
LifeRider
NEW 08.06.17 19:13 
в ответ Murr_0002 08.06.17 12:27
У меня сейчас есть именно такое.

Походу тебе шеф замену натаскивает, очень уж подозрительно, что такое извращение сразу у двоих интерес вызывает... Ты бы расспросил невзначай ТС, может еще какие задачи совпадают... :))

#10 
AlexOtt местный житель09.06.17 07:51
AlexOtt
NEW 09.06.17 07:51 
в ответ MrSanders 08.06.17 12:02

https://unix.stackexchange.com/questions/263326/using-sed-... - как раз ответ на этот вопрос

#11 
anly коренной житель09.06.17 19:50
anly
NEW 09.06.17 19:50 
в ответ AlexOtt 09.06.17 07:51

интересно, а можно ли sed заставить в случае, если в указанной строке не оказалось искомого текста, попытаться проделать это же в нескольких (но не всех) предыдущих строках?


Это может понадобиться, если выражение многострочное.

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

Ну типа:

int a = myfunction( aaa,

bbb,

ccc);

нужная строчка первая с "ааа", но компилятор покажет строчку последнюю.

Проклят нарушающий межи ближнего своего (Втор.27:17)
#12 
  moose свой человек11.06.17 22:33
NEW 11.06.17 22:33 
в ответ anly 07.06.17 23:22, Последний раз изменено 11.06.17 22:36 (moose)
- после какого-то изменения и запуска на компиляцию, компайлер выдает кучу ошибок

без конкретностей сложно что-либо сказать. Но подобная задача встречалась при портировании кода: один компилятор "терпит" какой-нибудь ляп, а "новый" требует соблюдать правила. Приходилось сталкиваться пару раз, решал, потратив пару часов на "тул", имеющий целью исправить именно этот ляп во всех файлах, где он встречается, плевать, что выдает компилятор. Не вспоминаю это, как большую проблему. Если встречается менее, чем в 30-50 местах, поработал бы ручками минут 10 и забыл.

Здесь особенность в том, что это не бывает так, что "после какого-то изменения" и каждый день, это - редкая ситуация, и даже если тул имеется, нужно потратить время на то, чтобы его найти, им научиться пользоваться и т.д. Чтобы в следующий раз, когда прийдется, все забыв, проделать все это заново. Конечно, если у вас имеется возможность каждый деть по нескольку раз "делать какие-то изменения", приводящие к такому эффекту, стоит найти и освоить тул : )

#13 
anly коренной житель12.06.17 23:00
anly
NEW 12.06.17 23:00 
в ответ moose 11.06.17 22:33, Последний раз изменено 12.06.17 23:01 (anly)
без конкретностей сложно что-либо сказать.
вот например еще одна задачка:

заменить все небезопасные функции на безопасные:

sprintf -- sprintf_s

strcpy -- strcpy_s

strcat -- strcat_s


Для каждого случая делаем следующее (на примере strcat):

- глобальным поиском заменой меняем strcat на strcat_s

- компилируем (копилятор согласен с буферами char[], но ругается на char*, т.к. там не хватает параметра - размера буфера)

- копируем OutputWindow в тулзу (где настраиваем выборку регулярными выражениями)

- и одним кликом, все места где компайлер выдал ошибку, меняем назад strcat_s на strcat


Итого, особо не думая и минимумом действий, значительная часть работы сделана:

с буферами char[] теперь работает strcat_s. Ну а остаток придется руками - никуда не деться.

Проклят нарушающий межи ближнего своего (Втор.27:17)
#14