Название: Простая работа со строками Отправлено: Igors от Июль 27, 2020, 07:26 Добрый день
Пример текста Цитировать out vec3 color_vsh; Требуется#if USE_CUBE_MAP out mat4 invNormalMatrix_vsh; #endif - найти все строки с первым словом out и содержащие слово с суффиксом _vsh. Для каждой найденной a) сохранить саму строку b) сохранить имя с суффиксом _vsh, для примера выше color_vsh и invNormalMatrix_vsh с) если первое слово в предыдущей строке #if, то сохранить слово после него, для примера выше USE_CUBE_MAP В данном случае исходный текст пишу я сам, но все-таки интересно что делать в общем случае. Тогда может быть и так Цитировать #if (USE_CUBE_MAP == 1) Ну это так, "на будущее"out vec3 color_vsh; out mat4 invNormalMatrix_vsh; #endif Спасибо Название: Re: Простая работа со строками Отправлено: kambala от Июль 27, 2020, 16:12 быстро на перле наваял: (на awk наверное тоже можно)
Код
для файла Код: out vec3 color_vsh; дает вывод Код: out vec3 color_vsh; конечно, можно поулучшать проверки, выводить в файл и т.д. Название: Re: Простая работа со строками Отправлено: Igors от Июль 28, 2020, 07:48 Круто (червона рута). Понимаю что тут "меня ждали", т.е. скриптовые языки на это и заточены, но все равно минимум кода впечатляет. Вопросы;
- что они считают "словом"? Ну или как "трактовать" символы что не буква и не цифра? Напр "#define" вроде слово. А "def#ine"? хз - как это "подтянуть" к исходникам на плюсах? Возможно то же самое с предоставляемой Qt (пресловутой) "регуляркой" ? Спасибо Название: Re: Простая работа со строками Отправлено: kambala от Июль 28, 2020, 16:26 - за «слово» можно брать то, что находится между \b (граница слов). У меня для простоты используется \s — пустые символы (пробелы, табуляции).
- буква и цифра (и подчеркивание) — \w, соответственно для НЕ будет \W - да, Qtшные регулярки могут все то же самое, я тут никаких супер возможностей не использую. Ну только \ не забывать экранировать, либо использовать raw literal в С++11 — 6) в https://en.cppreference.com/w/cpp/language/string_literal - подтянуть в смысле зашить в код или пробежать по исходным файлам? Если второе, то этому скрипту просто скормить пути к файлам как параметры: ./myscript.pl /path/to/file1 /path/to/file2 ... |