C++:
#include <iostream>
#include <istream>
#include <fstream>
#include <limits>
#include <string>
#include <vector>
struct MD // string für datum und doubles für die werte in zahlen
{
std::string datum;
double hours_worked;
double filescreated;
};
namespace
{
const std::streamsize ALL = std::numeric_limits< std::streamsize >::max();
};
// filter :P
std::istream& operator>>( std::istream& in, MD& md )
{
in.ignore( ALL, '[' ) >> md.datum;
std::string token;
if( getline( in.ignore( ALL, '|' ), token, '=' ) )
{
md.hours_worked = 0.;
md.filescreated = 0.;
if( token == "hours_worked" )
in >> md.hours_worked;
else if( token == "filescreated" )
in >> md.filescreated;
else
in.setstate( std::ios_base::failbit );
}
return in;
}
struct Komma : public std::numpunct< char >
{
protected:
virtual char_type do_decimal_point() const
{
return ',';
}
};
int main()
{
using namespace std;
ifstream fin ("C:/valueextractor/valueextractor/testfolder/days/2012-10-03.md") ;
fin.imbue( locale( fin.getloc(), new Komma ) );
if( !fin.is_open() )
{
cerr << "Fehler beim Oeffnen der Datei" << endl;
return -2;
}
//stream öffnen
ofstream myFile;
myFile.open ("C:/valueextractor/extractor.csv");
MD md;
while ( fin >> md )
{
// md's auswerten
cout << "Datum |Stunden gearbeitet | Dateien erstellt " << endl ;
cout << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//stream schreiben
if (myFile)
myFile << "Datum | Stunden gearbeitet | Dateien erstellt " << endl;
myFile << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//MD'D summieren
}
// stream schließen
myFile.close();
// new doubles
string mdd1 (md.datum) ;
double mdf1 ( md.filescreated ) ;
double mdh1 (md.hours_worked );
if( fin.eof() )
{
}
//------------------------------------------2222222222222222222222222222222222------------------------------------------------------------
ifstream fin1 ("C:/valueextractor/valueextractor/testfolder/days/2012-10-04.md") ;
fin1.imbue( locale( fin1.getloc(), new Komma ) );
if( !fin1.is_open() )
{
cerr << "Fehler beim Oeffnen der Datei" << endl;
return -2;
}
//stream öffnen
myFile.open ("C:/valueextractor/extractor.csv", std::ios::app);
while ( fin1 >> md )
{
// md's auswerten
cout << "Datum |Stunden gearbeitet | Dateien erstellt " << endl ;
cout << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//stream schreiben
if (myFile)
myFile << "Datum | Stunden gearbeitet | Dateien erstellt " << endl;
myFile << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//MD'D summieren
}
// stream schließen
myFile.close();
//new doubles
string mdd2 (md.datum) ;
double mdf2 (md.filescreated ) ;
double mdh2 (md.hours_worked);
if( fin1.eof() )
{
}
//-----------------------------------------------3333333333333333333333333333333333333333---------------------------------------------
ifstream fin11 ("C:/valueextractor/valueextractor/testfolder/meetings/MeetingForWikiDown1.md") ;
fin11.imbue( locale( fin11.getloc(), new Komma ) );
if( !fin11.is_open() )
{
cerr << "Fehler beim Oeffnen der Datei" << endl;
return -2;
}
//stream öffnen
myFile.open ("C:/valueextractor/extractor.csv", std::ios::app);
while ( fin11 >> md )
{
// md's auswerten
cout << "Datum |Stunden gearbeitet | Dateien erstellt " << endl ;
cout << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//stream schreiben
if (myFile)
myFile << "Datum | Stunden gearbeitet | Dateien erstellt " << endl;
myFile << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//MD'D summieren
}
// stream schließen
myFile.close();
// new doubles
string mdd3 (md.datum) ;
double mdf3 (md.filescreated) ;
double mdh3 (md.hours_worked);
if( fin11.eof() )
{
}
//-------------------------------------------------4444444444444444444444444444444444444-------------------------------------------------
ifstream fin111 ("C:/valueextractor/valueextractor/testfolder/meetings/MeetingForWikiDown2.md") ;
fin111.imbue( locale( fin111.getloc(), new Komma ) );
if( !fin111.is_open() )
{
cerr << "Fehler beim Oeffnen der Datei" << endl;
return -2;
}
//stream öffnen
myFile.open ("C:/valueextractor/extractor.csv", std::ios::app);
while ( fin111 >> md )
{
// md's auswerten
cout << "Datum |Stunden gearbeitet | Dateien erstellt " << endl ;
cout << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//stream schreiben
if (myFile)
myFile << "Datum | Stunden gearbeitet | Dateien erstellt " << endl;
myFile << md.datum << "| " << md.hours_worked << " | " << md.filescreated << endl ;
//MD'D summieren
}
// stream schließen
myFile.close();
if( fin111.eof() )
{
}
//-------------------------------------------------ende---------------------------------------------------------------------------------
myFile.open ("C:/valueextractor/extractor.csv");
if (myFile)
{
// new doubles
string mdd4 (md.datum) ;
double mdf4 (md.filescreated) ;
double mdh4 (md.hours_worked);
cout << endl << mdd1 << " | " << mdh1 << " | " << mdf1 << endl ;
cout << mdd2 << " | " << mdh2 + mdh3 + mdh4 << " | " << mdf2 + mdf3 + mdf4 << endl ;
myFile << mdd1 << " | " << mdh1 << " | " << mdf1 << endl ;
myFile << mdd2 << " | " << mdh2 + mdh3 + mdh4 << " | " << mdf2 + mdf3 + mdf4 << endl ;
}
myFile.close();
getchar () ;
return 0;
}
Guten Tag ich habe folgendes Problem ich habe im unteren abscgnicht dieses codes meine datei geöffnet und darin meine doubles addiert ... die doubles befinden sich dort wo ich mit // new double komentiert habe ... er macht auch alles toll und rechntet die werte die ich in die doubles geschrieben haben zusammen nur hab ich den fehler begangen die werte aus dem MD struckt objeckten ( md.filescreate und md.hours_worked) in die doubles zu schreiben die aber nur platz haben für einen double ... also er liest nicht alle zeilen raus ... was kann ich mit den doubles machen damit sie mehrere zeilen lesen ****
Zuletzt bearbeitet von einem Moderator: