Что нового

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

Noobs Enslaver

Новичок
Сообщения
10
Репутация
0
Здравствуйте, такая вот проблема - нашел я у вас здесь решение первой части моей большой проблемы - обмен данными через командную строку:
Код:
#include <Constants.au3> 
Global $sStdOut = "" 
Global $sStdErr = "" 

DOS("1.exe")

Func DOS($iCommand,$iKey = "")
    $Process = Run(@ComSpec & " /c " & $iCommand & $iKey, @SystemDir, @SW_HIDE, $STDOUT_CHILD)
While 1 
    $sStdOut = StdoutRead($Process) & @CRLF
    If @error Then ExitLoop 
    $sStdOut = StringReplace($sStdOut, @CRLF, "") 
    $sStdOut = StringReplace($sStdOut, @CR & @CR, @CR)
    $sStdOut = OemToChar($sStdOut) 
	ConsoleWrite($sStdOut)
WEnd 
EndFunc
Func OemToChar($szSrc) 
Local $placeholder 
    For $i = 0 To StringLen($szSrc) 
        $placeholder &= "  " 
    Next 
    Local $lRetVal = DllCall("user32.dll", "long", "OemToChar", "str", $szSrc, "str", $placeholder) 
    If IsArray($lRetVal) And $lRetVal[0] = 1 Then 
        Return SetError(0, 0, $lRetVal[2]) 
    EndIf 
 
    Return SetError(1, 0, "") 
 EndFunc

так вот, подскажите плз как сделать чтобы считанная инфа уходила не в поток вывода, а вся в одной переменной собиралась для дальнейшего анализа, а то там сначала пустые строки появляются,что очень мешает, а я не могу никакие сравнения над строками провести адекватные? И еще - можно ли конвертировать полученную таким путём информацию из текстового вида в число (я передавать то собственно и собираюсь числа) ? Подскажите плз а то я уже всё перепробовал (
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
N

Noobs Enslaver

Новичок
Сообщения
10
Репутация
0
упс, прошу прощения)
Я так подумал - мне бы хотя бы просто избавиться от пустых строк и научиться сравнивать то что я получил с образцом, а остальное я написал бы в той программе с которой и пытаюсь наладить общение))
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Noobs Enslaver,
Пример.
Код:
#include <Constants.au3>
#include <WinAPIEx.au3> ;см. мою подпись
#include <Array.au3>

$sBuffer = ''
$sRead = ''

$iPID = Run(@ComSpec & ' /C ping google.com', @SystemDir, @SW_HIDE, $STDOUT_CHILD)
If Not $iPID Then Exit -33
While 1
	$sBuffer = StdoutRead($iPID)
	If @error Then ExitLoop
	If $sBuffer Then
		$sRead &= $sBuffer
	EndIf
	Sleep(2)
WEnd
$sRead = _WinAPI_OemToChar($sRead)
$sRead = StringStripCR($sRead);убрать @CR
$sRead = StringRegExpReplace($sRead, '((^[\n]*)|([\n]*$))', '');убрать @LF в начале и в конце
$sRead = StringRegExpReplace($sRead, '[\n]{2,}', @LF);убрать пустые строки
ConsoleWrite($sRead & @LF)
ConsoleWrite('=========================' & @LF)
$iMax = StringRegExpReplace($sRead, '(?s).*Макс.*?(\d+?)\D.*', '$1');получаем Максимальное время приема-передачи
If @extended = 1 Then
	$iMax = Number($iMax);Int32
	;$iMax = Int($iMax);Int64
	ConsoleWrite('Max time: ' & $iMax & @TAB & VarGetType($iMax) & @LF)
Else
	ConsoleWrite('error' & @LF)
EndIf
$aRead = StringSplit($sRead, @LF);получаем данные в массив построчно
For $i = 1 To $aRead[0]
	$aRead[$i] = StringStripWS($aRead[$i], 7) ;убираем лишние пробелы
Next
_ArrayDisplay($aRead)
 
Автор
N

Noobs Enslaver

Новичок
Сообщения
10
Репутация
0
Спасибо большое, то что нужно! И так удобно в массиве оформлено!
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
OffTopic:
Узнаю свой код ;D
 
Верх