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

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

Ответить
Настройки темы
[решено] Скрипт для удаления нужных слов в ini файле

Аватара для Pozia

Ветеран


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

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


Подскажите скрипт который удалит нужные мне заведомо известные слова из ini файла и больше ничего в нем не тронет.

Отправлено: 07:45, 08-04-2009

 

Аватара для Pozia

Ветеран


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

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


proxy, amel27, в общем такой вот имею ini файл:

Код: Выделить весь код
[General]
Manufacturer=Windows XP Pozia Edition 2009
Model=NVIDIA GeForce 9800 GT   
[OEMSpecific]
SerialNo="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
[Support Information]
Line1=ОС: Windows XP SP 3 версия 5.1 сборка 2600.xpsp_sp3_qfe.080814-1300
Line2=
Line3=--------------------------------------------------------------------------------
Line4=Дата и время установки: 07.04.2009 (23:11)
Line5=--------------------------------------------------------------------------------
Line6=По любым вопросам и предложениям можно обратиться:
Line7=Velcom: x-xxx-xxx-xx-xx
Line8=MTC:     x-xxx-xxx-xx-xx
Line9=ICQ:     xxx-xxx-xxx
Line10=Mail:      xxxxx@xxxxxx.xx
Line11= xxxxxx xxxxxx xxxxxxxxxxx
Line12=--------------------------------------------------------------------------------
Line13=
Line14=Установленные компоненты и обновления (78):
Line15=
Line16=BASECSP   DNet1135  Games     IE8       IE968220  KB887606
Line17=KB922120  KB928788  KB929399  KB929773  KB932390  KB932716
Line18=KB933547  KB935551  KB935552  KB935957  KB939209  KB939683
Line19=KB941569  KB942288  KB943729  KB944043  KB946648  KB950762
Line20=KB950974  KB951066  KB951376  KB951618  KB951698  KB951748
Line21=KB951830  KB951978  KB952011  KB952069  KB952287  KB952954
Line22=KB953155  KB954067  KB954154  KB954459  KB954600  KB954708
Line23=KB954920  KB955069  KB955417  KB955704  KB955839  KB956802
Line24=KB956841  KB957097  KB958644  KB958655  KB958687  KB958690
Line25=KB958752  KB959772  KB960225  KB960680  KB960763  MSCOMPPA
Line26=MSXML     MassStor  OEMINFO   Patch_NT  Patch_NT  Patch_NT
Line27=Patch_NT  ROOTSUPD  SetupPro  SetupSet  WInstyle  WMFDIST1
Line28=WMP11     WMP11RU   WPI       WSTART    WSidebar  WUDF0100
В идиале нужно сделать так:

Код: Выделить весь код
[General]
Manufacturer=Windows XP Pozia Edition 2009
Model=NVIDIA GeForce 9800 GT   
[OEMSpecific]
SerialNo="xxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
[Support Information]
Line1=ОС: Windows XP SP 3 версия 5.1 сборка 2600.xpsp_sp3_qfe.080814-1300
Line2=
Line3=--------------------------------------------------------------------------------
Line4=Дата и время установки: 07.04.2009 (23:11)
Line5=--------------------------------------------------------------------------------
Line6=По любым вопросам и предложениям можно обратиться:
Line7=Velcom: x-xxx-xxx-xx-xx
Line8=MTC:     x-xxx-xxx-xx-xx
Line9=ICQ:     xxx-xxx-xxx
Line10=Mail:      xxxxx@xxxxxx.xx
Line11= xxxxxx xxxxxx xxxxxxxxxxx
Line12=--------------------------------------------------------------------------------
Line13=
Line14=Установленные компоненты и обновления (54):
Line15=
Line16=KB922120  KB928788  KB929399  KB929773  KB932390  KB932716
Line17=KB933547  KB935551  KB935552  KB935957  KB939209  KB939683
Line18=KB941569  KB942288  KB943729  KB944043  KB946648  KB950762
Line19=KB950974  KB951066  KB951376  KB951618  KB951698  KB951748
Line20=KB951830  KB951978  KB952011  KB952069  KB952287  KB952954
Line21=KB953155  KB954067  KB954154  KB954459  KB954600  KB954708
Line22=KB954920  KB955069  KB955417  KB955704  KB955839  KB956802
Line23=KB956841  KB957097  KB958644  KB958655  KB958687  KB958690
Line24=KB958752  KB959772  KB960225  KB960680  KB960763  KB887606
То есть мне нужно оставить только обнавления вида KB****** и пересчитать количество обнавлений. Так возможно?

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:37, 08-04-2009 | #11



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

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


