Что нового

[Данные, строки] Как удалить одну строку из файла

Yura-H2O

Новичок
Сообщения
35
Репутация
0
Код:
#include<IE.au3>
#include<array.au3>

_FileDeleteLine(@ScriptDir & "\proxy.txt", 1)

Func _FileDeleteLine($sFile, $iLine)
    $hFile = FileOpen($sFile, 0)
    If $hFile = -1 Then Return SetError(1, 0, 0)

	$lFile = FileReadLine($hFile, 1)
	$proxy = StringSplit($lFile, ":")
	$sFileContent = ""
    $aFileContent = StringSplit(StringStripCR(FileRead($hFile)), @LF)

    FileClose($hFile)

	$ie = _IECreate()
	WinSetState("[CLASS:IEFrame]", "", @SW_MAXIMIZE)
	TrayTip('Смена прокси c proxy.txt','Выбираем первый прокси', 5)
	Sleep(5000)
	MouseClick("left", 235, 60)
	Sleep(1000)
	MouseClick("left", 250, 400)
	Sleep(1000)
	MouseClick("left", 165, 168)
	Sleep(1000)
	MouseClick("left", 350, 540)
	Sleep(1000)
	MouseClick("left", 108, 386, 2)
	Sleep(1000)
	Send($proxy[1])
	Sleep(1000)
	MouseClick("left", 235, 386, 2)
	Sleep(1000)
	Send($proxy[2])
	MouseClick("left", 268, 461)
	Sleep(2000)
	MouseClick("left", 215, 684)
	Sleep(2000)

    For $i = 1 To $aFileContent[0]
        If $i <> $iLine Then $sFileContent &= $aFileContent[$i] & @CRLF
    Next

    $hFile = FileOpen($sFile, 2)
    If $hFile = -1 Then Return SetError(2, 0, 0)

    FileWrite($hFile, StringTrimRight($sFileContent, 2))
    Return FileClose($hFile)
	Send("!+{F4}")
EndFunc


Вот таким способом меняю прокси в браузере. Не пойму почему удаляет из файла proxy.txt сразу две строки, а не одну:( И вообще подправте меня, если что неправильно или по глупому сделано.
 

xaker

Знающий
Сообщения
52
Репутация
16
както так
Код:
_write()	;создание proxy.txt

_FileDeleteLine("proxy.txt", 7)

_FileDeleteLine("proxy.txt", 3)

MsgBox(0, '', FileRead("proxy.txt"))

Func _FileDeleteLine($sFile, $iLine)
	$s = FileRead($sFile)
	If @error = 1 Or $iLine < 1 Then Return 0
	$proxy = StringRegExp($s, '((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})\R){'&$iLine&'}', 3)
	If Not IsArray($proxy) Then Return 0
	$hFile = FileOpen($sFile, 2)
	FileWrite($hFile, StringReplace( $s, $proxy[1]&':'&$proxy[2]&@CRLF, ''))
	FileClose($hFile)

	MsgBox(0, '', 'Удалено :'&$proxy[1]&':'&$proxy[2])
EndFunc

Func _write()
	$hFile = FileOpen("proxy.txt", 2)
	For $i = 1 To 9
		FileWrite($hFile, "192.168.1."&$i&":33" & @CRLF)
	Next
	FileClose($hFile)
EndFunc
 
Автор
Y

Yura-H2O

Новичок
Сообщения
35
Репутация
0
Теперь удаляет только первую строку, но когда остается в файле proxy.txt всего одна строка, тогда функция её не удаляет:( А надо бы, чтобы удаляло эту одну строку и выдавало Меседжбокс, что файл с прокси пуст.
 

xaker

Знающий
Сообщения
52
Репутация
16
удаляет ту строку которая указана во втором параметре _FileDeleteLine, последнюю стоку удаляет, и сообщение покажет если файл пуст.
Код:
_write()	;создание proxy.txt

MsgBox(0, '', _FileDeleteLine("proxy.txt", 1))

;~ _FileDeleteLine("proxy.txt", 3)

MsgBox(0, '', FileRead("proxy.txt"))

Func _FileDeleteLine($sFile, $iLine)
	$s = FileRead($sFile)
	If @error = 1 Or $iLine < 1 Then Return 'файл не читается'
	$proxy = StringRegExp($s, '((\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}):(\d{1,5})\R){'&$iLine&'}', 3)
	If Not IsArray($proxy) Then Return 'файл пуст'
	$hFile = FileOpen($sFile, 2)
	FileWrite($hFile, StringReplace( $s, $proxy[1]&':'&$proxy[2]&@CRLF, ''))
	FileClose($hFile)

	Return 'Удалено :'&$proxy[1]&':'&$proxy[2]
EndFunc

Func _write()
	$hFile = FileOpen("proxy.txt", 2)
	For $i = 1 To 9
		FileWrite($hFile, "192.168.1."&$i&":33" & @CRLF)
	Next
	FileClose($hFile)
EndFunc
 

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Yura-H2O [?]
почему удаляет из файла proxy.txt сразу две строки, а не одну
Не совсем так. Удаляет одну строку. Просто первая строка всегда не учитывается.
Код:
$lFile = FileReadLine($hFile, 1)
Вот здесь читается первая строка, после чего указатель в файле переходит на вторую строку. И далее
Код:
$aFileContent = StringSplit(StringStripCR(FileRead($hFile)), @LF)
чтение происходит со второй строки. Поэтому у вас в массиве $aFileContent отсутствует первая строка. Чтобы решить проблему - после первого чтения переведите указатель в начало файла
Код:
FileSetPos($hFile, 0, 0)
 
Верх