Автор |
Сообщение |
|
|
Заголовок сообщения: |
|
|
|
dynamic-wind писал(а): В порядке шутки: решение на юниксевом шелле cmd=sed -es/исходная/новая/ < {} > .t && mv .t {} find . -name '*.f' -exec $cmd \;
А в ннкроне аналогично: для такой замены в задаче достаточно одного лишь цикла FOR-FILES. У меня такой объем решения объясняется лишь оберткой этого цикла для соотвветствию ТЗ. А фактически можно прямо в командной строке:
Код: nncron.exe : replace FOR-FILES: "path\*.f" FOUND-FULLPATH FILE S" исходная строка" S" вставляемая строка" StringReplace FOUND-FULLPATH FWRITE ;FOR-FILES ; replace
[quote="dynamic-wind"]В порядке шутки: решение на юниксевом шелле cmd=sed -es/исходная/новая/ < {} > .t && mv .t {} find . -name '*.f' -exec $cmd \;[/quote]
А в ннкроне аналогично: для такой замены в задаче достаточно одного лишь цикла [b]FOR-FILES[/b]. У меня такой объем решения объясняется лишь оберткой этого цикла для соотвветствию ТЗ. А фактически можно прямо в командной строке:
[code]nncron.exe : replace FOR-FILES: "path\*.f" FOUND-FULLPATH FILE S" исходная строка" S" вставляемая строка" StringReplace FOUND-FULLPATH FWRITE ;FOR-FILES ; replace[/code]
|
|
|
|
Добавлено: Ср дек 09, 2009 15:03 |
|
|
|
|
|
Заголовок сообщения: |
Re: *замена строки во всех файлах каталога, включая подкатал |
|
|
mOleg писал(а): написать тулзу для командной строки, позволяющую делать следующее: для каждого файла с указанной маской заменить искомую строку на указанную.
replace.exe -m *.f -s " исходная строка" -r " вставляемая строка"
В порядке шутки: решение на юниксевом шелле
cmd=sed -es/исходная/новая/ < {} > .t && mv .t {}
find . -name '*.f' -exec $cmd \;
[quote="mOleg"]написать тулзу для командной строки, позволяющую делать следующее: для каждого файла с указанной маской заменить искомую строку на указанную.
replace.exe -m *.f -s " исходная строка" -r " вставляемая строка" [/quote]
В порядке шутки: решение на юниксевом шелле
cmd=sed -es/исходная/новая/ < {} > .t && mv .t {}
find . -name '*.f' -exec $cmd \;
|
|
|
|
Добавлено: Ср дек 09, 2009 11:17 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Вариант для ннкрона(необходим плагин Autostrings.spf):
Код: \ Файл: replace.spf \ Автор: VoidVolker \ Дата: 08/12/2009 17:21 \ Версия: 3.00, версия ннКрона 1.91.1083 \ Описание: \ Утилита для командной строки, позволяющая для каждого файла с указанной маской заменить искомую строку на указанную.
\ Инструкция пользователя: \ -p "path"- путь к каталогу, в котором должны искаться файлы для замены строк \ (наличие слеша в конце обязательно, иначе будет считаться частью маски); \ -m "*.*" - маска или \ -m "/regexp/" - регулярное выражение, идентифицирующее файл в котором должны быть произведены замены; \ -rec - работать с подкаталогами(по умолчанию); \ -norec - не работать с подкаталогами; \ -s "строка1"- искомая строка, которую надо искать и заменить; \ -r "строка2" - строку которую надо вставить вместо искомой; \ -h - вывод подсказки по использованию утилиты. \ Поддерживаются следующие эскейп-последовательности: \ // -> / \ /p -> % \ /q -> " \ /t -> <табуляция> 9 \ /v -> <вертикальная табуляция> 0xB \ /r -> <возврат картеки> 0xD \ /n -> <перевод строки> crlf 0x0D0A
REQUIRE AUTOSTRINGS-MODULE plugins\Autostrings.spf \ http://www.nncron.ru/forums/viewtopic.php?f=5&t=10296#p23848
: StringReplace { a1 u1 a2 u2 a3 u3 \ rest a4 u4 buf -- a u } \ Заменить в строке 1 подстроку 2 на строку 3, на стеке останется измененая строка AT buf TO a4 a1 u1 BEGIN OVER SWAP a2 u2 SEARCH WHILE TO rest SWAP 2DUP - a4 u4 2SWAP S+ TO u4 TO a4 a3 u3 a4 u4 2SWAP S+ TO u4 TO a4 rest u2 /STRING REPEAT a4 u4 2SWAP S+ ROT DROP ;
VECT <vp> VECT <vs> VECT <vr> VECT <vm>
VARIABLE ready?
: S"" S" " ;
: *mask S" *" ;
: init ['] ModuleDirName TO <vp> ['] S"" TO <vs> ['] S"" TO <vr> ['] *mask TO <vm> ready? OFF RECURSIVE ;
: get-str BL SKIP [CHAR] " SKIP BL SKIP [COMPILE] " ; IMMEDIATE
: :str :NONAME [COMPILE] get-str [COMPILE] ; ;
: is-regexp? \ ( a u -- ? ) OVER C@ [CHAR] / = SWAP ROT + 1- C@ [CHAR] / = OR ;
CREATE "help 1500 ALLOT S"" " Инструкция пользователя:/n -p /qpath/q - путь к каталогу, в котором должны искаться файлы для замены строк/n" S+ " (наличие слеша в конце обязательно, иначе будет считаться частью маски);/n" S+ " -m /q*.*/q - маска или/n" S+ " -m /q//regexp///q - регулярное выражение, идентифицирующее файл в котором должны быть произведены замены;/n" S+ " -rec - работать с подкаталогами(по умолчанию);/n" S+ " -norec - не работать с подкаталогами;/n" S+ " -s /qстрока1/q - искомая строка, которую надо искать и заменить;/n" S+ " -r /qстрока2/q - строку которую надо вставить вместо искомой;/n" S+ " -h - вывод подсказки по использованию утилиты;/n" S+ " Поддерживаются следующие эскейп-последовательности:/n" S+ " //// -> ///n" S+ " //p -> /p/n" S+ " //q -> /q/n" S+ " //t -> <табуляция> 9/n" S+ " //v -> <вертикальная табуляция> 0xB/n" S+ " //r -> <возврат картеки> 0xD/n" S+ " //n -> crlf 0x0D0A/n" S+ SWAP OVER "help SWAP CMOVE
\ len : -h \ ( -- ) "help LITERAL MsgBox ;
: replace-in-files \ ( -- ) FILESONLY <vm> is-regexp? IF <vp> S" *" S+ FOR-FILES FOUND-FULLPATH <vm> RE-MATCH IF FOUND-FULLPATH FILE <vs> <vr> StringReplace FOUND-FULLPATH FWRITE THEN ;FOR-FILES ELSE <vp> <vm> S+ FOR-FILES FOUND-FULLPATH FILE <vs> <vr> StringReplace FOUND-FULLPATH FWRITE ;FOR-FILES THEN ;
: -p \ ( " path" -> ) :str TO <vp> ;
: -s \ ( " искомая строка" -> ) :str TO <vs> ready? @ IF replace-in-files ready? OFF THEN ready? ON ;
: -r \ ( " вставляемая строка" -> ) :str TO <vr> ready? @ IF replace-in-files ready? OFF THEN ready? ON ;
: -m \ ( " mask|regexp" -> ) :str TO <vm> ;
: -rec \ ( -- ) FF-RECURSIVE? ON ;
: -norec \ ( -- ) FF-RECURSIVE? OFF ;
WARNING @ WARNING OFF : NOTFOUND ( a u -- ) 2DUP 2>R ['] NOTFOUND CATCH IF 2DROP " Ошибка в строке:/n%SOURCE%" MsgBox BYE THEN RDROP RDROP ; WARNING !
' init MAINX ! S" replace.exe" SAVE BYE Для компиляции ехе в кроне скормить этот файл в командной строке ннкрону: Код: nncron.exe replace.spf
Предварительно положив в каталог plugins файл Autostrings.spf.
Помощь по регулярным выражениям.
Вариант для ннкрона(необходим плагин [url=http://www.nncron.ru/forums/viewtopic.php?f=5&t=10296#p23848]Autostrings.spf[/url]):
[code]\ Файл: replace.spf \ Автор: VoidVolker \ Дата: 08/12/2009 17:21 \ Версия: 3.00, версия ннКрона 1.91.1083 \ Описание: \ Утилита для командной строки, позволяющая для каждого файла с указанной маской заменить искомую строку на указанную.
\ Инструкция пользователя: \ -p "path"- путь к каталогу, в котором должны искаться файлы для замены строк \ (наличие слеша в конце обязательно, иначе будет считаться частью маски); \ -m "*.*" - маска или \ -m "/regexp/" - регулярное выражение, идентифицирующее файл в котором должны быть произведены замены; \ -rec - работать с подкаталогами(по умолчанию); \ -norec - не работать с подкаталогами; \ -s "строка1"- искомая строка, которую надо искать и заменить; \ -r "строка2" - строку которую надо вставить вместо искомой; \ -h - вывод подсказки по использованию утилиты. \ Поддерживаются следующие эскейп-последовательности: \ // -> / \ /p -> % \ /q -> " \ /t -> <табуляция> 9 \ /v -> <вертикальная табуляция> 0xB \ /r -> <возврат картеки> 0xD \ /n -> <перевод строки> crlf 0x0D0A
REQUIRE AUTOSTRINGS-MODULE plugins\Autostrings.spf \ http://www.nncron.ru/forums/viewtopic.php?f=5&t=10296#p23848
: StringReplace { a1 u1 a2 u2 a3 u3 \ rest a4 u4 buf -- a u } \ Заменить в строке 1 подстроку 2 на строку 3, на стеке останется измененая строка AT buf TO a4 a1 u1 BEGIN OVER SWAP a2 u2 SEARCH WHILE TO rest SWAP 2DUP - a4 u4 2SWAP S+ TO u4 TO a4 a3 u3 a4 u4 2SWAP S+ TO u4 TO a4 rest u2 /STRING REPEAT a4 u4 2SWAP S+ ROT DROP ;
VECT <vp> VECT <vs> VECT <vr> VECT <vm>
VARIABLE ready?
: S"" S" " ;
: *mask S" *" ;
: init ['] ModuleDirName TO <vp> ['] S"" TO <vs> ['] S"" TO <vr> ['] *mask TO <vm> ready? OFF RECURSIVE ;
: get-str BL SKIP [CHAR] " SKIP BL SKIP [COMPILE] " ; IMMEDIATE
: :str :NONAME [COMPILE] get-str [COMPILE] ; ;
: is-regexp? \ ( a u -- ? ) OVER C@ [CHAR] / = SWAP ROT + 1- C@ [CHAR] / = OR ;
CREATE "help 1500 ALLOT S"" " Инструкция пользователя:/n -p /qpath/q - путь к каталогу, в котором должны искаться файлы для замены строк/n" S+ " (наличие слеша в конце обязательно, иначе будет считаться частью маски);/n" S+ " -m /q*.*/q - маска или/n" S+ " -m /q//regexp///q - регулярное выражение, идентифицирующее файл в котором должны быть произведены замены;/n" S+ " -rec - работать с подкаталогами(по умолчанию);/n" S+ " -norec - не работать с подкаталогами;/n" S+ " -s /qстрока1/q - искомая строка, которую надо искать и заменить;/n" S+ " -r /qстрока2/q - строку которую надо вставить вместо искомой;/n" S+ " -h - вывод подсказки по использованию утилиты;/n" S+ " Поддерживаются следующие эскейп-последовательности:/n" S+ " //// -> ///n" S+ " //p -> /p/n" S+ " //q -> /q/n" S+ " //t -> <табуляция> 9/n" S+ " //v -> <вертикальная табуляция> 0xB/n" S+ " //r -> <возврат картеки> 0xD/n" S+ " //n -> crlf 0x0D0A/n" S+ SWAP OVER "help SWAP CMOVE
\ len : -h \ ( -- ) "help LITERAL MsgBox ;
: replace-in-files \ ( -- ) FILESONLY <vm> is-regexp? IF <vp> S" *" S+ FOR-FILES FOUND-FULLPATH <vm> RE-MATCH IF FOUND-FULLPATH FILE <vs> <vr> StringReplace FOUND-FULLPATH FWRITE THEN ;FOR-FILES ELSE <vp> <vm> S+ FOR-FILES FOUND-FULLPATH FILE <vs> <vr> StringReplace FOUND-FULLPATH FWRITE ;FOR-FILES THEN ;
: -p \ ( " path" -> ) :str TO <vp> ;
: -s \ ( " искомая строка" -> ) :str TO <vs> ready? @ IF replace-in-files ready? OFF THEN ready? ON ;
: -r \ ( " вставляемая строка" -> ) :str TO <vr> ready? @ IF replace-in-files ready? OFF THEN ready? ON ;
: -m \ ( " mask|regexp" -> ) :str TO <vm> ;
: -rec \ ( -- ) FF-RECURSIVE? ON ;
: -norec \ ( -- ) FF-RECURSIVE? OFF ;
WARNING @ WARNING OFF : NOTFOUND ( a u -- ) 2DUP 2>R ['] NOTFOUND CATCH IF 2DROP " Ошибка в строке:/n%SOURCE%" MsgBox BYE THEN RDROP RDROP ; WARNING !
' init MAINX ! S" replace.exe" SAVE BYE[/code] Для компиляции ехе в кроне скормить этот файл в командной строке ннкрону: [code]nncron.exe replace.spf[/code]
Предварительно положив в каталог [i]plugins[/i] файл [i]Autostrings.spf[/i].
[url=http://www.nncron.ru/help/RU/add_info/regexp.htm]Помощь по регулярным выражениям.[/url]
|
|
|
|
Добавлено: Вт дек 08, 2009 19:05 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вопрос писал(а): Ага, вот автор задачи не указал, что должна делать задача, если файлов, подходящих к маске нет Ну вероятно ничего. вопрос писал(а): что делать, если строка не того формата. mOleg писал(а): ошибки в командной строке должны ловиться.
[quote="вопрос"]Ага, вот автор задачи не указал, что должна делать задача, если файлов, подходящих к маске нет[/quote] Ну вероятно ничего. :D [quote="вопрос"]что делать, если строка не того формата.[/quote] [quote="mOleg"]ошибки в командной строке должны ловиться.[/quote]
|
|
|
|
Добавлено: Вт дек 08, 2009 00:36 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
Ага, вот автор задачи не указал, что должна делать задача, если файлов, подходящих к маске нет или что делать, если строка не того формата.
Ага, вот автор задачи не указал, что должна делать задача, если файлов, подходящих к маске нет или что делать, если строка не того формата.
|
|
|
|
Добавлено: Пн дек 07, 2009 22:24 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вопрос писал(а): это простой конечный автомат ответа не понял. Это задачка для решения. вопрос писал(а): там начало КА, а продолжение такое же - все состояния идут последовательно и неудача подразумевает выход
причем тут выход не понятно, программа должна просмотреть содержимое всех файлов и в каждом файле заменить любое количество шаблонных строк на заданную, конец алгоритма когда просмотрены все файлы.
[quote="вопрос"]это простой конечный автомат[/quote] ответа не понял. Это задачка для решения. [quote="вопрос"]там начало КА, а продолжение такое же - все состояния идут последовательно и неудача подразумевает выход[/quote]
причем тут выход не понятно, программа должна просмотреть содержимое всех файлов и в каждом файле заменить любое количество шаблонных строк на заданную, конец алгоритма когда просмотрены все файлы.
|
|
|
|
Добавлено: Пн дек 07, 2009 08:04 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
это простой конечный автомат
что-то глчит сервис фото
поэтому ссылка на изображение http://www.onlinedisk.ru/view/286439
там начало КА, а продолжение такое же - все состояния идут последовательно и неудача подразумевает выход
это простой конечный автомат
что-то глчит сервис фото
поэтому ссылка на изображение http://www.onlinedisk.ru/view/286439
там начало КА, а продолжение такое же - все состояния идут последовательно и неудача подразумевает выход
|
|
|
|
Добавлено: Пн дек 07, 2009 00:29 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вопрос писал(а): формат маски?
стандартный ДОСевый.
То есть
* - любое кол-во символов
? - любой символ
[quote="вопрос"]формат маски?[/quote]
стандартный ДОСевый.
То есть
* - любое кол-во символов
? - любой символ
|
|
|
|
Добавлено: Вс дек 06, 2009 18:54 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
вопрос писал(а): формат маски?
а разве не понятно, что это обычная досовая маска имени с ? и * ??
[quote="вопрос"]формат маски?[/quote]
а разве не понятно, что это обычная досовая маска имени с ? и * ??
|
|
|
|
Добавлено: Вс дек 06, 2009 18:40 |
|
|
|
|
|
Заголовок сообщения: |
|
|
|
формат маски?
формат маски? :(
|
|
|
|
Добавлено: Вс дек 06, 2009 18:36 |
|
|
|
|
|
Заголовок сообщения: |
*замена строки во всех файлах каталога, включая подкаталоги |
|
|
написать тулзу для командной строки, позволяющую делать следующее:
для каждого файла с указанной маской заменить искомую строку на указанную.
replace.exe -m *.f -s " исходная строка" -r " вставляемая строка"
то есть исполнимый файл должен понимать ключи:
-m - маска файла, в котором должны быть произведены замены
-s - строка, которую надо искать и заменить на
-r - строку которую надо вставить вместо искомой
-h - вывод строки подсказки по использованию утилиты
ошибки в командной строке должны ловиться.
написать тулзу для командной строки, позволяющую делать следующее:
для каждого файла с указанной маской заменить искомую строку на указанную.
replace.exe -m *.f -s " исходная строка" -r " вставляемая строка"
то есть исполнимый файл должен понимать ключи:
-m - маска файла, в котором должны быть произведены замены
-s - строка, которую надо искать и заменить на
-r - строку которую надо вставить вместо искомой
-h - вывод строки подсказки по использованию утилиты
ошибки в командной строке должны ловиться.
|
|
|
|
Добавлено: Вс дек 06, 2009 18:24 |
|
|
|
|