Аватара для proxy

Старожил


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

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


Код: Выделить весь код
;~ #NoTrayIcon

#region: - Options
    Opt('GUIOnEventMode',       1)
    Opt('MustDeclareVars',      1)
    Opt('TrayIconDebug',        1)
    Opt('TrayIconHide',         0)
#endregion

Local   $sFilePath = @ScriptDir & '\oeminfo.ini'

Local   $sResult = _EditOemInfo($sFilePath, 0)
If @error Then
    MsgBox(16, 'Ошибка', $sResult & @CRLF & @CRLF & 'Колличество КВ:' & @TAB & @extended & @CRLF & 'Код результата:' & @TAB & @error)
Else
    MsgBox(64, 'Результат', $sResult & @CRLF & @CRLF & 'Колличество КВ:' & @TAB & @extended & @CRLF & 'Код результата:' & @TAB & @error)
EndIf

Func _EditOemInfo($sFilePath, $iCountKbRow)
    Local   $sFileText = FileRead($sFilePath)
            If @error Then Return SetError(1, 0, 'Ошибка чтения файла')

    Local   $aKB = StringRegExp($sFileText, '(?s)(KB\d+)', 3)
            If @error Then Return SetError(2, 0, 'Ошибка поиска KB')

    Local   $iLineNamber = StringRegExpReplace($sFileText, '(?i)(?s).*Line(\d+)=Установленные компоненты и обновления.*', '\1') + 1
            If @error Then Return SetError(3, 0, 'Ошибка определения номера Line')

    Local   $sKB = 'Line' & $iLineNamber & '=' & @CRLF
    Local   $n, $i

    If $iCountKbRow < 1 Then $iCountKbRow = 4

    For $i=0 To UBound($aKB)
        $iLineNamber += 1
        $sKB &= 'Line' & $iLineNamber & '='
        For $n=0 To $iCountKbRow-1
            If $i+$n >= UBound($aKB) Then ExitLoop 2
            $sKB &= $aKB[$i+$n]
            If $n < $iCountKbRow-1 Then
                $sKB &= ' '
            Else
                $sKB &= @CRLF
                $i += $iCountKbRow-1
            EndIf
        Next
        If $i >= UBound($aKB)-1 Then ExitLoop
    Next

    If StringRight($sKB, 1) == ' ' Then $sKB = StringTrimRight($sKB, 1)
    If StringRight($sKB, 2) == @CRLF Then $sKB = StringTrimRight($sKB, 2)

    $sFileText = StringRegExpReplace($sFileText, '(?i)(?s)(.*Установленные компоненты и обновления).*', '\1') & ' (' & UBound($aKB) & '):' & @CRLF & $sKB

    FileDelete($sFilePath)
    FileWrite($sFilePath, $sFileText)

    Return SetError(0, UBound($aKB), 'Операция выполненна успешно')
EndFunc

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Последний раз редактировалось proxy, 08-04-2009 в 21:19.

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

Отправлено: 20:48, 08-04-2009 | #12


Аватара для Pozia

Ветеран


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

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


proxy, спасибо! есть один глюк. скрипт глотает некоторые KB***
После выполнения пересчитал правильно - 54 но их получилось в ini файле 44. Посмотрите пожалуйста ошибку. И сделайте пожалуйста скрипт полностью тихим. Не нужно всяких окон о выполнении

И в исходном файле 6 столбцов обнавлений. После обработки получается 4. Подправте тоже пожалуйста

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 21:30, 08-04-2009 | #13


Аватара для proxy

Старожил


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

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


1. Перепроверьте скрипт, тогда его обновлял. У меня все работае отлично.
2. Стоит "читать" код - там все есть: _EditOemInfo($sFilePath, $iCountKbRow)
$iCountKbRow - колличество KB столбцов, не сложно догадаться/перевести...
Волшебная строка: _EditOemInfo($sFilePath, 0) - меняйте ноль на колличество желаемых столбцов.
3.
Цитата:
И сделайте пожалуйста скрипт полностью тихим. Не нужно всяких окон о выполнении
Закомментируйте функции вывода сообщений.

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

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

