编辑: 谢谢大家。 Python解决方案闪电般快速:)
我有一个看起来像这样的文件:
132,658,165,3216,8,798,651
但是 MUCH 更大(~600 kB)。没有换行符,除了文件末尾的换行符。
现在,我必须总结那里的所有价值观。我希望最终的结果非常大,但是如果我用C ++总结它,我就拥有一个bignum库,所以它应该不是问题。
我该怎么做,用什么语言/程序? C ++,Python,Bash?
答案 0 :(得分:6)
sed -e 's/,/\n/g' tmp.txt | awk 'BEGIN {total=0} {total += $1} END {print total}'
答案 1 :(得分:4)
的Python
sum(map(int,open('file.dat').readline().split(',')))
答案 2 :(得分:1)
只要你有一个bignum图书馆,语言无关紧要。粗略的伪代码解决方案是:
str = ""
sum = 0
while input
get character from input
if character is not ','
append character to back of str
else
convert str to number
add number to sum
str = ""
output sum
答案 3 :(得分:1)
如果所有数字都小于(2 ** 64)/ 600000(仍有14位数字),则C中的“long long”等8字节数据类型就足够了。该计划非常简单,使用您选择的语言。
答案 4 :(得分:0)
由于整体处理大量输入的费用很高,我建议您查看this帖子。它解释了如何编写用于字符串拆分的生成器。它在C#中,但它非常适合通过这种输入进行处理。
如果您担心总和不适合整数(比如32位),您可以轻松地实现自己的bignum,特别是如果您只使用整数和加法。只需将bit-31带到下一个dword并继续添加。
如果精度不重要,只需将结果累加为double。这应该给你足够的范围。
答案 5 :(得分:0)
http://www.koders.com/csharp/fid881E3E70CC37E480545A0C37C98BC8C208B06723.aspx?s=datatable#L12
快速C#CSV解析器。我已经看到它很快就会破坏几千个1MB文件,我将它作为服务的一部分运行,每月消耗大约6000个文件。
无需重新发明快轮。
答案 6 :(得分:-1)
python可以处理大整数。
答案 7 :(得分:-1)
tr "," "\n" < file | any old script for summing
Ruby很方便,因为它会自动处理大数字。我不记得Awk是否具有任意精度算术,但如果是这样,你可以使用
awk 'BEGIN {RS="," ; sum = 0 }
{sum += $1 }
END { print sum }' < file