Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Поиск и замена текста в файле (http://forum.oszone.net/showthread.php?t=202130)

TERMINAL 16-03-2011 11:36 1636068

Поиск и замена текста в файле
 
Вложений: 1
Приветствую Вас !
Прочитал несколько похожих тем, но решения так и не нашёл (или не понял).
Есть файл по пути (C:\Documents and Settings\Пользователь\Мои документы\Default.rdp), тоесть настройки RDP. Мне нужно найти в нём, к примеру строку desktopwidth:i:1280 и земенить её на desktopwidth:i:1024. Игрался с командами StringRegExp и StringReplace, что-то ничего не выходит-непойму как сохранить найденный и изменённый desktopwidth:i:1024. Заранее спс.

читать дальше »
Примерчик:
$sFile = FileRead("C:\Documents and Settings\Пользователь\Мои документы\Default.rdp")
$text=StringReplace($sFile, "desktopwidth:i:1280" & @CRLF, "desktopwidth:i:1024" & @CRLF)
MsgBox(0, "test", $text)

yurfed 16-03-2011 12:07 1636089

Цитата:

Цитата TERMINAL
Примерчик:
$sFile = FileRead("C:\Documents and Settings\Пользователь\Мои документы\Default.rdp") »

Попробуйте для начала более простой путь. Например: C:\123\Default.rdp

madmasles 16-03-2011 12:19 1636097

TERMINAL,
Вы бы пример Вашего файла Default.rdp привели.

TERMINAL 16-03-2011 12:28 1636106

yurfed, Тоже не срабатывает, остаются старые параметры, у меня такое впечатление что отсутствует команда записи...

madmasles, прикрепил к шапке...

Iska 16-03-2011 14:30 1636205

TERMINAL, если Вы можете гарантировать наличие именно этой строки в файле, то достаточно простого:
Код:

#Include <File.au3>

If (_ReplaceStringInFile("E:\Песочница\0041\Default.rdp", "desktopwidth:i:1280", "desktopwidth:i:1024") = 0) Then
        ConsoleWriteError("Can't find [desktopwidth:i:1280] in [Default.rdp]" & @CRLF)
EndIf

Если строка может отсутствовать, или вместо «desktopwidth:i:1280» может быть, например, «desktopwidth:i:600», а добавление или замена всё равно требуются, то код надо будет делать иным.

madmasles 16-03-2011 15:31 1636267

TERMINAL,
Попробуйте так:
Код:

$sReplaseString = 'full address'
$sNew = '127.0.0.0'
$sFile = @ScriptDir & '\Default.rdp'
$iEncoding = FileGetEncoding($sFile)
$hFile = FileOpen($sFile, $iEncoding)
$sText = FileRead($hFile)
FileClose($hFile)
$sSearch = StringRegExpReplace($sText, '(?s).*?' & $sReplaseString & '(?::i:|:s:)(.*?)\r\n?.*', '\1')
ConsoleWrite($sSearch & @CR)
$sText = StringReplace($sText, $sSearch, $sNew)
$hFile = FileOpen($sFile, $iEncoding + 2)
FileWrite($sFile, $sText)
FileClose($hFile)


madmasles 16-03-2011 17:49 1636356

TERMINAL,
Или так:
Код:

#include <GUIConstantsEx.au3>

$j = 0
$sFile = @ScriptDir & '\Default.rdp'
If Not FileExists($sFile) Then
    MsgBox(16, 'Error', 'Error')
    Exit
EndIf
$iEncoding = FileGetEncoding($sFile)
$hFile = FileOpen($sFile, $iEncoding)
$sText = FileRead($hFile)
FileClose($hFile)
$aTemp = StringSplit(StringStripCR($sText), @LF)
Dim $aText[$aTemp[0] + 1][4]
For $i = 1 To $aTemp[0]
    If $aTemp[$i] Then
        $j += 1
        $aText[$i][1] = StringRegExpReplace($aTemp[$i], '^(.*?):.*', '\1')
        $aText[$i][2] = StringRegExpReplace($aTemp[$i], $aText[$i][1] & '(:.*?:).*', '\1')
        $aText[$i][3] = StringRegExpReplace($aTemp[$i], $aText[$i][1] & $aText[$i][2] & '(.*?)\z', '\1')
    EndIf
Next
ReDim $aText[$j + 1][4]
$aText[0][0] = $j
$aTemp = 0
$sText = ''
$j = 0
$hGui = GUICreate('Редактор Default.rdp', 260, 30 + $aText[0][0] * 15)
For $i = 1 To $aText[0][0]
    GUICtrlCreateLabel($aText[$i][1], 10, 5 + ($i - 1) * 15, 130, 14)
    GUICtrlSetFont(-1, 7)
    $aText[$i][0] = GUICtrlCreateInput($aText[$i][3], 150, 5 + ($i - 1) * 15, 100, 14)
    GUICtrlSetFont(-1, 7)
Next
$nButton = GUICtrlCreateButton('Сохранить', 80, 7 + $aText[0][0] * 15, 100, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton
            $sText = ''
            For $i = 1 To $aText[0][0]
                $sText &= $aText[$i][1] & $aText[$i][2] & GUICtrlRead($aText[$i][0]) & @CRLF
            Next
            $hFile = FileOpen($sFile, $iEncoding + 2)
            FileWrite($hFile, $sText)
            FileClose($hFile)
    EndSwitch
WEnd



Время: 17:43.

Время: 17:43.
© OSzone.net 2001-