Что нового

Вывод в консоль текста в одну и ту же строку

SergiUX

Новичок
Сообщения
4
Репутация
0
Всем привет!
Прошу помочь, подсказать. Есть хотелка выводить в консоль данные о длительных процессах, выполняемых в скрипте. Но выводить не так чтобы каждый раз в новую строку, а например как scandisk выводит в свой отчет о проверке диска в одну строку процент выполненной работы с заменой числа процентов в этой строке. Например:

Сканирование диска С Сканирование 15%... ; <- число процентов в этой строке должны меняться, Сканирование завершено

Сначала была мысль использовать через CHR вставку символа BackSpace. Думал что получится с помощью него стирать N последних символов в выведенном в консоль тексте и печатать на их месте новые. Но оказывается это не работает. Это вообще возможно в Autoit?
 

lettterssino

Знающий
Сообщения
109
Репутация
10
Если не использовать именно консоль, у меня по дурацкому, но мне вполне достаточно этого
Код:
$i = 0
    $d = 0
    $hTimer = TimerInit()
    ProgressOn("Сравнение файлов", '', '', -1, 100, 18)
    While $i <= ($KolFile1 - 1)

        $Proc = (($i + $d) / (($KolFile1 - 1) + ($KolFile2 - 1))) * 100
        If $Proc <= 10 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 3) &"%")
        Elseif $Proc <100 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 4) &"%")
        Elseif $Proc = 100 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 3) &"%")
        EndIf

        $i = $i + 1
    WEnd


    While $d <= ($KolFile2 - 1) 
        $Proc = (($i + $d) / (($KolFile1 - 1) + ($KolFile2 - 1))) * 100
        If $Proc <= 10 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 3) &"%")
        Elseif $Proc <100 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 4) &"%")
        Elseif $Proc = 100 Then
        ProgressSet($Proc, "Проверено файлов 1 папка: " & $i & ' из ' & $KolFile1 & @CR & "Проверено файлов 2 папка: " & $d & ' из ' & $KolFile2 , "                            " & StringMid($Proc, 1, 3) &"%")
        EndIf



    ProgressOff()
    Global $iDiff = TimerDiff($hTimer)
    Local $iDiffMinPrint = StringMid($iDiff / 60000, 1, 5)


    If MsgBox(4 + 32, 'Открыть файла с результатами для чтения?', 'Потребовалось ' & $iDiffMinPrint & ' мин., проверено ' & ($i + $d) & ' файлов') = 6 Then
        ShellExecute(@DesktopDir & "\compare.log")
    EndIf
 
Автор
S

SergiUX

Новичок
Сообщения
4
Репутация
0
Ну не.. это не то. Мой вопрос заключается именно в возможности выводить в консоли текст описанным в первом сообщении способом. Как иначе кроме консоли можно доводить инфу о выполняемых процессах в программе и так понятно. Я же преследую цель это делать в консоли среды разработки и затем уже в консольном окне в скомпилированном виде. Неужели нельзя так в AutoIt!? Я по-нехорошему удивлен на самом деле...
Сообщение автоматически объединено:

В общем отвечу сам себе. Ответ нашел на англоязычном форуме AutoIt.
Выводим текст как обычно через ConsoleWrite только в конце строки используем @CR. Получается выводим строку и возвращаем печатающую каретку обратно в начало этой же строки без перевода на новую строку. Следующий выведенный текст затрет то что уже напечатано на этой строке. НО! Это работает только когда скрипт скомпилирован как консольное приложение и никак иначе. Не работает в консольном окне SciTE, не работает в консольном окне ISN AutoIt Studio увы.. Эффект вывода в одной строке будет виден только когда скомплированный EXE будет запущен и будет выведено его контрольное окно.
Может кому будет полезна данная инфа.
 
Последнее редактирование:

Oki

Продвинутый
Сообщения
452
Репутация
62
У меня тоже не получилось отредактировать лишь часть строки, но сработал вот такой вариант.
Код:
ConsoleWrite("Scanned 15%")
Sleep(2000)
ConsoleWrite(@CR & "Scanned 16%")
Sleep(2000)

Сообщение автоматически объединено:

Во время набора сообщения показало, что есть новые ответы в теме. Оказалось, что решение предложено только что самим топикстартером. :smile:
 
Автор
S

SergiUX

Новичок
Сообщения
4
Репутация
0
У меня тоже не получилось отредактировать лишь часть строки, но сработал вот такой вариант.
Код:
ConsoleWrite("Scanned 15%")
Sleep(2000)
ConsoleWrite(@CR & "Scanned 16%")
Sleep(2000)

Сообщение автоматически объединено:
Опять же, это работает только в скомпилированном как консольное приложение скрипте(. Попробовал сейчас в ISN AutoIt Studio и в его консольном окне так же создается новая строка, увы). Но спасибо за ответ!
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
Если это консоль SciTE, то получить дескриптор консоли, чтобы очищать (заменять текст пустотой). Если консоль CMD, то высылать cls.
 
Верх