CmdLineProgressBar类

这段 MATLAB 代码定义了一个名为 CmdLineProgressBar 的类,用于在命令行中显示进度条和相关信息(如剩余时间、预计完成时间等)。以下是代码的详细解释:


类的功能

  • 显示进度:在命令行中实时更新任务的进度。

  • 显示额外信息

    • ETA(预计完成时间):任务预计完成的时间。

    • 剩余时间:任务剩余的预计时间。

    • 运行时间:任务已经运行的时间。

  • 支持单调计数:假设任务的计数是单调递增的(即从 1 到总数)。


类的属性

  1. last_msg_len

    • 用于存储上一次打印的信息的长度,以便在更新进度时清除上一次的输出。

  2. startTime

    • 任务的开始时间,用于计算运行时间、剩余时间和 ETA。


类的方法

1. 构造函数 CmdLineProgressBar

  • 功能:初始化进度条并显示初始消息。

  • 输入参数

    • msg:初始消息(字符串),例如 'Doing stuff...'

    • startTime(可选):任务的开始时间(datetime 类型)。如果未提供,则不显示时间相关信息。

  • 实现

    • 打印初始消息。

    • 如果提供了 startTime,则将其存储在 obj.startTime 中。

2. print 方法

  • 功能:更新进度条并显示相关信息。

  • 输入参数

    • n:当前进度(整数)。

    • tot:总进度(整数)。

  • 实现

    • 清除上一次打印的信息(通过退格符 \b 实现)。

    • 如果提供了 startTimen > 0,则计算以下信息:

      • 剩余时间:根据当前进度和总进度计算。

      • ETA:根据剩余时间和当前时间计算。

      • 运行时间:从 startTime 到当前时间的差值。

    • 将进度信息和时间信息格式化为字符串 info_str

    • 打印 info_str

    • 如果当前进度 n 等于总进度 tot,则换行(表示任务完成)。

    • 更新 last_msg_len 为当前信息字符串的长度。

3. 析构函数 delete

  • 功能:在对象销毁时换行,确保命令行输出整洁。

  • 实现

    • 打印换行符 \n


代码示例

以下是一个使用 CmdLineProgressBar 的示例:

matlab
复制
% 创建进度条对象
pb = CmdLineProgressBar('Processing...', datetime('now'));

% 模拟任务
tot = 100; % 总进度
for k = 1 : tot
    pause(0.1); % 模拟任务处理时间
    pb.print(k, tot); % 更新进度条
end

输出示例

复制
Processing...50/100; ETA: 2023-10-15 12:00:00; time left: 00:00:05; running time: 00:00:05

代码的关键点

  1. 清除上一次输出

    • 使用退格符 \b 清除上一次打印的信息,确保进度条在同一行更新。

  2. 时间计算

    • 剩余时间:根据当前进度和总进度计算。

    • ETA:根据剩余时间和当前时间计算。

    • 运行时间:从 startTime 到当前时间的差值。

  3. 格式化输出

    • 使用 sprintf 将进度信息和时间信息格式化为字符串。

  4. 任务完成处理

    • n == tot 时,打印换行符,表示任务完成。


代码的改进建议

  1. 支持非单调计数

    • 当前代码假设任务的计数是单调递增的。如果需要支持非单调计数(例如进度可能回退),可以修改 print 方法。

  2. 自定义时间格式

    • 允许用户自定义时间格式(例如只显示小时和分钟)。

  3. 多任务支持

    • 扩展类以支持多个任务的进度条显示。

  4. 错误处理

    • 添加对输入参数的验证,例如确保 ntot 是正整数,且 n <= tot


总结

CmdLineProgressBar 是一个实用的 MATLAB 类,用于在命令行中显示任务进度和相关时间信息。它通过动态更新命令行输出,提供了清晰的任务进度反馈,适用于需要长时间运行的任务。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