daten unbekannter länge einlesen



  • Was dein Beispiel anbelangt, ja - so dürftest du eine Zeile anhängen können. Ein paar Kleinigkeiten:

    ofstream NRJ ("meanbond.txt", ios::app); //std::out kannst du weglassen
    
    1./b
    

    Der Standard garantiert, dass wenn der Divisor oder der Divident eine Fließkommazahl ist, alle anderen Typen auch zu dem entsprechendem Typ gecastet werden.



  • Die Vorgehensweise fürs Schreiben ist:

    1. Schreiben

    ofstream NRJ ("meanbond.txt", ios::app|std::ios::out);
    NRJ << mean <<'\t'<< mean_squared <<'\t'<< sigma <<'\t'<< 1./b <<endl;
    

    2. Prüfen, ob das Schreiben erfolgreich war.

    if( !NRJ ) // identisch mit: if( NRJ.fail() )
    {
        // Error: Fehler beim Schreiben.
        // Fehlerbehandlung, das Schreiben z.B. nochmals versuchen.
    }
    else
    {
        // Alles OK, weiter gehts.
    }
    


  • Gugelmoser schrieb:

    if( !NRJ ) // identisch mit: if( NRJ.fail() )
    {

    Nein. Mit if(!NRJ.good()) .
    Edit: Nein, deins ist auch richtig.



  • Hacker schrieb:

    Gugelmoser schrieb:

    if( !NRJ ) // identisch mit: if( NRJ.fail() )
    {

    Nein. Mit if(!NRJ.good()) .
    Edit: Nein, deins ist auch richtig.

    🤡

    bool operator ! ( ) const;
    Returns true if either one of the error flags (failbit or badbit) is set on the stream. Otherwise it returns false. This behavior is equivalent to the member function fail().

    bool fail ( ) const;
    The function returns true if either the failbit or the badbit is set.



  • Gugelmoser schrieb:

    ..

    Meins ist sogar falsch. Denn ios::good() gibt zurück ob auch noch das eofbit nicht gesetzt wurde...



  • Hacker schrieb:

    Gugelmoser schrieb:

    ..

    Meins ist sogar falsch. Denn ios::good() gibt zurück ob auch noch das eofbit nicht gesetzt wurde...

    Jop, dann hast du nämlich ein Problem, wenn du nicht zeichenweise ließt:

    int main()
    {
    	/*
    		Dateiinhalt: 123
    	*/
    	ifstream file("test.txt");
    
    	int value;
    	file >> value;
    
    	if( !file.good() )
    	{
    		cerr << "Fehler beim Lesen"; // Ähh ne, eigentlich nicht.
    	}
    }
    


  • Ich habe da noch eine Frage:

    Wie erhalte ich die Länge dieses Vektors?
    Mit v1.size()?

    Wenn ich die ersten 10 Zahlen nicht brauche, kann ich dann z.B

    int N0 = 10;
    int difference = v1.size() - N0;
    

    rechnen?
    Irgendwie bekomme ich immer ein SIGABRT und weiss nicht wo der Fehler liegt

    danke



  • Ich sollte mich klarer ausdrücken

    Ich möchte von dem Vektor erst nach gewisser zeit (etwa nach dem 10 wert) den mittelwert ausrechnen, aber nur von jedem 2*tau-ten mal.

    so sieht mein code aus:

    vector <int> v1;
    vector <double> v2;
    
    Bondzahl::Bondzahl()
    {
    	ifstream SPIN ("bond_T0.5.txt");
    
    	if (SPIN.is_open())
    	{
    		for (int i = 0, value = 0; SPIN >> value; ++i) 
    		{
    			if (i%2 == 0)
    			{
    				v1.push_back(value);
    			}
    			else 
    			{
    				v2.push_back(value);
    			}
    		}
    		SPIN.close();
    	}
    	else
    	{
    		cerr << "Unable to open file";
    	}
    
    }
    
    int DIFF = v1.size() - N0;
    
    void Bondzahl::Mittelwert(double b)
    {
    	int tau = 4;   
    	int n = DIFF/(2*tau);
    	double sum = 0;
    	double summe = 0;
    
    	for (int j = N0; j < v1.size(); j+=2*tau) 
    	{
    		sum += v1[j];
    		summe += v1[j]*v1[j];
    	}
    
    	//mean value and variance
    	//-----------------------
    
    	mean = sum/n;				//mean bondnumber
    	mean_squared = summe/n;			//mean bondnumber squared
    
    	sigma = sqrt((1./(double)n)*(mean_squared - mean*mean));	//std
    
    	ofstream NRJ ("meanbond_2mal2.txt", ios::app|std::ios::out);
    	NRJ << mean <<'\t'<< mean_squared <<'\t'<< sigma <<'\t'<< 1./b <<endl;
    
    }
    

  • Mod

    Ein weiteres Opfer der eigenen Faulheit. Selber schuld, wenn du globale Variablen benutzt. Lass dir vor Benutzung mal den Wert von DIFF anzeigen und dann versuch mal selbstständig nachzuspüren, warum es diesen Wert hat.



  • SeppJ schrieb:

    Ein weiteres Opfer der eigenen Faulheit.

    Vielleicht hat ihn/sie aber auch einfach ein Wolfs-rudel angegriffen 😉
    Er soll sich ein gutes Buch holen. Das hilft am meisten.


Anmelden zum Antworten