Find Replace Tool
Кто знает, есть ли такая тулза, которая выполняет поиск замену в конкретно указанных файлах и в конкретно указанных строках файла?
Спрашиваю, потому что такая тулза может значительно облегчить жизнь в такой рутинной работе:
- после какого-то изменения и запуска на компиляцию, компайлер выдает кучу ошибок
- и вот смысл поменять поиском заменой только в тех строках, на которые выругался компилятор
С помощью регулярных выражений можно вычленить нужные строки прямо из Output Window, получив полный путь файла, с номером строки.
Далее этот список положить в тулзу, и одним кликом всё поменять.
Не знаю, может есть и другой способ, чтоб руками поменьше двигать?
странные пока не столкнешься.
вот простая задача: переименовать некую переменную, которая многократно используется в коде и имеет распространённое имя. Т.е. таких переменных с тем же именем больше одной а может и много.
В сишарпе проблем нет - там рефактор-рэнэйм с этим отлично справляется, а вот в плюсах - справляется не всегда даже в последней студии, не говоря уже если проэкт под ВС2008 напр, или вообще какое нибудь стороннее ИДЕ.
Ну а с стакой тулзой - без проблем
Никогда подобного не встречал
-----
У меня сейчас есть именно такое.
Имеется 100+ проектов дллок - по одной на каждую единицу оборудования на заводе.
Каждый раз, когда в интерфейс вносятся изменения - вылетает 100-200-300 однотипных ошибок.
Их аккурат можно исправить пакетным редактированием.
странные пока не столкнешься.
может поэтому и не сталкивался что руками не менял....
а вот в плюсах
для плюсов раньше был "помидор", сейчас есть и решарпер. Если кинете опен соурс проектом и чего там переименовать, могу попробовать, у меня плюсовой в комплекте есть, но без надобности.
https://unix.stackexchange.com/questions/263326/using-sed-... - как раз ответ на этот вопрос
интересно, а можно ли sed заставить в случае, если в указанной строке не оказалось искомого текста, попытаться проделать это же в нескольких (но не всех) предыдущих строках?
Это может понадобиться, если выражение многострочное.
Компилятор указал ошибку в строке где точка с запятой (т.е. конец выражения), а поменять надо в начале.
Ну типа:
int a = myfunction( aaa,
bbb,
ccc);
нужная строчка первая с "ааа", но компилятор покажет строчку последнюю.
- после какого-то изменения и запуска на компиляцию, компайлер выдает кучу ошибок
без конкретностей сложно что-либо сказать. Но подобная задача встречалась при портировании кода: один компилятор "терпит" какой-нибудь ляп, а "новый" требует соблюдать правила. Приходилось сталкиваться пару раз, решал, потратив пару часов на "тул", имеющий целью исправить именно этот ляп во всех файлах, где он встречается, плевать, что выдает компилятор. Не вспоминаю это, как большую проблему. Если встречается менее, чем в 30-50 местах, поработал бы ручками минут 10 и забыл.
Здесь особенность в том, что это не бывает так, что "после какого-то изменения" и каждый день, это - редкая ситуация, и даже если тул имеется, нужно потратить время на то, чтобы его найти, им научиться пользоваться и т.д. Чтобы в следующий раз,
когда прийдется, все забыв, проделать все это заново. Конечно, если у вас имеется возможность каждый деть по нескольку раз "делать какие-то изменения", приводящие к такому эффекту, стоит найти и освоить тул : )
без конкретностей сложно что-либо сказать.вот например еще одна задачка:
заменить все небезопасные функции на безопасные:
sprintf -- sprintf_s
strcpy -- strcpy_s
strcat -- strcat_s
Для каждого случая делаем следующее (на примере strcat):
- глобальным поиском заменой меняем strcat на strcat_s
- компилируем (копилятор согласен с буферами char[], но ругается на char*, т.к. там не хватает параметра - размера буфера)
- копируем OutputWindow в тулзу (где настраиваем выборку регулярными выражениями)
- и одним кликом, все места где компайлер выдал ошибку, меняем назад strcat_s на strcat
Итого, особо не думая и минимумом действий, значительная часть работы сделана:
с буферами char[] теперь работает strcat_s. Ну а остаток придется руками - никуда не деться.