Что нового

Как внести изменения в несколько текстовых файлов

A

at

Гость
Версия AutoIt: 3.3.6.1

Описание: Добрый час, Уважаемое Сообщество!

Утилита для смены IP-адреса который храниться в файле server.txt.
Скрипт сохраняет путь в ini-файле к файлу сервера, и при необходимости изменить server.txt, обращался к этому ini-файлу. Появилась аналогичная необходимость для изменения файлов user.config, которых на диске несколько и они находятся в разных местах. Прошу помощи, как проще реализовать эту функцию в моем скрипте.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>

$Form2 = GUICreate('Server-Change', 181, 217, 300, 165)
$PageControl1 = GUICtrlCreateTab(0, 8, 180, 208)
$TabSheet_General = GUICtrlCreateTabItem('Выбор')
$Button_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 41, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 73, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 105, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 137, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 168, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label1 = GUICtrlCreateLabel('10.10.1.1', 96, 48, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label2 = GUICtrlCreateLabel('10.10.1.2', 96, 80, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label3 = GUICtrlCreateLabel('10.10.1.3', 96, 112, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label4 = GUICtrlCreateLabel('10.10.1.4', 96, 144, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label5 = GUICtrlCreateLabel('10.10.1.5', 96, 176, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$TabSheet_Option = GUICtrlCreateTabItem('Настройка')
$Button_Option_1 = GUICtrlCreateButton('Файл сервера', 8, 41, 99, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
GUICtrlCreateTabItem('')
GUISetState(@SW_SHOW)

$sIniFile = @ScriptDir & '\conf.ini'
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')

Global $Text_Server_1 = '10.10.1.1'
Global $Text_Server_2 = '10.10.1.2'
Global $Text_Server_3 = '10.10.1.3'
Global $Text_Server_4 = '10.10.1.4'
Global $Text_Server_5 = '10.10.1.5'

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
			
		Case $Button_Option_1
            $sFile_1 = FileOpenDialog('Выберите файл настроек сервера', 'C:\', 'Файл сервера (server.txt; user.config)')
			IniWrite($sIniFile, 'directory', 'path', $sFile_1)
		
	    Case $Button_Server_1
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
            $Read = FileRead($sFile_1)
            $Replace = StringReplace($Read, $Text_Server_2, $Text_Server_1)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_3, $Text_Server_1)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_4, $Text_Server_1)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_5, $Text_Server_1)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
      
        Case $Button_Server_2
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)	  
            $Read = FileRead($sFile_1)
            $Replace = StringReplace($Read, $Text_Server_1, $Text_Server_2)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_3, $Text_Server_2)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_4, $Text_Server_2)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_5, $Text_Server_2)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			
        Case $Button_Server_3
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)			
            $Read = FileRead($sFile_1)
            $Replace = StringReplace($Read, $Text_Server_2, $Text_Server_3)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_1, $Text_Server_3)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_4, $Text_Server_3)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_5, $Text_Server_3)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
      
        Case $Button_Server_4
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)	  
            $Read = FileRead($sFile_1)
            $Replace = StringReplace($Read, $Text_Server_2, $Text_Server_4)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_3, $Text_Server_4)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_1, $Text_Server_4)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_5, $Text_Server_4)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
      
			Case $Button_Server_5
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)	  
            $Read = FileRead($sFile_1)
            $Replace = StringReplace($Read, $Text_Server_2, $Text_Server_5)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_3, $Text_Server_5)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_4, $Text_Server_5)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			$Read = FileRead($sFile_1)
			$Replace = StringReplace($Read, $Text_Server_1, $Text_Server_5)
			FileDelete($sFile_1)
			FileWrite($sFile_1, $Replace)
			
    EndSwitch
WEnd
 
Автор
A

at

Гость
Сделал так. При выборе сервера, происходит поиск всех файлов на диске С: по маске server.txt и производиться замена нужной строки. В принципе универсально, не нужно запоминать путь к файлам. Единственное, не знаю, как сократить время на поиск.

Код:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#Include <File.au3>

