Что нового

[Данные, строки] Поочерёдный выбор строк из ini\txt файла и разделение на два значения.

CrazyKing

Новичок
Сообщения
24
Репутация
0
Добрый вечер!
Подскажите, пожалуйста, как заставить скрипт поочередно выбирать из ini файла(возможно txt) строки вида "логин:пасс", при этом разделять их на две переменные (к примеру, в виде разделителя использовать двоеточие), затем подставлять данные переменные в скрипт. Делать это надо в цикле пока не закончатся строки в файле, т.к. неизвестно точное кол-во строк.

По моей логике как то так:
1. Берём первую строку из файла;
2. Разделяем её на две переменные, к примеру $al и $ap;
3. Подставляем их в форму на сайте
Код:
_IEFormElementSetValue($ologin, $aL) ;вводим текст

4. Делаем нужные действия;
5. Берём следующую строку и повторяем тоже самое
6. По окончанию строк завершаем работу цикла.

Изначально делал так:
Код:
#include <IE.au3>
$aPath_ini = @ScriptDir & "\сonfig.ini" ;Ищем инишник
$aL = IniRead($aPath_ini, "authorization", "Login", "no")
$aP= IniRead($aPath_ini, "authorization", "Password", "no")
$oForm = _IEFormGetCollection ($oIE, 0) ;получаем колекцию формы
$oLogin = _IEFormElementGetObjByName ($oForm, "UserName") ;ищем
_IEFormElementSetValue($ologin, $aL) ;вводим текст
$opass = _IEFormElementGetObjByName($oForm, "Password") ;находим строку пароля по ID
_IEFormElementSetValue($opass, $aP)  ;вводим текст


Содержимое ini-файла:
Код:
[authorization]
Login=1234
Password=1234
В данном случае мне придётся каждый раз указывать конкретную секцию, и тыкать скрипт носом что брать. :-X

Пробовал использовать такой пример:
Код:
#include <file.au3>
$sFilePath = @ScriptDir & "\my.txt"
$sLines = _FileCountLines($sFilePath)
For $i = 1 To $sLines
    $command = FileReadLine($sFilePath, $i)
    MsgBox(0, "", $command & $i)
Next

В этом случае он возвращал из файла все строки поочерёдно, но я не как не могу понять как мне разбить получаемые данные на две переменные и дальше их использовать. :-\
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Код:
#include <Array.au3>
#include <IE.au3>

$aArray = IniReadSection(@ScriptDir & "\Config.ini", "authorization")
If @error Then
    MsgBox(4096, "", "Произошла ошибка, отсутствует INI-файл.")
	Exit
Else
EndIf

For $i = 1 To $aArray[0][0]
	_IEFormElementSetValue($ologin, $aArray[$i][0]) ;вводим текст
	_IEFormElementSetValue($opass, $aArray[$i][1])  ;вводим текст
Next


Содержимое ini-файла
Код:
[authorization]
Login1=Password1
Login2=Password2
Login3=Password3
Login4=Password4
Login5=Password5
Login6=Password6
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
CrazyKing [?]
как мне разбить получаемые данные на две переменные
Код:
StringSplit


CrazyKing [?]
(возможно txt) строки вида "логин:пасс", при этом разделять их на две переменные (к примеру, в виде разделителя использовать двоеточие), затем подставлять данные переменные в скрипт. Делать это надо в цикле пока не закончатся строки в файле, т.к. неизвестно точное кол-во строк.
Код:
$hFile = FileOpen(@ScriptDir & '\FileReadLine.au3', 0)

; Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
    Exit
EndIf

; Читает построчно текст, пока не будет достигнут конец файла EOF
While 1
    $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
$aData = StringSplit($sLine, ":")
If @error Then ContinueLoop
    If MsgBox(1, "Прочитанные данные:", $aData[1] & @CRLF & $aData[2]) = 2 Then ExitLoop
WEnd

FileClose($hFile)


Подставляем их в форму на сайте

Код:
$oLogin = _IEFormElementGetObjByName ($oForm, "UserName") ;ищем
_IEFormElementSetValue($ologin, $aData[1]) ;вводим текст
$opass = _IEFormElementGetObjByName($oForm, "Password") ;находим строку пароля по ID
_IEFormElementSetValue($opass, $aData[2])  ;вводим текст
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Прошу прощения что так долго не отвечал. Не было возможности.
Сделал так:
Код:
#include <IE.au3>
$oIE = _IECreate("https://")
WinSetOnTop($oIE,"",1) ;делаем окно поверх всех окон
WinSetState ("Вход Windows Internet Explorer", '', @SW_MAXIMIZE)
$hFile = FileOpen(@ScriptDir & '\my.txt', 0)

; Проверяет, является ли файл открытым, перед тем как использовать функции чтения/записи в файл
If $hFile = -1 Then
    MsgBox(4096, "Ошибка", "Невозможно открыть файл.")
    Exit
EndIf

; Читает построчно текст, пока не будет достигнут конец файла EOF
While 1
    $sLine = FileReadLine($hFile)
    If @error = -1 Then ExitLoop
$aData = StringSplit($sLine, ":")
If @error Then ContinueLoop
sleep(1000)
$oForm = _IEFormGetCollection ($oIE, 0) ;получаем колекцию формы
$oLogin = _IEFormElementGetObjByName ($oForm, "UserName") ;ищем
_IEFormElementSetValue($ologin, $aData[1]) ;вводим текст
$opass = _IEFormElementGetObjByName($oForm, "Password") ;находим строку пароля по ID
_IEFormElementSetValue($opass,  $aData[2])  ;вводим текст
sleep(1000)
$colInputs = _IETagNameGetCollection($oIE, "input")
    $iInput = 0
	For $oInput In $colInputs
        If $oInput.type = "submit" Then
	   if $oInput.value = "Войти" Then  ; указываю на какую кнопку жму.
	       _IEAction ($oInput, "click")
	   Endif
		EndIf
		$oInput +=1
	 Next
WEnd

FileClose($hFile)

Подставляет и разделяет, всё отлично! Спасибо огромное за помощь! :beer:
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Код:
WinSetOnTop($oIE,"",1) ;делаем окно поверх всех окон

Я бы так сделал:
Код:
WinSetOnTop(_IEPropertyGet($oIE, "hwnd"),"",1) ;делаем окно поверх всех окон

Потому что в функцию WinSetOnTop надо hwnd окна передавать, а вы передавали объект IE.
 
Автор
CrazyKing

CrazyKing

Новичок
Сообщения
24
Репутация
0
Работает в обоих случаях, последовал Вашему совету :smile:
 
Верх