Aus Struktur in Text Datei mit Trennparameter zum Wiederauslesen schreiben

Das Beispiel versteh ich nicht im Bezug auf die Hilfsfunktionen...

Außerdem liest er das ja nicht aus einer Datei, schreibt es auch nicht in die Datei, und speichert es auch nicht in jener... :/

Code:
#include <cstdlib>
#include <iostream>
#include <string>
#include <time.h>
#include <fstream>
#include <sstream>
#include <vector>
 
using namespace std;

struct Bluray //Bluray Struktur
	{
	string name;
	string genre;
	int bewertung;
	string beschreibung;
	};

const int maxfilm=20; //Bluray Array
//Bluray film[maxfilm];

const int maxsich=2000;
string alle[maxsich]; 

void Textauslesen(); //Auslesen aus txt Datei und Speichern in array
int readnumber(); //Einlesen einer Zahl
int backtothemenu(); //Zurück zum Menü - Abfrage
void Menu(); //Hauptmenü - Ausgabe
void Erweiterung(); //Schreiben in txt Datei

main() //Rein ins Menü!
{
cout << endl << "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
cout << endl << "\tWillkommen in meiner selbst erstellten Bluray Bibliothek! \n";
cout << "\tMomentan noch in der Testphase!\n";
Menu();
}

void Erweiterung() //Erweiterung der Bibliothek, Reinschreiben in die txt Datei
{
Bluray film[maxfilm];
int Filmanzahl;

cout << "Wie viele Filme möchten Sie der Liste hinzufügen? ";
Filmanzahl = readnumber();
int i=0;

for (i=0; i<Filmanzahl; i++)
	{
	cout << endl << Filmanzahl << ". Film:" << endl; //Strukturabfrage
	cout << endl << "Name : ";
	getline(cin, film[i].name);
	cout << endl << "Genre: ";
	getline(cin, film[i].genre);
	cout << endl << "Bewertung: ";
	film[i].bewertung = readnumber();
	cout << endl << "Beschreibung: ";
	getline(cin, film[i].beschreibung);

	cout << "Sie haben den "<< i+1 << ". Film mit dem Namen " << film[i].name << " mit der Bewertung ->" << film[i].bewertung << "dem Genre: " << film[i].genre << endl << "und der Beschreibung: -> " << film[i].beschreibung << " <-erfolgreich hinzugefügt! " << endl;
	

	std::ofstream ofs ("summe.txt", std::ios::app ); //Schreibvorgang mit Trennparameter
		ofs << film[i].name << "|"
		    << film[i].genre << "|"
		    << film[i].bewertung << "|"
		    << film[i].beschreibung << endl;

	ofs.close();
	}	

void Textauslesen()

std::ifstream ifs ("summe.txt");
for (int i =0; i < 1; ++i){
	std:: string zeile;

	std::getline(ifs, zeile, '\t');
	std::istringstream(zeile) >> film[i].name;

	//cout << endl << film[i].name;
	//usw halt, allerdings funktioniert es so ja nicht... 
	}

Die Filme werden in die txt Datei reingeschrieben, siehe oben.

Jetzt will ich aber diese wieder ausgeben können, und zwar immer bestimmte Eigenschaften auf abruf...

z.B. Film[2].beschreibung.

Ich finde meinen Denkfehler nicht...
Ich komm schon seit 2 Tagen nicht mehr weiter... ~.~
Trotz mehrfachem Missbrauchs von google... :/
 
oh man ich hab keinen kopf mehr heute...
wie würde des bei meinem beispiel ausschauen? :(

mit if und ofstream,...

Okay es scheint zu klappen - danke an alle... :)

Allerdings, wenn ich mir alles ausgeben lasse brauch ich ja nen schleifenbegrenzer.
dann lieber vector nehmen? sonst erscheinen überall wo leere felder sind "0".
 
Zuletzt bearbeitet:
Allerdings, wenn ich mir alles ausgeben lasse brauch ich ja nen schleifenbegrenzer.
dann lieber vector nehmen? sonst erscheinen überall wo leere felder sind "0".
Ja, nimm lieber einen STL Kontainer. Je nach dem was du alles mit den Daten anstellen willst, wäre evtl. ein Vektor (wahlfreier Zugriff O(1), langsames Einfügen und Entfernen) oder eine Liste (Zugriff O(n), Anhängen, Einfügen und Entfernen schnell) gut geeignet.

Gruß
 
habs jetzt mit nem vector probiert aber nicht hinbekommen, müsste aber eigentlich ähnlich sein oder? könntest du mir das an meinem beispiel zeigen?

Hier der Quellcode mit der bisherigen schleife:

Code:
int filmnummer,eingabe;
Bluray film2[maxfilm2];

std::ifstream ifs ("summe.txt");
for (int i =0; i < 3; ++i)
{

	std:: string zeile,zeile2,zeile3,zeile4;

	std::getline(ifs, film2[i].name, '|');
	std::getline(ifs, film2[i].genre, '|');
	std::getline(ifs, zeile, '|');
	std::istringstream(zeile) >> film2[i].bewertung; //Umwandlung int into string
	std::getline(ifs, film2[i].beschreibung, '|');
	
	cout << endl << film2[i].name;
	cout << endl << film2[i].genre;
	cout << endl << film2[i].bewertung;
	cout << endl << film2[i].beschreibung;
	}

	        cout << endl << "Welcher Film soll gewählt werden?";
		filmnummer=readnumber();
		cout << endl << film2[filmnummer-1].name;

		cout << endl << "\n\n\nMöchten sie zu diesem Film Zusatzinfo? 1=JA 2=NEIN";

		eingabe=readnumber();

		if (eingabe==1);
			{
			cout << endl << film2[filmnummer-1].genre;
			cout << endl << film2[filmnummer-1].bewertung;
			cout << endl << film2[filmnummer-1].beschreibung;
			cout << endl;
			}
}
 
Was heißt denn "nicht hinbekommen". Was ging denn nicht?

Beispiel:
C++:
...
#include <vector>
#include <iterator>
#include <algorithm>

...

vector<Menschen> daten;

ifstream datei("...");

if (datei.is_open()) {
  // Daten in Vektor kopieren
  copy(istream_iterator<Menschen>(datei),
    istream_iterator<Menschen>(),
    back_inserter(daten));

  // Daten ausgeben

  cout << "---------------------------" << endl;

  copy(daten.begin(), daten.end(),
       ostream_iterator<Menschen>(cout, "====\n"));

}
 
Zurück