|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск <строки> в XML |
|
|
[решено] Поиск <строки> в XML
|
Ветеран Сообщения: 842 |
В файле надо найти строку, например:
<WIDTH int="800" /> и заменить её на <WIDTH int="1024" /> Но лучше найти с неизвестным значением. Я думаю здесь можно пропарсить по открытию тега "<" плюс имя "WIDTH int=" и собственно по закрытию /> И перезаписать найденный шаблон строки. Нечто такое, только без ошибок можно? $file = FileOpen("C:\I\WinSxS\Process\Application Data\codeblocks\default.conf",0) $i = 0 While $i <> 1 FileSetPos($file,$i,0) $i = $i + 1 $str = FileRead($file,1) If StringCompare($str,"<",0) then MsgBox(0,"",$str,"","") WEnd FileClose($file) Файл собой представляет типичный XML Здесь мы уже решали однажды проблему, но там обошлось хитростью с IniWright. Но тут это врядли поможет. Кстати, может кто знает что за файл лежит system32\xmlparser.exe Может этим как-то можно пользоваться для такой задачи? Самое главное чуть не забыл, я именно хотел организовать побайтное сравнение, чтобы найти начало строки. И потом если начало найдено, то найти и сравнить строку итд... Иначе если с помощью ReadFile читать, то можно наткнуться на пробелы и отступы итп. Вообщем я думаю надо искть "<" и ">", а потом дополнительно парсить то что внутри. Скорость работы скрипта вообщем-то не важно. Помогите такой скрипт зделать? Или какие идеи есть ещё. ![]() |
|
------- Отправлено: 01:04, 07-11-2010 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата semiono:
$sFile = @DesktopDir & "\Test.xml" $sHValue = @DesktopWidth $sVValue = @DesktopHeight $sData = FileRead($sFile) $sData = StringRegExpReplace($sData, '(?si)(<obj.*name="Location".*?>.*?(?!</obj>)<int name="H" value=")\d*("/>)', '${1}' & $sHValue & '$2') $sData = StringRegExpReplace($sData, '(?si)(<obj.*name="Location".*?>.*?(?!</obj>)<int name="V" value=")\d*("/>)', '${1}' & $sVValue & '$2') $hFile = FileOpen($sFile, 2) FileWrite($hFile, $sData) FileClose($hFile) |
|
------- Отправлено: 23:11, 16-11-2010 | #21 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Большое спасибо!
А глобальный заголовок проверить? <!-- ArrangeWindow --> .... <obj class="UPoint" name="Size" ID="182564128"> <int name="H" value="1152"/> <int name="V" value="864"/> </obj> ... <!-- Event Image --> ... <!-- Enable Record on Select Track --> .... <!-- Registration --> ...итд Без этого не получится к сожалению. Может через If EndIf как-то? Цитата Creat0R:
|
|
------- Отправлено: 23:53, 16-11-2010 | #22 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать $sData = FileRead($sFile)
If StringInStr($sData, "<!-- ArrangeWindow -->") <> 0 Then $sData = StringRegExpReplace(... Кажись работает! Только наверное не совсем правильно? |
------- Отправлено: 00:18, 17-11-2010 | #23 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата semiono:
|
|
------- Отправлено: 00:32, 17-11-2010 | #24 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Нет, не работает.
Если две секции <!-- ArrangeWindow --> ... <!-- Event Image --> ... то StringRegExpReplace() работает всегда с последней секцией. StringInStr просто проверяет весь файл на наличие <!-- ArrangeWindow --> А вот как зделать чтобы обрабатывался именно блок <!-- ArrangeWindow --> http://forum.oszone.net/post-1544021-19.html Зацепка только одна, то что в конце всегда стоит безымянный тэг </item> |
------- Отправлено: 01:00, 17-11-2010 | #25 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Цитата semiono:
|
|
------- Отправлено: 15:12, 17-11-2010 | #26 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Creat0R, спасибо! Мне этого скрипта хватит, просто надо было доделать, очень нужно было позарез.
XML очень непроходимый, поэтому я условия не сразу учёл, и даже удивился, два текста встретились, и оба совершенно различной структуры! При такой любви производителей к xml, и неудосужились внедрить winapi для работы с этим в винду. ![]() |
------- Отправлено: 17:13, 17-11-2010 | #27 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать semiono,
Тема решена? |
------- Отправлено: 18:48, 17-11-2010 | #28 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Тема решена.
![]() Мне стыдно, я вдруг вспомнил это я сам коментарии писал давно очень и забыл: <!-- ArrangeWindow --> <!-- Event Image --> итп. это действительно были коменты, причём от меня )) Структура файла: ... <item> <string name="Group" value="PArrangeWindow"/> ... <obj class="UPoint" name="Location" ID="182867016"> <int name="H" value="0"/> <int name="V" value="0"/> </obj> ... <obj class="UPoint" name="Size" ID="182564128"> <int name="H" value="1132"/> <int name="V" value="732"/> </obj> ... </item> ... Но уже тему закрою, сам виноват, надо было вовремя разбираться. |
------- Последний раз редактировалось semiono, 17-11-2010 в 20:34. Отправлено: 19:53, 17-11-2010 | #29 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск строки в значени ключа реестра. | user_123 | Скриптовые языки администрирования Windows | 14 | 27-11-2014 18:07 | |
[решено] поиск строки в WORD файле.... | garanov | AutoIt | 3 | 19-03-2010 09:16 | |
[решено] проверка XML-файла на соответствие XML schema в IE 6 и Firefox 2 | dimait | Вебмастеру | 4 | 23-08-2007 02:02 | |
Поиск в яндекс.xml (выделено из "Зацените сайт!") | Vampire | Вебмастеру | 21 | 11-09-2006 20:31 | |
Решено | XML. DOM. Поиск дочерних элементов. | penykov | Программирование и базы данных | 3 | 27-04-2006 15:46 |
|