2011-07-29 1 views
1

Я пользователь C++ и получил код, который использует .at(), чтобы получить проверку привязки к векторам STL. Теперь я хотел бы изменить их на стандарт []. Кто-нибудь знает сценарий, который может это сделать? Это не должен быть супер общий сценарий - большинство случаев - .at(i) или, возможно, .at(a*i+j) - но их слишком много, чтобы сделать это вручную.Замена .at() на [] на протяжении всего моего кода

+1

Что не так с 's, \. At \ (i \), \ [i \], g'? –

+1

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

+1

Почему вы хотите это сделать? если для улучшения производительности, пожалуйста, проверьте его перед конвертированием и после, а если разница меньше 20%, я бы рекомендовал вернуть изменения. –

ответ

6

Используйте этот оператор Perl:

s/\.at\(([^)]+)\)/[$1]/g 

s/// оператор в Perl является "заменителем" (найти/заменить). В первом наборе // вы указываете регулярное выражение для соответствия. Второй // - это текст для замены или замены этого совпадения.

В этом случае я нахожу любой экземпляр «.at (anything-but-a-close-paren)» и заменяю его «[what-was-in-the-parens]».

В однострочника,

perl -pe's/\.at\(([^)]+)\)/[$1]/g' in.cpp > out.cpp 

Если вы используете Visual Studio, сделать это в Находке/Заменить строки:

Найти Что: \.at\({[^)]+}\) Заменить: \[\1\]

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

+0

Надеюсь, вы не против, я добавил, как использовать s ///. – ikegami

+0

Нет, спасибо. Улучшение ответа никогда не является проблемой. – kevlar1818

1
sed -i 's,\.at(\([^\)]*\)),[\1],g' *.h *.cpp 

должен работать для самых простых выражений. Однако, если вы используете круглые скобки внутри параметра с параметром(), это не сработает.

grep 'at(.*).*)' *.h *.cpp 

помогает идентифицировать эти случаи и преобразовывать их до того бегущий сказал СЭД сценарий.

P.S. Держите резервную копию вокруг (например, через VCS), если вы позволите sed работать на месте, как здесь.

EDIT: должен был протестировать этот сценарий sed перед публикацией. Исправлено и проверено.

Смежные вопросы