【发布时间】:2015-04-13 14:04:49
【问题描述】:
我最近尝试自己解析字幕文件来修改时间。格式很简单,有效的一行是这样的:
<arbitrary lines might include comments, blanks, random stuff>
<consecutively numbered ID here>
01:23:45,678 --> 01:23:47,910
<arbitrary lines might include comments, blanks, random stuff>
如何在 C++ 中以优雅的方式做到这一点。我只提出了非常丑陋的解决方案。例如,要逐行读取文件,在每个文件中搜索“-->”,然后使用 find(':')、find(',') 和 substr()
我觉得一定有更好的方法,例如以某种方式用令牌分割。如果我仍然可以解析以下行,那将是理想的:
01 : 23 :45,678 --> 01:23: 45, 910
正确。最终结果应该是变量中的每个部分(hh、mm、ss、ms)。我不一定要求完整的实施。一个大致的想法和对适当实用函数的引用就足够了。
【问题讨论】:
-
除了将大量数据读入缓冲区并解析缓冲区之外;逐行读取到
std::string是解析文本文件的常用和首选方法。 -
您的文件格式未定义,或者您没有(提供)足够的信息
-
一些灵感here.
-
好的,似乎没有简单的答案。我希望这可以在几个实用 IO 函数的帮助下完成。我喜欢状态机方法,因为我们在大学做的事情非常相似。将每一行读入字符串的问题在于,我无法像使用 ifstream 那样继续使用 getline 和自定义分隔符解析它。那么没有什么比 find、substr 和 trim 序列更好的了?我的文件格式@DieterLücking 到底有什么未定义的?