$Form2 = GUICreate('Server-Change', 181, 217, 300, 165)
$PageControl1 = GUICtrlCreateTab(0, 8, 180, 208)
$TabSheet_General = GUICtrlCreateTabItem('Выбор')
$Button_Server_1 = GUICtrlCreateButton('Сервер 1', 8, 41, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_2 = GUICtrlCreateButton('Сервер 2', 8, 73, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_3 = GUICtrlCreateButton('Сервер 3', 8, 105, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_4 = GUICtrlCreateButton('Сервер 4', 8, 137, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Button_Server_5 = GUICtrlCreateButton('Сервер 5', 8, 168, 75, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label1 = GUICtrlCreateLabel('10.10.1.1', 96, 48, 61, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label2 = GUICtrlCreateLabel('10.10.1.2', 96, 80, 55, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label3 = GUICtrlCreateLabel('10.10.1.3', 96, 112, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label4 = GUICtrlCreateLabel('10.10.1.4', 96, 144, 79, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$Label5 = GUICtrlCreateLabel('10.10.1.5', 96, 176, 73, 18)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
$TabSheet_Option = GUICtrlCreateTabItem('Настройка')
$Button_Option_1 = GUICtrlCreateButton('Файл сервера', 8, 41, 99, 25)
GUICtrlSetFont(-1, 8, 400, 0, 'Arial')
GUICtrlCreateTabItem('')
GUISetState(@SW_SHOW)

$sIniFile = @ScriptDir & '\conf.ini'
$sFile_1 = IniRead($sIniFile, 'directory', 'path', '')

Global $Text_Server_1 = '10.10.1.1'
Global $Text_Server_2 = '10.10.1.2'
Global $Text_Server_3 = '10.10.1.3'
Global $Text_Server_4 = '10.10.1.4'
Global $Text_Server_5 = '10.10.1.5'
Global $Replace_1 = '10.10.1.2|10.10.1.3|10.10.1.4|10.10.1.5'
Global $Replace_2 = '10.10.1.1|10.10.1.3|10.10.1.4|10.10.1.5'
Global $Replace_3 = '10.10.1.2|10.10.1.1|10.10.1.4|10.10.1.5'
Global $Replace_4 = '10.10.1.2|10.10.1.3|10.10.1.1|10.10.1.5'
Global $Replace_5 = '10.10.1.2|10.10.1.3|10.10.1.4|10.10.1.1'

While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit
			
		Case $Button_Option_1
            $sFile_1 = FileOpenDialog('Выберите файл настроек сервера', 'C:\', 'Файл сервера (server.txt; user.config)')
			IniWrite($sIniFile, 'directory', 'path', $sFile_1)
		
	    Case $Button_Server_1
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
		_FindFiles1('C:', 'server.txt')
		
	    Case $Button_Server_2
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
		_FindFiles2('C:', 'server.txt')
		
        Case $Button_Server_3
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
		_FindFiles3('C:', 'server.txt')
		
		Case $Button_Server_4
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
		_FindFiles4('C:', 'server.txt')
		
	    Case $Button_Server_5
		    Sleep(500)
		    ProcessClose('Intel.exe')
            Sleep(500)
		_FindFiles5('C:', 'server.txt')
		
    EndSwitch
WEnd

Func _FindFiles1($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
	If Not @error Then
        For $i = 1 To $FileList[0]
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $Replace_1, $Text_Server_1) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles1($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc

Func _FindFiles2($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
	If Not @error Then
        For $i = 1 To $FileList[0]
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $Replace_2, $Text_Server_2) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles2($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc

Func _FindFiles3($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
	If Not @error Then
        For $i = 1 To $FileList[0]
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $Replace_3, $Text_Server_3) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles3($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc

Func _FindFiles4($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
	If Not @error Then
        For $i = 1 To $FileList[0]
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $Replace_4, $Text_Server_4) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles4($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc

Func _FindFiles5($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
	If Not @error Then
        For $i = 1 To $FileList[0]
            $Read = FileRead($sRoot & '\' & $FileList[$i]) ;Считываем
            $Open = FileOpen($sRoot & '\' & $FileList[$i], 2) ;Открываем
            $Replace = StringRegExpReplace($Read, $Replace_5, $Text_Server_5) ;Изменяем
            FileWrite($Open, $Replace) ;Переписываем
            FileClose($Open) ;Закрываем
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles5($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc
 
Верх