2 Vektoren in der gleiche xls-Datei schreiben
-
hallo
In meinem Programm habe ich den Inhalt des Vektors "vec1" in der erste Spalte der excel-Datei "xdat.csv" geschrieben . Der Code sieht folgendes aus:fstream myfile("xdat.csv", std::ios::out); //als Ausgabedatei if(!myfile) return 20; copy(vec1.begin(),vec1.end(),ostream_iterator<double>(myfile,",\r")); myfile.close(); // Datei schliessenmeine Frage lautet: wie kann ich jetzt den Inhalt eines zweiten Vektors "vec2" in die zweite Spalte derselbe Datei "xdat.csv" schreiben
vielen vielen Dank
-
Edit: Mist - habs falsch verstanden...
-
das würde erst den kompletten Inhalt von vec1 in eine Zeile packen, danach den ersten von vec2 ind die gleiche Zeile und dann anfangen in die nächste Spalte zu schreiben, wenn ich die ",\r" und ",;" für excel richtig verstanden hab.
Ich würd auf die bequemlichkeit von copy verzichten und sowas bringen wie
for(i1 = vec1.begin(), i2=vec2.begin(); i1 != vec1.end() && i2 != vec2.end(); i1++, i2++) { myfile << *i1 << ",;" << *i2 << ",\r"; }Wenn du ganz viel Spaß in den Backen hast, könntest du natürlich einen "Doppeliterator" implementieren, der als Konstruktor ein pair aus zwei Iteratoren bekommt und als inkrementoperator beide inkrementiert etc. Als Rückgabewert der Dereferenzierung müsste natürlich eine Abart von pair<> kommen (du musst ja beide Werte zurückgeben), für die ein operator<< definiert ist, damit der ostream_operator sie auch auf seinen ostream packen kann. Der Vorteil?
Öhm, naja. Vielleicht dass du das Dingen dann schachteln kannst?template<class T1, T2> class Ausgabepair : public pair<T1, T2>; ostream& operator<<(ostream& os, Ausgabepair& ap) { os << ap.first << ",;" << ap.second; return os; }; template<class InIt1, InIt2> class DoppelIterator { public: DoppelIterator(InIt1& it1, InIt2& it2); DoppelIterator(DoppelIterator& rhs); DoppelIterator& operator=(DoppelIterator& rhs); DoppelIterator& operator=(pair<InIt1,InIt2>& rhs); DoppelIterator& operator++(); DoppelIterator operator++(int); //... Ausgabepair<T1, T2> operator*(); } main() { //... typedef DoppelIterator<DoppelIterator<typename vector<int>::iterator, typename vector<double>::iterator>, vector<char>::iterator > Dreieriterator; Dreieriterator i = (make_pair(make_pair(intvec.begin(),doublvecbegin()),charvec.begin()) copy(i, //ne gute definition für i.end(), ostream_iterator<double> //...) }Ähm also. Es ginge bestimmt. Irgendwie. Wers schafft kriegt n Bier

}
-
@pumuckl
Danke für die Antwort.for(i1 = vec1.begin(), i2=vec2.begin(); i1 != vec1.end() && i2 != vec2.end(); i1++, i2++) { myfile << *i1 << ",;" << *i2 << ",\r"; }könnte mir jemand sagen was für n Datentyp haben die var i1 und i2 ?!!!
Danke sehr
-
Das sind Iteratoren.
da ich mal annehme, dass vec1 und vec2 vom typ vector<double> sind, sind i1 und i2 entsprechend vector<double>::iterator
-
@pumuckl
das funzt wunderbar
du hast meinen Tag gerettet.
vielen Dank
weiter so!
-
np

-
pumuckl schrieb:
Ähm also. Es ginge bestimmt. Irgendwie. Wers schafft kriegt n Bier

Hallo Pumuckl,
wie wär's damit
#include <iostream> #include <locale> #include <fstream> #include <vector> #include <iterator> #include <algorithm> struct Zeile { Zeile( double sp1, double sp2 ) : m_sp1( sp1 ) , m_sp2( sp2 ) {} friend std::ostream& operator<<( std::ostream& out, const Zeile& zl ) { return out << zl.m_sp1 << ";" << zl.m_sp2; } static Zeile make( double sp1, double sp2 ) { return Zeile( sp1, sp2 ); } private: double m_sp1, m_sp2; }; int main() { using namespace std; vector< double > vec1; vector< double > vec2; vec1.push_back( 1.2 ); vec1.push_back( 3.4 ); vec1.push_back( -5.6 ); vec2.push_back( 156.01 ); vec2.push_back( -0.8 ); vec2.push_back( 18.0 ); ofstream out("xdat.csv"); out.imbue( std::locale("German") ); // für die deutsche Version von Excel transform( vec1.begin(), vec1.end(), vec2.begin(), ostream_iterator< Zeile >( out, "\n" ), &Zeile::make ); return 0; }Krieg' ich jetzt 'n Bier?
Werner
-
Hallo,
erstmal danke für dieses Super Codeausschnitt er funktioniert einwandfrei.
Habe Ihn auch so erstmal 1:1 übernommen.
Meine Frage.Wie kann ich ein Array von Messdaten in die datei schreiben.
Bzw während einer Bewegung sollen mehrere Messdaten aufgenommen werden(mehrer Bilder) und diese jeweils in einem Array gespeichert werden.
Das entstandene große Array mit allen Messungen soll dann in Excel gespeichert werden.Habt Ihr ne Idee wie ich dies am Besten umsetzte damit das ganze schnellstmöglich passiert ?
LG
-
Bitte keine Uraltthreads auskramen, um dann eine nur gering mit dem Thema verwandte Frage zu stellen. Mach einen neuen Thread mit einer präzisen Problembeschreibung und Fragestellung auf.