Problem beim Daten auslesen



  • Hallo Freunde, folgendes Problem, ich will mit diesem Programm folgende .txt auslesen. Ich interessiere mich jeweils nur für die Zahlenwerte. Die ersten 6 Zahlen (wenn keine Zahl hinter dem Text steht also 0) aollen in den vector Grundeinstellungen. Bei dem 7.Wert (Anzahl der Laser), soll die Anzahl mit 7 (soviel Daten sind pro Laser) genommen werden und damit ein neuer vector "dynamisch" erzeugt werden, da ist auch schon mein Prob, des macht er irgendwie nicht. Kann mir da jemand helfen, bzw. eine bessere idee nennen? Also kurz gesagt ich will aus Anzahl Laser einen dynamischen vector erzeugen wo dann hintereinander die Daten reinkommen.

    #include <string> 
    #include <fstream> 
    #include <sstream> 
    #include <iostream> 
    #include <vector>
    
    using namespace std; 
    
    int a;
    
    int main() 
    { 
    	vector<int>Grundeinstellungen(6);
    	vector<int>Laserdaten;
    	int i=0;            int index = 0; 
        ifstream stream; 
        stream.open("eingabedatei.txt"); 
        if ( stream.is_open() ) 
        { 
            while ( !stream.eof() ) 
            {
    			string buffer; 
                getline(stream, buffer); 
                stringstream ss; 
                ss << buffer; 
                string value; 
    
                ss >> value; 
                ss >> index; 
    			if (i<6)
    			{
    			Grundeinstellungen.at(i)=index;
    			cout  << " Nr.1 " << Grundeinstellungen.at(i) << endl; 
    			i++;
    			}
    			if (i=7)
    			{
    			Laserdaten.resize(index*7);
    			cout  << " Es wurde ein Speicher mit  " << (index*7) << endl; 
    			i++;
    			}
    			if (i>7)
    			{
    			Laserdaten.at(i-8)=index;
    			cout  << " Nr.1 " << Laserdaten.at(i-8) << endl; 
    			i++;
    			}
    
            } 
        } 
        else  
    	{ 
            cerr << "Datei existiert nicht" << std::endl; 
        }
    
    	cin>>a;
    }
    

    TXT-DATEI!

    Feldabmessung
    	X= 600;
    	Y= 600;
    Autoposition
    	X= 00;
    	Y= 300;
    AnzahlderLaser= 3;
    Laser L1	
    	XPOS1= 600;
    	YPOS1= 0;
    	Umin1= 1000;
    	NULLPos1= -20;
    	NullOn1= 20;
    	RotOn1= 2;
    Laser L2
    	XPOS2= 0;
    	YPOS2= 0;
    	Umin2= 2000;
    	NULLPos2= -20;
    	NullOn2= 20;
    	RotOn2= 2;
    Laser L3
    	XPOS3= 300;
    	YPOS3= 0;
    	Umin3= 3000;
    	NULLPos3= -20;
    	NullOn3= 20;
    	RotOn3= 2;
    Laser L4
    	XPOS3= ;
    	YPOS3= ;
    	Umin3= ;
    	NULLPos3= ;
    	NullOn3= ;
    	RotOn3= ;
    

    Danke!!


  • Mod

    Ein paar Sachen die mir auffallen:

    Bei den Zeilen, in denen keine Zahl steht, bekommst du ein Problem. Da deine Fehlerbeschreibung bloß "macht er nicht" ist, kann ich aber nicht sagen, ob dies dein Problem ist.

    Du beachtest gar nicht, wieviele Laserdaten da sind, sondern liest alles bis zum Ende der Datei. Daher greifst du gegen Ende auf Laserdatenindizes zu, die gar nicht existieren -> Auch ein Problem, falls dein Programm überhaupt soweit kommt.

    push_back ist dir anscheinend unbekannt? Dies würde einiges einfacher machen.

    Klassen sind dir anscheinend auch unbekannt? Falls unbekannt: Das ist jetzt ein bisschen viel zu lernen für ein kleines Leseprogramm. Falls bekannt: Mach doch eine Datenklasse. Damit bist du viel flexibler und kannst die Daten später besser weiterarbeiten. Am besten noch mit überladenen Streamoperatoren, falls du Operatorüberladung kennst.

    Deine ganzen hardcodierten Indizes kommen mir irgendwie falsch vor. Ich will jetzt aber nicht alles im Kopf nachrechnen und den Programmablauf vollständig nachvollziehen. Das machst besser DU mit einem Debugger. Dann siehst du genau was wo schief läuft und kannst mehr sagen als 'macht er irgendwie nicht'.


Anmelden zum Antworten