Что нового

[Автоматизация] Проблема с чтением и вставкой построчно из файла

Black_Sunlight

Новичок
Сообщения
13
Репутация
0
Есть скрипт, который читает строчки из файла items-rus.txt
они идут в формате:
одно слово
другое слово
третье сло во
четвёртое
и т.д.
и заменяет ими заданные по регекспу значения в файле items.xml, которые идут в формате
<passive cache="blabla" type="blabla" name="slovo" />
<passive cache="blabla" type="blabla" name="slovo" />
т.е. заменяет name="slovo" на name="одно слово" по порядку следования
и пишет изменённый файл в itemsRU.xml
но вот тут беда, в результате все заменённые name оказываются с самым последним словом из файла items-rus.txt

Помогите исправить пожалуйста скрипт.

Код:
#include <file.au3>
Global $aEnRu
If Not _FileReadToArray(@ScriptDir&'\items-rus.txt', $aEnRu) Then
   MsgBox(4096,"Ошибка", "Невозможно прочитать массив" & @error)
   Exit
EndIf

$file = FileOpen(@ScriptDir&'\items.xml', 0)
$text = FileRead($file)
FileClose($file)

For $i = 1 to $aEnRu[0]
    $text=StringRegExpReplace($text, 'name="(.*)"', 'name="'&$aEnRu[$i]&'"') 
Next

$file = FileOpen(@ScriptDir&'\itemsRU.xml',2)
FileWrite($file, $text)
FileClose($file)
 

classick

Новичок
Сообщения
16
Репутация
1
Вы в цикле назначаете переменную $text до тех пор, пока цикл не завершит свою работу, а потом только один раз переписываете значения в файле itemsRU.xml.
Black_Sunlight сказал(а):
Код:
For $i = 1 to $aEnRu[0]
   $text=StringRegExpReplace($text, 'name="(.*)"', 'name="'&$aEnRu[$i]&'"')
Next

$file = FileOpen(@ScriptDir&'\itemsRU.xml',2)
FileWrite($file, $text)
FileClose($file)

Т.о. туда попадут значения переменной $text, которое было назначенное при последнем прохождением цикла.
Добавьте запись в файл в цикл и все должно получиться.
 
Автор
Black_Sunlight

Black_Sunlight

Новичок
Сообщения
13
Репутация
0
classick
хм, если переместить весь блок записи внутрь цикла, то ничего не происходит, а если только FileWrite, то происходит замена во всём файле и файл записывается целиком


Добавлено:
Сообщение автоматически объединено:

Поместил функцию чтение из файла тоже в цикл и заменил FileRead на FileReadLine
 
Верх