3

編集:ありがとうございました。Pythonソリューションは非常に高速に機能しました:)

次のようなファイルがあります。

132,658,165,3216,8,798,651

しかし、それははるかに大きいです(〜600 kB)。ファイルの末尾にあるものを除いて、改行はありません。

そして今、そこにあるすべての値を合計する必要があります。最終結果はかなり大きいと予想していますが、C++ で合計すると、bignum ライブラリがあるので問題ありません。

どうすればいいですか、どの言語/プログラムで?C++、Python、Bash?

4

8 に答える 8

6

ペンギン・セッド「オーク」

sed -e 's/,/\n/g' tmp.txt | awk 'BEGIN {total=0} {total += $1} END {print total}'

仮定

  • あなたのファイルは tmp.txt です(これは明らかに編集できます)
  • Awk はその大きな数を処理できます
于 2009-03-03T20:08:15.007 に答える
4

パイソン

sum(map(int,open('file.dat').readline().split(',')))
于 2009-03-03T20:14:31.573 に答える
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
于 2009-03-03T19:57:53.360 に答える
1

すべての数値が (2**64)/600000 (まだ 14 桁) より小さい場合、C の「long long」のような 8 バイトのデータ型で十分です。プログラムは非常に簡単です。選択した言語を使用してください。

于 2009-03-03T19:59:06.573 に答える
0

http://www.koders.com/csharp/fid881E3E70CC37E480545A0C37C98BC8C208B06723.aspx?s=datatable#L12

高速な C# CSV パーサー。私はそれが数千の 1MB ファイルをかなり速くクランチするのを見てきました。私はそれを月に約 6000 ファイルを消費するサービスの一部として実行しています。

一からやり直す必要はありません。

于 2009-03-03T20:09:14.223 に答える
0

その大きな入力を全体として処理するのはコストがかかるため、この投稿をご覧になることをお勧めします。文字列分割用のジェネレータの書き方を説明しています。これは C# ですが、そのような入力を処理するのに適しています。

合計が整数 (たとえば 32 ビット) に収まらないことが心配な場合は、特に整数と加算のみを使用する場合は、bignum を自分で簡単に実装できます。ビット 31 を次の dword に移動し、追加を続けます。

精度が重要でない場合は、結果を double に累積します。それはあなたに十分な範囲を与えるはずです。

于 2009-03-03T20:00:43.153 に答える
-1
tr "," "\n" < file | any old script for summing

Ruby は大きな数を自動的に処理するので便利です。Awkが任意精度の算術演算を行っていることを思い出せませんが、そうであれば、使用できます

awk 'BEGIN {RS="," ; sum = 0 }
     {sum += $1 }
     END { print sum }' < file
于 2009-03-03T20:08:32.243 に答える
-1

python は大きな整数を処理できます。

于 2009-03-03T19:59:54.480 に答える