Обновление выходных данных

#c

#c

Вопрос:

Мне нужно создать утилиту, которая «обновляет» свои выходные данные, очень похожую на curl, которая продолжает изменять свою последнюю строку:

   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8434  100  8434    0     0   4064      0  0:00:02  0:00:02 --:--:--  7695
  

Я думаю, что использование чего-то вроде curses здесь не подходит. Я не хочу манипулировать окном, я хочу просто изменить свою последнюю строку вывода.

Решение, которое я имею в виду, состоит в том, чтобы напечатать количество обратных пробелов, достаточное для перезаписи строки. Но я еще не тестировал это. Я хотел бы знать, является ли это «правильным» способом сделать это, или если есть лучший.

Кроме того, в моем случае мне нужно обновить последнюю строку. Поэтому мне не нужно такое большое количество обратных пространств (если это решение); однако (чтобы сделать его универсальным), если мне нужно обновить строку -10, перезапись того же самого с -9th строки может быть не такой эффективной (или, может быть, это …).

Комментарии:

1. что ж, отличная раскраска синтаксиса для curl!

Ответ №1:

Вы можете использовать пробел в обратном направлении над строкой или (как правило, проще) напечатать возврат каретки и просто перепечатать всю строку. Когда вы это сделаете, не забудьте переписать всю строку, хотя — если (например) у вас есть число, отсчитывающее до 0, когда оно уменьшается со 100 до 99 (например), это не обязательно перезапишет ‘1’, если вы не убедитесь, что там напечатан пробел.

Комментарии:

1. Я должен был сказать, что я нахожусь на FreeBSD-Mac, и это предназначено для работы на Unix-подобных системах, но в любом случае спасибо. Также спасибо за совет по числам, я вижу, что форматирование должно быть исправлено.

2. @sidyll: Это должно отлично работать с FreeBSD-MAC и другими Unix-подобными системами.

3. Да, это работает! Какой сюрприз для меня, я думал, что возврат каретки будет проигнорирован. Вероятно, это потому, что я всегда вижу пары возврата каретки и перевода строки, поэтому эффект в моей системе похож только на перевод строки. Но echo a^Mb в bash появляется эхо b . Фантастика. Пожалуйста, проигнорируйте мой предыдущий комментарий.

Ответ №2:

В DOS вы можете просто напечатать возврат каретки без перевода строки и перезаписать последнюю строку.