0

C++ の ofstream を介して計算を ODS (Apache OpenOffice) ファイルにエクスポートすると、数値が正しく表示されますが、その特定の ODS ファイルでは計算を行うことができません。

たとえば、A1 で 0.9191、A2 で 0.5757 を追加しようとすると、=SUM(A1:A2) はゼロを返します。

セルをフォーマットすることでこれを解決しようとしましたが、これまでのところうまくいきませんでした。助言がありますか?ありがとうございました。

編集:エクスポートジョブを実行するコードの部分。

string datafolder; datafolder = "c:/Users/cousinvinnie/Desktop/Code Vault/ArmaTut3/" + Jvalue;
string graph_path = datafolder + "/Graphavgs.ods"; ofstream graphavgs; graphavgs.open(graph_path);

for(int ctr = 0; ctr<cycledata; ctr++){

    cyclepoints = (howmanyDC + 1) * (ctr + 1);
    graphavgs<<(ctr + 1)<<" ";
    calcguy = sum((wholedata.row(cyclepoints))) / nextgenpop;
        secondbiggiesavg(ctr) = -log(calcguy);
        graphavgs<<secondbiggiesavg(ctr)<<" ";
    calcguy = sum((thirdbiggest.row(cyclepoints))) / nextgenpop;
        thirdbiggiesavg(ctr)  = -log(calcguy);
        graphavgs<<thirdbiggiesavg(ctr)<<" ";
    calcguy = sum((matrixavgs.row(cyclepoints))) / nextgenpop;
        avgmatrixdata(ctr)    = -log(calcguy);
        graphavgs<<avgmatrixdata(ctr)<<" "<<endl;
}
graphavgs.close();

このコードは、Graphavgs.ods ファイルを作成します。私が持っているそのファイルに

   1    0.111753    0.182331    0.358724
   2    0.147015    0.259202    0.48334
   3    0.195855    0.362397    0.648719
   4    0.25348     0.476696    0.839261
   5    0.314722    0.618828    1.0633
   6    0.420704    0.857286    1.37501
   7    0.536699    1.1179      1.69503
   8    0.76933     1.56382     2.13464
   9    0.90525     1.89921     2.42443
   10   1.15678     2.41533     2.82584

現在、これらの数値は数値として扱われません。=SUM(A1:A2) のような関数を実行しようとすると、戻り値はゼロになります。

=LN(A1) を実行すると、#VALUE が返されます。

解決済み: すべてのドットを検索してカンマに置き換えます。

4

1 に答える 1

0

CSV ファイル形式、ODS ファイル形式、および OpenOffice または LibreOffice での両方の表現を混同しています。

作成するのは CSV ファイルです。つまり、値のテキスト表現のみを含む純粋なテキスト ファイルを意味します。デフォルトでは、C++ プログラムは小数点としてドットを使用して浮動小数点値を生成します。

ODS ファイルは、実際には、メタデータ (作成者の名前、作成日、最終印刷日など)、実際のデータ、およびフォーマット情報を含む ZIP ファイルです。このようにして、ODS ファイルはLibreOffice または OpenOffice によって直接開かれます。

LibreOffice や OpenOffice で CSV ファイルを開くと、実際にインポートされます。つまり、プログラムは、データ区切り記号、小数点区切り記号、および適切な場合は日付形式についていくつかの仮定を行い、テキスト値を数値 (または日付) に変換します。これらの仮定は、システム ロケールに基づいています。通常、デフォルトの書式設定。使用しているバージョンに応じて、インポート オプションを含むダイアログ ボックスが常に表示されるか、明示的にファイルをインポートした場合にのみ表示されます ([ファイル] メニューの [インポート])。このダイアログ ボックスでは、CSV ファイルに含まれる区切り記号と小数点記号を指定できます。

CSV ファイルを正しくロードしたら、ODS 形式で保存して、インポートの問題が再び発生しないようにすることをお勧めします。

于 2016-09-15T11:37:27.907 に答える