Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для K.A.V.

Ленивый кусок мяса


Contributor


Сообщения: 1986
Благодарности: 723

Профиль | Сайт | Отправить PM | Цитировать


wolkow70, сделайте так:

В начале кода
Код: Выделить весь код
Var _FindInFile ; В эту переменную поместим полный путь к файлу, в котором будем производить замену
Var _LineReplace ; В эту переменную поместим строку, которую будем искать и заменять
Var _LineToInsert ; В эту переменную поместим строку, НА которую мы будем заменять искомую строку
Var _CurLineNumber ; В этой переменной храним номер обрабатываемой строки
Var _CurLine ; В этой переменной храним строку, с которой в данный момент сверяем
Var _LineNumbers ; В этой переменной храним количество строк в искомом файле

!include "StrFunc.nsh"
${StrRep}

В любой секции или функции вызываем функцию сколько угодно раз, только перед новой заменой, если данные отличаются (в каком файле и что заменить) назначайте переменным новые значения
Код: Выделить весь код
Section /o "Моя секция"
StrCpy $_FindInFile '$EXEDIR\opera_install_log.xml' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку
StrCpy $_LineToInsert '$EXEDIR' ; На что будем заменять
call ReplaceLinesInFile
SectionEnd

Function ReplaceLinesInFile
${LineSum} "$_FindInFile" $_LineNumbers ; Подсчитываем количество строк
strcpy $_CurLineNumber 0
startLineRead:
intop $_CurLineNumber $_CurLineNumber + 1
IntCmp $_CurLineNumber $_LineNumbers 0 0 endFunc ; Если номер текущей строки больше количества строк в файле - поиск завершен
${LineRead} "$_FindInFile" "$_CurLineNumber" $_CurLine ; Читаем строку по номеру текущей строки
${WordFind} '$_CurLine' "$_LineReplace" "E+1{" $R0 ; Ищем в строке нужный текст
StrCmp $R0 "1" startLineRead 0 ; Если в строке присутствует искомый текст, выполняем код ниже
${LineFind} "$_FindInFile" "" "" "Insert_Line" ; Вызываем функцию Insert_Line, которая произведёт замену
goto startLineRead
endFunc:
FunctionEnd

Function Insert_Line
StrCmp $R8 "$_CurLineNumber" 0 push
        ${StrRep} $_CurLine "$_CurLine" "$_LineReplace" "$_LineToInsert"
	FileWrite $R4 "$_CurLine"
	StrCpy $0 SkipWrite
	push:
	Push $0
FunctionEnd

-------
[Справочник по командам Windows] -- [Справочник по NSIS] -- [SFX Creator - для создания SFX архивов]

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:56, 11-04-2012 | #2529