|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск <строки> в XML |
|
|
[решено] Поиск <строки> в XML
|
Ветеран Сообщения: 842 |
Профиль | Отправить PM | Цитировать
В файле надо найти строку, например:
<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 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата semiono:
|
|
Отправлено: 03:24, 07-11-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать Спасибо большое, очень полезный скрипт! Некоторые программы не используют реестр, так к ним не подобраться без этого было!
А можно как-то многостроковые блоки выхватывать из XML, так как я боюсь что такое мне тоже наверняка встретится. Я имею ввиду где начало "<" и завершение "/>" внутри содержат @CRLF строчки? Искать по контенту, например, найти: "<FFFF" конец будет само собой первый попавшийся тэг "/>" |
------- Отправлено: 04:34, 07-11-2010 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Если файл действительно содержит xml, то и работать с ним можно и нужно теми же средствами: Сценарии объектной модели документа DOM XML средствами OLE-Automation.
|
Отправлено: 04:43, 07-11-2010 | #4 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата semiono:
...либо используйте DOM, как подсказал Iska ... Цитата semiono:
Iska, увы, далеко не всегда доступна полная инфа о структуре документа - чаще есть только несколько примеров, на основе которых приходится строить свои предположения о возможной структуре |
|||
Отправлено: 05:05, 07-11-2010 | #5 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать $sFile = @AppDataDir & "\codeblocks\default.conf" $sText = FileRead($sFile) $sText = StringRegExpReplace($sText, '(?i)<WIDTH\s+int="\d+"\s*/>', '<WIDTH int="'& @DesktopWidth &'" />') If @extended Then $hFile =FileOpen($sFile,2) FileWrite($hFile,$sText) FileClose($hFile) EndIf Цитата amel27:
Цитата amel27:
Это скорее для html аддонов инструкции, причём которые пишут, на м же надо их удалённо-пакетно править налету ? ЗЫ Идея налету родилась! А что если вывести StringRegExpReplace() в STDINPUT консоли, зделать типа утилиту! ))) Я понимаю есть всякие PERL итп. но чисто поэкспереминтировать? Или это сложный и бажистый скрипт получиться? Я имею ввиду зделать (AutoIt) StringRegExpReplace.exe --help |
||
------- Последний раз редактировалось semiono, 07-11-2010 в 05:33. Отправлено: 05:11, 07-11-2010 | #6 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата semiono:
|
|
Отправлено: 05:20, 07-11-2010 | #7 |
Ветеран Сообщения: 842
|
Профиль | Отправить PM | Цитировать amel27, при возможности напиши пример "<SOMETHING" & @CRLF & "/>",
а я потом подумаю как применять, в любом случае пригодиться такое. Но я сам тоже подумаю может и сам справлюсь. Про vbs спасиб! Теперь ясно! Кстати, говоря vbs могут не работать из-за всяких твиков системы, а autoit даже от себя не заввисим! |
------- Отправлено: 05:30, 07-11-2010 | #8 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата semiono:
|
|
Отправлено: 12:15, 07-11-2010 | #9 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Для работы с xml есть библиотека: XML DOM wrapper (COM).
|
------- Отправлено: 13:10, 07-11-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
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 |
|