Struct aus List ausgeben



  • Hi,

    ich möchte aus einer Textdatei zeilenweise einlesen und den Inhalt in eine Struct mittels memcpy kopieren. Diese Struct soll danach in eine List geschoben werden. Ich hänge bei der Ausgabe der Elemente. Soll ich eine Funktion schreiben, so wie unten angegeben? Wenn ja, rufe ich die einzelnen Elemente nacheinander auf? Irgendwie muss man das ja noch mit einem pop_back kombinieren?

    Momentan siehts so aus:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <list>
    
    using namespace std;
    
    // Structure
    struct pattern
    {
    	int mtrkl[6];
    	string str[7];
    	int id[2];
    };  
    
    ostream& output(ostream &out, pattern &data)
    {
    	out << " matrkl:" << data.mtrkl << " str:" << data.str 
    	<< " id:" << data.id << endl;
    	return out;  
    }
    
    int main()
    {
    	// Filename
    	string filename;
    	cout << "Path/Filename of the Input File: " << endl;
    	cin >> filename;
    
    	// Open file
    	ifstream ifile;
    	ifile.open(filename.c_str(), ios_base::in);
    	if(!ifile)
    	{
    		cout << "Error at opening File." << endl;
    		return -1;
    	}
    
    	// Read input file
    	list<pattern> pat_lst;
    	pattern mypat;
    
    	string reader;
    
    	while(getline(ifile, reader))
    	{
    		memcpy(&mypat, reader.c_str(), 15);
    		pat_lst.push_back(mypat);	
    	}	 
    
    	while(!pat_lst.empty())
    	{
    
    	}
    
    return 0;
    }
    


  • Wenn du das schon mit den Streams ausgibst würde ich eher

    ostream& operator<<(ostream &out, pattern &data);

    überladen als eine funktion zu schreiben 😉



  • Ja danke, das ist wirklich besser.
    Die Struct-Elemente sind ja Arrays. Wie kann ich die richtig ausgeben?



  • mit einer Schleife oder std::for_each() würde ich mal sagen



  • Und wie genau sammle ich die Werte auf? Folgendes z.B geht nicht. Bei den int Arrays ist es ähnlich problematisch.

    string tmp_str("");
    
    	for(int i(0); i < 7; ++i)	tmp_str += data.str[i];
    

Anmelden zum Antworten