Как спросили, так и ответил
Цитата wolkow70:
Это же не простой текстовый файл, а .xml ? »
|
Откройте его блокнотом - обычный текстовый файл со множеством строк
Кстати я хотел добавить в справочник пример данного кода (недавно реализовывал для одного проекта)
Чуть причесал и вот сюда выкладываю
Скрипт построчно читает в текстовом файле строки и заменяет определённый текст в строке на ваш
читать дальше »
В начале кода:
Код:
!include "StrFunc.nsh"
!include "WinMessages.nsh"
${StrRep}
Функция поиска и замены фразы в текстовом файле
Код:
Function ReplaceLinesInFile
Banner::show /NOUNLOAD ""
Banner::getWindow /NOUNLOAD
Pop $1
GetDlgItem $2 $1 1030
; Создаём баннер, чтобы видеть прогресс (для наглядности)
Var /Global _FindInFile ; В эту переменную поместим полный путь к файлу, в котором будем производить замену
Var /Global _LineReplace ; В эту переменную поместим строку, которую будем искать и заменять
Var /Global _LineToInsert ; В эту переменную поместим строку, НА которую мы будем заменять искомую строку
Var /Global _CurLineNumber ; В этой переменной храним номер обрабатываемой строки
Var /Global _CurLine ; В этой переменной храним строку, с которой в данный момент сверяем
Var /Global _LineNumbers ; В этой переменной храним количество строк в искомом файле
StrCpy $_FindInFile '$EXEDIR\opera_install_log.xml' ; Заменяем строки в этом файле
StrCpy $_LineReplace 'C:\Program Files\Opera' ; Ищем и заменяем ЭТУ строку
StrCpy $_LineToInsert '$EXEDIR' ; На что будем заменять
${LineSum} "$_FindInFile" $_LineNumbers ; Подсчитываем количество строк
strcpy $_CurLineNumber 0
startLineRead:
intop $_CurLineNumber $_CurLineNumber + 1
SendMessage $2 ${WM_SETTEXT} 0 "STR:Обработка строки $_CurLineNumber [Всего: $_LineNumbers]" ; Смотрим прогресс обработки строк =)
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:
Banner::destroy ; Уничтожаем баннер
FunctionEnd
Function Insert_Line
StrCmp $R8 "$_CurLineNumber" 0 push
${StrRep} $_CurLine "$_CurLine" "$_LineReplace" "$_LineToInsert"
FileWrite $R4 "$_CurLine"
StrCpy $0 SkipWrite
push:
Push $0
FunctionEnd