Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск <строки> в XML

Ответить
Настройки темы
[решено] Поиск <строки> в XML

Аватара для semiono

Ветеран


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

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


Изменения
Автор: semiono
Дата: 07-11-2010
В файле надо найти строку, например:
<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)
я тут начал побайтно искать "<" только в качестве примера... искать надо конечно же <WIDTH int="
Файл собой представляет типичный XML

Здесь мы уже решали однажды проблему, но там обошлось хитростью с IniWright. Но тут это врядли поможет.
Кстати, может кто знает что за файл лежит system32\xmlparser.exe
Может этим как-то можно пользоваться для такой задачи?


Самое главное чуть не забыл, я именно хотел организовать побайтное сравнение, чтобы найти начало строки.
И потом если начало найдено, то найти и сравнить строку итд...
Иначе если с помощью ReadFile читать, то можно наткнуться на пробелы и отступы итп.
Вообщем я думаю надо искть "<" и ">", а потом дополнительно парсить то что внутри.
Скорость работы скрипта вообщем-то не важно. Помогите такой скрипт зделать? Или какие идеи есть ещё.

-------
Полезное сообщение


Отправлено: 01:04, 07-11-2010

 

Googler


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

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


Цитата semiono:
В файле надо найти строку, например:
<WIDTH int="800" />
и заменить её на
<WIDTH int="1024" />
Но лучше найти с неизвестным значением. »
Код: Выделить весь код
$sFile = "C:\I\WinSxS\Process\Application Data\codeblocks\default.conf"
$sText = FileRead($sFile)
$sText = StringRegExpReplace($sText, '(?i)<WIDTH\s+int="\d+"\s*/>', '<WIDTH int="1024" />')
If @extended Then
	$hFile =FileOpen($sFile,2)
	FileWrite($hFile,$sText)
	FileClose($hFile)
EndIf
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:24, 07-11-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для semiono

Ветеран


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

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


Спасибо большое, очень полезный скрипт! Некоторые программы не используют реестр, так к ним не подобраться без этого было!
А можно как-то многостроковые блоки выхватывать из XML, так как я боюсь что такое мне тоже наверняка встретится. Я имею ввиду где начало "<" и завершение "/>" внутри содержат @CRLF строчки? Искать по контенту, например, найти:
"<FFFF" конец будет само собой первый попавшийся тэг "/>"

-------
Полезное сообщение


Отправлено: 04:34, 07-11-2010 | #3


Ветеран


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

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


Если файл действительно содержит xml, то и работать с ним можно и нужно теми же средствами: Сценарии объектной модели документа DOM XML средствами OLE-Automation.
Это сообщение посчитали полезным следующие участники:

Отправлено: 04:43, 07-11-2010 | #4


Googler


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

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


Цитата semiono:
А можно как-то многостроковые блоки выхватывать из XML »
можно, но нужно хорошо представлять себе структуру документа, "универсального" варианта тут нет
...либо используйте DOM, как подсказал Iska ...
Цитата semiono:
"<FFFF" конец будет само собой первый попавшийся тэг "/>" »
теги могут быть вложенными


Iska, увы, далеко не всегда доступна полная инфа о структуре документа - чаще есть только несколько примеров, на основе которых приходится строить свои предположения о возможной структуре

Отправлено: 05:05, 07-11-2010 | #5


Аватара для semiono

Ветеран


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

Профиль | Отправить 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:
либо используйте DOM, как подсказал Iska »
Я не понял, там об инструменте ни слова не сказанно? Или я не понял, чем загружать чем править?
Это скорее для html аддонов инструкции, причём которые пишут, на м же надо их удалённо-пакетно править налету
?

ЗЫ Идея налету родилась! А что если вывести StringRegExpReplace() в STDINPUT консоли, зделать типа утилиту! )))
Я понимаю есть всякие PERL итп. но чисто поэкспереминтировать? Или это сложный и бажистый скрипт получиться?
Я имею ввиду зделать (AutoIt) StringRegExpReplace.exe --help

-------
Полезное сообщение


Последний раз редактировалось semiono, 07-11-2010 в 05:33.


Отправлено: 05:11, 07-11-2010 | #6


Googler


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

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


Цитата semiono:
там об инструменте ни слова не сказанно »
обычный VBS-скрипт, который при желании можно переделать на AutoIT
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:20, 07-11-2010 | #7


Аватара для semiono

Ветеран


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

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


amel27, при возможности напиши пример "<SOMETHING" & @CRLF & "/>",
а я потом подумаю как применять, в любом случае пригодиться такое. Но я сам тоже подумаю может и сам справлюсь. Про vbs спасиб! Теперь ясно!

Кстати, говоря vbs могут не работать из-за всяких твиков системы, а autoit даже от себя не заввисим!

-------
Полезное сообщение


Отправлено: 05:30, 07-11-2010 | #8


Googler


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

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


Цитата semiono:
напиши пример "<SOMETHING" & @CRLF & "/>"
и что с этим делать?.. в первом посте было понятно что и на что менять
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 07-11-2010 | #9


Аватара для Creat0R

Must AutoIt


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

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


Для работы с xml есть библиотека: XML DOM wrapper (COM).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 13:10, 07-11-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Поиск <строки> в XML

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход