Hallo Leute,
Ich habe folgende Inputdatei:
Mit folgendem Code wurde die Anzahl der Variablen als wert eingelesen und alles was unter Var_nr..... steht in einen vector gepackt:
Nun möchte ich die Inputdatei wie folgt erweitern:
Wie kann ich den Code abändern um die Werte nach ":" als char (bei Prozessname, Datum oder Ziffern) und als int (bei GA-Typ, testfunktion und Anzahl der durchläufe) abzuspeichern?
Danke für eure Hilfe.
Grüße
Guddy
Ich habe folgende Inputdatei:
Code:
Anzahl der Variablen:3
Var_nr;uGrenze;oGrenze
1;5;50
2;44;450
3;55;500
Mit folgendem Code wurde die Anzahl der Variablen als wert eingelesen und alles was unter Var_nr..... steht in einen vector gepackt:
C++:
#include <iostream>
#include <fstream>
#include <vector>
#include <limits>
template< char C >
std::istream& Char( std::istream& in )
{
char c;
if( in >> c && c != C )
in.setstate( std::ios_base::failbit );
return in;
}
struct Foo
{
int m_var, m_uGrenze, m_oGrenze;
};
std::istream& operator>>( std::istream& in, Foo& x ) //formatierter input (was bedeuten die Werte in den Klammern? in=Name des iputstream und Ausgabe in x
{
return in >> x.m_var >> Char<';'> >> x.m_uGrenze >> Char<';'> >> x.m_oGrenze; //gibt Werte des inputstream in zurück aber ohne ";"? und zwar in die Variablen der Strucktur x?
}
std::istream& read3DArray( std::istream& in, std::vector< Foo >& dreiD_ ) //Definier von istream abgeleitete Funktion read3DArray mit inputstreamquelle in und Ziel vector dreiD_ mit daten-bzw. structurtyp Foo
{
in.ignore( std::numeric_limits< std::streamsize >::max(), ':' ); // ignore(streamlänge, Zeichen) ignoriert Strom bis zu dem Punkt, wenn Streamlänge erreicht oder Zeichen gefunden
std::size_t anzahl; //size_t übergibt Wert oder stringlänge von Anz_Var an Variable anzahl?
char dummy; // das Lesen des 'dummy' garantiert, das sich der Lesezeiger in der Kommenatrzeile befindet
if( (in >> anzahl >> dummy)
.ignore( std::numeric_limits< std::streamsize >::max(), '\n' ) ) // Kommentar überlesen
{
std::vector< Foo > dreiD; //erzeugt Vektor mit datentyp/Structur Foo mit namen dreiD?
dreiD.reserve( anzahl ); // optional, reserviert ein Minimum an Speicher von anzahl für den Vector dreiD
for( Foo x; anzahl && in >> x; --anzahl ) //Führe aus (Structur x; ?; Zähle anzahl runter
dreiD.push_back( x );//fülle Vektor dreiD mit x vom Structurtyp foo
if( in ) // wenn in != o dann
swap( dreiD, dreiD_ ); // ok; dann übernehmen, swap tauscht Werte von Object dreiD zu dreiD_ , Warum?
}
return in; //gib in zurück, warum?
}
int main()
{
using namespace std;
vector< Foo > dreiD;
char prozessname[256];
ifstream file( "Variableninput.dat" );
if( !file.is_open() )
{
cerr << "Fehler beim Oeffnen der Datei Variableninput" << endl;
return -1;
}
if( read3DArray( file, dreiD, prozessname) )
{
cout << "Vector eingelesen" << endl;
cout << dreiD[1].m_var << endl;;
}
}
Nun möchte ich die Inputdatei wie folgt erweitern:
Code:
Prozessname: Rankine
Datum oder Zifferncodierung: 66
GA-Typ: 1
Genome-Typ: 2
Testfunktionstyp: 1
Anzahl der Durchläufe: 100
Anzahl der Variablen:3
Var_nr;uGrenze;oGrenze
1;5;50
2;44;450
3;55;500
Wie kann ich den Code abändern um die Werte nach ":" als char (bei Prozessname, Datum oder Ziffern) und als int (bei GA-Typ, testfunktion und Anzahl der durchläufe) abzuspeichern?
Danke für eure Hilfe.
Grüße
Guddy