Angelus
Цитата:
вместо ввода с клавиатуры допустим...C:\Alcohol Soft......вводится......\A Ї.....
|
Посылаются латинские символы при не латинской раскладке клавиатуры - с точки зрения AutoIT, нормальное пведение, хотя я сам хотел бы чтобы этого не происходило...
Как вариант менять раскладку перед посыланием символов, либо (намного надёжнее) писать текст используя
ControlSetText(), ведь как я поняол нужно вписать текст в определёное поле другого приложения?
Цитата:
Можно ли так обрабатывать текст?
|
Не желательно, это медлено и не надёжно, там каждую строку открывается файл, пишется в него, и потом закрывается файл (функция
_FileWriteToLine()), лучше перечитать весь файл в массив, а потом обрабатывать сам массив...
Я лично такой метод использую:
Код:

$File = "C:\test.txt"
$Ret = _FileDeleteDuplicates($File, -1)
If $Ret = 1 Then
MsgBox(64, "", "Was deleted <" & @extended & "> duplicates in file [" & $File & "]")
ElseIf @error Then
MsgBox(48, "", "File [" & $File & "] was not found.")
EndIf
Func _FileDeleteDuplicates($sFile, $sDirection=-1)
If Not FileExists($sFile) Then Return SetError(1, 0, -1)
Local $sFileArray = StringSplit(StringStripCR(FileRead($sFile)), @LF)
_ArrayDeleteClones($sFileArray, $sDirection)
Local $Extended = @extended
If $Extended = 0 Then Return SetError(0, 0, 0)
Local $hFile = FileOpen($sFile, 130), $LF = @LF
For $i = 1 To $sFileArray[0]
If $i = $sFileArray[0] Then $LF = ""
FileWrite($hFile, $sFileArray[$i] & $LF)
Next
FileClose($hFile)
Return SetError(0, $Extended, 1)
EndFunc
Func _ArrayDeleteClones(ByRef $sArray, $sDirection=-1)
If Not IsArray($sArray) Then Return SetError(1)
If UBound($sArray, 0) > 1 Then Return SetError(2)
Local $NewArr[1], $Extended=0, $FindDuplicate
For $i = 1 To UBound($sArray)-1
$FindDuplicate = _FindInArray($sArray, $sArray[$i], $i-1, $sDirection)
If $FindDuplicate = -1 Then
ReDim $NewArr[UBound($NewArr)+1]
$NewArr[UBound($NewArr)-1] = $sArray[$i]
Else
$Extended += 1
EndIf
Next
$NewArr[0] = UBound($NewArr) - 1
$sArray = $NewArr
Return SetError(0, $Extended, $sArray)
EndFunc
Func _FindInArray(ByRef $Array, $WhatToFind, $StartFrom=1, $sDirection=-1)
If UBound($Array) < 2 Then Return -1
Local $iFor = $StartFrom, $iTo = 1, $iStep = -1
If $sDirection = 1 Then
$iFor = $StartFrom + 2
$iTo = UBound($Array)-1
$iStep = 1
EndIf
For $iArr = $iFor To $iTo Step $iStep
If $Array[$iArr] = $WhatToFind Then Return $iArr
Next
Return -1
EndFunc