Отправлено: 21:54, 08-04-2009 | #14


Аватара для Pozia

Ветеран


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

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


proxy, а как добавить пробелов между KB***?
Сильно не пинайте, я ноль в скриптах(

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 22:32, 08-04-2009 | #15


Аватара для proxy

Старожил


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

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


увиличивайте колличество пробелов вот тут:
Код: Выделить весь код
.....
If $n < $iCountKbRow-1 Then
    $sKB &= ' '
Else
......
Цитата:
Сильно не пинайте, я ноль в скриптах
Учится ни когда не поздно ))

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?

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

Отправлено: 23:19, 08-04-2009 | #16


Googler


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

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


вариант через RegExp():
Код: Выделить весь код
$sFile = "c:\Work.AU3\oem\OEMInfo.ini"
$sText= FileRead($sFile)

$aTag = StringRegExp($sText, "(?ism)^Line(\d+)=Установленные компоненты и обновления \(\d+\):", 3)
$iTag = StringInStr ($sText, @CRLF&"Line"& $aTag[0] &"=")+1
$aKBs = StringRegExp($sText, "(?i)\b(KB\d+)\b", 3, $iTag)

$sList = "Line"& $aTag[0] &"=Установленные компоненты и обновления ("& UBound($aKBs) &"):"&@CRLF&"Line"& $aTag[0]+1 &"="& @CRLF
For $i=0 To UBound($aKBs)-1 Step 6
    $sList &= StringFormat("Line%-i=%-10s%-10s%-10s%-10s%-10s%-10s\r\n",$aTag[0]+2+$i/6,$aKBs[$i],$aKBs[$i+1],$aKBs[$i+2],$aKBs[$i+3],$aKBs[$i+4],$aKBs[$i+5])
Next

FileDelete($sFile)
FileWrite($sFile,StringLeft($sText,$iTag) & $sList)
Это сообщение посчитали полезным следующие участники:

Отправлено: 06:58, 09-04-2009 | #17


Аватара для Pozia

Ветеран


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

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


amel27, спасибо. Вечером проверю ваш вариант

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 07:38, 09-04-2009 | #18


Аватара для proxy

Старожил


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

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


amel27, StringFormat (!!!!) блин....как все просто!! )))
Цитата:
For $i=0 To UBound($aKBs)-1 Step 6
$sList &= StringFormat("Line%-i=%-10s%-10s%-10s%-10s%-10s%-10s\r\n",$aTag[0]+2+$i/6,$aKBs[$i],$aKBs[$i+1],$aKBs[$i+2],$aKBs[$i+3],$aKBs[$i+4],$aKBs[$i+5])
Next
супер

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 08:00, 09-04-2009 | #19


Аватара для Pozia

Ветеран


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

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


amel27, ВЫ как всегда на высоте. Кратко, быстро и по делу. Вот только не могу сообразить что поменять чтобы стало колонок допустим 5 и интервал между ними 7 пробелов. Подскажите пожалуйста

-------
Жизни вглядись в глаза: Это то, что ты всегда искал? Это то, что ты всегда хотел? Да или нет?


Отправлено: 18:18, 09-04-2009 | #20



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - [решено] Скрипт для удаления старых файлов и папок из определенной папки avfiga Скриптовые языки администрирования Windows 71 07-01-2023 18:50
CMD/BAT - [решено] Помогите найти скрипт для удаленного удаления програм magwolf Скриптовые языки администрирования Windows 20 01-02-2016 23:35
Система - Что у Вас в файле Finish.ini для GUI интегратора? wolkow70 Наборы обновлений для Windows XP/2003/Windows 7 13 15-01-2011 02:07
Любой язык - нужен скрипт для удаления всех файлов кроме нужных для запуска Windows XP Dark Ange1 Скриптовые языки администрирования Windows 11 07-03-2010 13:34
Функция PHP для удаления не нужных символов darksmoke Вебмастеру 3 01-04-2008 01:18




 
Переход