【发布时间】:2013-06-03 04:59:11
【问题描述】:
我需要一个程序来读取文件的内容并将它们写入另一个文件,但只有有效的 utf-8 字符。问题是文件可能采用任何编码,文件的内容可能对应也可能不对应这种编码。
我知道这是一团糟,但这就是我要处理的数据。我需要“清理”的文件可能高达几 TB,因此我需要程序尽可能高效。目前我正在使用我用 python 编写的程序,但清理 100gb 需要长达一周的时间。
我正在考虑使用 w_char 函数读取字符,然后将它们作为整数进行管理,并丢弃所有不在某个范围内的数字。这是最优解吗?
还有什么是最有效的 C/C++ 读写方式?
编辑: 问题不在于 IO 操作,这部分问题旨在为更快的程序提供额外帮助,但真正的问题是如何快速识别非 UTF 字符。另外,我已经尝试过腭化和 RAM 磁盘。
【问题讨论】:
-
一周???喂那些老鼠,让轮子转得更快!
-
你说问题不在于IO,但需要一周? Cpu 真的一直在使用 100% 的核心吗?如果是,那么也许显示关键的来源。在 C/C++ 中使用 fread() 等的程序会很快做到这一点,这就是为什么每个人都会自然而然地认为 IO 问题。还是您更想问如何用 C++ 编写整个事情?
-
@rlb 问题应该是关于如何有效地丢弃无效的 utf8 字符(CPU 几乎在完成它所需的整个一周内达到 100%)。 IO 性能只是为了让它更快(我有时间,而且这个软件会被大量使用,所以很少的性能调整等于几天获得)。我分析了我的 python 代码,问题在于所有的字符串处理函数和编码/解码函数。这就是为什么我问将它们作为整数管理是否是正确的方法(我也非常感谢其他建议)。
标签: c++ optimization utf