Schreiben Sie eine Tabelle (Doppel) zu-Binär-Datei-IO-C++

Schreiben brauche ich eine matrix mit vier Spalten ("g_Grid.r", "g_Grid.t", "g_Grid.b", "g_Grid.ph")

Normalerweise Schreibe ich die Datei mit dem Datei-stream:

ofstream fout; 
fout.open("GRID.dat");
 for (int m=0;m<N_PH;++m)
    {   
    for (int k=0;k<N_B;++k)
        {
          for (int j=0;j<N_T;++j)
            {   
            for (int i=0;i<N_R;++i)
                {
                  fout << setprecision(32) << g_Grid.r[i]<<" "<<g_Grid.t[j]<<" "<<g_Grid.b[k]<<" "<<g_Grid.ph[m]<< endl;

                }
            }
        }
    }
 fout.close();

Funktioniert es einwandfrei, aber jetzt bin ich den Umgang mit sehr großen (langen) - matrix und es dauert ewig zu schreiben formatierte Ausgabe (".txt"). Da ich wirklich NICHT brauchen, die Datei formatiert werden, es vorziehen, es zu schreiben, als eine binäre Datei.

FRAGE: gegebenen vier Vektoren/arrays (r,t,b,ph-Wert), wie zu schreiben eine Tabelle binären Datei? (Ich verwende matlab um diese Datei zu Lesen, später auch zu Lesen als eine binäre Tabelle)

BEARBEITEN

Normalerweise verwende ich folgenden einfachen code zu schreiben, Binär-Datei:

ofstream myFile (fileName, ios::out | ios::binary);
double val;
for (int m=0;m<N_PH;++m)
    {   
    for (int k=0;k<N_B;++k)
        {
          for (int j=0;j<N_T;++j)
            {   
            for (int i=0;i<N_R;++i)
                {
                  val = g_N.Amp[m][k][j][i];
                  myFile.write(reinterpret_cast<const char*>(&val), sizeof(val));
                }
            }
        }
    }
myFile.close();

Aber es wird geben nur "eine Spalte", während es gelesen wird von matlab später.

  • Macht matlab gerade gelesen, dass eine plain-binary-Datei mit floating-point-zahlen und keine "zusätzlichen" Informationen?
  • Petersson Was meinst du? Ich benutze sehr einfache Befehle zum Lesen der binären Datei: fid = fopen("name.dat"); X=fread(fid,'double'); im Grunde kann ich das ändern der "vier-Spalte" Tabelle "eine Spalte", es wird gelesen von matlab und für die Wiederherstellung der "vier-Spalte" später. Es ist machbar. Ich dachte an einfachere Art und Weise zu schreiben und zu Lesen die Tabelle so wie Sie ist, ohne dabei zusätzliche "black-magic".
  • Ok, nicht viel Ahnung von Matlab, also nicht wissen, Sie könnte einfach sagen, dass es eine Reihe von float aus einer Datei. Schreibe eine Antwort...
  • Nach der gleichen Logik, wie im Fall der formatierte Ausgabe (mit ofstream): "Strom der gesamten Tabelle in eine Datei, und Lesen Sie die gesamte Tabelle". Ich bin mir sicher, es ist geschrieben, wie eine Tabelle, matlab gelesen werden können eine Tabelle aus der Binär-Datei (wahrscheinlich liest es durch Linien oder so)
  • Ja, du hast Recht! Matlab liest "- Zeilen und wandelt verdoppelt"
InformationsquelleAutor Arnold Klein | 2013-06-12
Schreibe einen Kommentar