1万5千件のデータを一度に.txt形式で出力するには?

解決


touhei  2007-01-25 11:24:36  No: 64276

vector型配列に格納された15万件のデータ(double型)を,txt形式で出力したいと思っています.
以下のソースで実行しているのですが,途中で例外処理されてしまいます.
問題点・解決法のご教授をお願いいたします.

// 以下,出力部ソース
for(i=0;i<sz;i++)
{
char c_dataBuf[DEF_DATA_LEN]={0};
s=SIM_I[i];
sprintf(c_dataBuf, "%lf,", s);
strcat(c_dataEq31, c_dataBuf);
strcat(c_dataEq31, "\n");  
}


touhei  2007-01-25 11:29:12  No: 64277

書き込み途中で投稿してしまいました.追記です.

// 以下ソース
sz=SIM_I.size();
if ((file = fopen(outputFileName, "w")) == NULL)
{
    printf("main: fopen() error1. path=[%s]\n", outputFileName);
    return -1;
}
for(i=0;i<sz;i++)
{
    char c_dataBuf[DEF_DATA_LEN]={0};
    s=SIM_I[i];
    sprintf(c_dataBuf, "%lf,", s);
    strcat(c_dataEq31, c_dataBuf);
    strcat(c_dataEq31, "\n");  // データ間に改行が必要
}
fputs(c_dataEq31, file);
if (fclose(file) != 0) 
{
    printf("main: fclose() error2. path=[%s]", outputFileName);
}

// ソースここまで

sz = vector型配列SIM_Iの要素数
SIM_I = 15万件のデータを格納したvector型配列


touhei  2007-01-25 11:31:56  No: 64278

度々申し訳ありません。
表題の「1万5千件」は「15万件」の間違いです。


επιστημη  URL  2007-01-25 17:02:03  No: 64279

ソースが不十分なので原因はつきとめられません。
データ数を減らせばちゃんと動くか、確認していますか?


超初心者  2007-01-25 17:24:58  No: 64280

以下の型って何?
s=SIM_I[i];

デバッガで何処でどんな例外か調べられないのでしょうか。

DEF_DATA_LENが小さいとか。

printfに%lfなんてあった?

15万件のデータがc_dataEq31に全部入るのか?
今のPCならそれくらいのメモリは余裕で使えるけど
提示されたプログラムではそれがわからないので。

動作確認していないのでミスがあるかもしれないが
こうじゃないのか

FILE * file;
int sz = (int)SIM_I.size();
if ((file = fopen(outputFileName, "w")) == NULL)
{
    printf("main: fopen() error1. path=[%s]\n", outputFileName);
    return -1;
}
for(i=0;i<sz;i++)
{
    double s = SIM_I[i];
    fprintf(file,"%f\n",s);
}
if (fclose(file) != 0) 
{
    printf("main: fclose() error2. path=[%s]", outputFileName);
}


touhei  2007-01-26 01:16:56  No: 64281

επιστημη様、超初心者様、ありがとうございました。

データ数を少ないものから徐々に増やし、テストを行いました。
その後、一定数で出力エラーが起こっていることがわかりました。
超初心者様のソースを元に出力部を書き直し、無事希望通りの結果が得られました。

どうもありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加