speichern eine arrays
-
Hallo will mit diesen Code ein Array in einer Datei speichern haut aber leider nicht hin. Er legt zwar eine Datei an aber schreibt nichts rein. Hat vielleicht jemand eine Ahnung wieso?
int anzahlx, anzahly; float hoehenwert [3000] [100]; int main() { fstream File("Daten.dat", ios::out|ios::binary); if (File.is_open()) { // Nur zwei Datensätze schreiben. // Hier wäre eine Fehlerprüfung angebracht for (int i = 1; i < anzahlx ; i=1*5) { for (int i2 = 1; i2 < anzahly ; i2=i2*5) { if (i < 1000 || i> 2000) {hoehenwert [i] [i2] = 10; File.write((char*)&hoehenwert[i][i2], sizeof(float)); } else { hoehenwert [i] [i2] = 6; File.write((char*)&hoehenwert[i][i2], sizeof(float)); } } } // Aktuelle Person in der Datei speichern. } File.close(); // Datei schließen
-
Hallo,
Folgende Fragen, die ich im Quellcode stelle:int anzahlx, anzahly; float hoehenwert [3000] [100]; int main() { fstream File("Daten.dat", ios::out|ios::binary); if (File.is_open()) { // Initialisierst du anzahlx auch mit einem Wert? // Was soll i=1*5? (Hier erhöhst du i1 nicht=> Wenn anzahlx // > 5 ist das eine Endlosschleife.) // außerdem beginnen die indizes eines Arrays bei 0 und _nicht_ bei 1. for (int i = 1; i < anzahlx ; i=1*5) { // dito. (Abgesehen davon, dass du hier i2 erhöhst) for (int i2 = 1; i2 < anzahly ; i2=i2*5) { if (i < 1000 || i> 2000) {hoehenwert [i] [i2] = 10; File.write((char*)&hoehenwert[i][i2], sizeof(float)); } else { hoehenwert [i] [i2] = 6; File.write((char*)&hoehenwert[i][i2], sizeof(float)); } } } // Aktuelle Person in der Datei speichern. } File.close(); // Datei schließenAlso so wie ich das dem Quellcode entnehme, möchtest du nicht jeden Wert des Arrays in der Datei speichern. Ist das korrekt? Wenn nein, sind deine Zählvariablen ebenfalls inkorrekt.
So far...
Caipi
-
Möchtest du die Daten eigentlich binär oder als Text speichern?
Im Falle von Text kannst du die floats nicht einfach so in ein Char umwandeln.
Eine Float-Zahl besteht üblicherweise aus mehr als einem Char-Zeichen... Du musst die Zahl also ersteinmal in eine Zeichenkette umwandeln.
-
Also erst mal 1000 dank an Caipi ich hatte wirklich vergessen anzahlx und y zu initialisieren. Das es nur jedes 5 schreibt ist richtig und sie sollen auch in binär Format gespeichert werden. Jetzt wollte ich mir die Datei mit folgenden Code Stück anzeigen lassen. Funtzt aber nicht, seht ihr da auch den Fehler?
File.open("Person.dat", ios::in|ios::binary); if (File.is_open()) { for (int i = 1; i < anzahlx ; i=1*5) { for (int i2 = 1; i2 < anzahly ; i2=i2*5) { File.read((char*)&hoehenwert[i][i2], sizeof(hoehenwert)); cout<< hoehenwert [i] [i2] <<endl; } } //File.read((char*)&hoehenwert[1] [3], sizeof(hoehenwert)) //cout << Pers.VorName << " " << Pers.NachName << " " << Pers.TelNr << endl; }
-
Hab jetzt auch grad gelesen dass es mit den befehlen
CFile File
File.Open(...)
....
...
..
FileWrite(...)kompfortabler gehen soll. Habe aber leider nicht gefunden wie ich diese Befehle includen kann. Hat da jemand Ahnung. Oder auch einen Tip wie oder wo ich nach den include Dateien von manchen Befehlen am besten suchen kann
-
Im Normalfall sollten diese Befehle mit includet werden, wenn du fstream.h includest, soweit ich weiß.
-
Vorden schrieb:
Im Normalfall sollten diese Befehle mit includet werden, wenn du fstream.h includest, soweit ich weiß.
CFile ist eine Klasse der MFC und als solche nicht Teil der Standardstreams bzw. der veralteten Prestandard-Streams.
@Oliver1980
Fragen bezüglich CFile bitte im MFC-Forum posten.
-
Array erstellen
#include <fstream> #include <iterator> #include <algorithm> int main() { // Dimensionen const int x = 100, y = 100; // Werte Array float werte[x][y]; // Werte zuweisen [...] for(int i=0; i<x; ++i) for(int j=0; j<x; ++j) werte[i][j] = i + static_cast<float>(j) / 100; // Datei öffnen (Fehlerprüfung etc hab ich weggelassen!) std::ofstream file; file.open("werte.data");ASCII-Kodiert speichern:
// Kopieren std::copy(&werte[0][0], &werte[x-1][y], std::ostream_iterator<float>(file, "\n") );Binär kopieren:
// Binär abspeichern file.write(reinterpret_cast<char*>(&werte[0][0]), x * y * sizeof(float) );Und zum Schluss:
// Schließen file.close(); }sowas?
-
Ok alles klar danke
