Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


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

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


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

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

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

Отправлено: 09:49, 17-08-2007 | #311