+ 1

Counting how many entrys a Dat File with one column has?

I've got a Dreieck.dat File that I'm opening and thats showing me each entry: double Wert; ifstream Dreieck; Dreieck.open ("Dreieck.dat",ios::out) Dreieck>>Wert; if(Dreieck.is_open ()) { while (!Dreieck.eof ()) { cout<<Wert<<endl; Dreieck>>Wert } } But how can I count how many entrys are in the file? I need to get this value to calculate sth else.

15th May 2018, 1:17 AM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
12 Respuestas
+ 2
Die Funktion gibt double zurück und du returnst den vector. Statt: double DreieckDat(){...} brauchst du: vector<double> DreieckDat(){...} Aber da du DreieckWerte global gemacht hast kannst auch void DreieckDat machen und in der main nur die DreieckDat aufrufen, danach kannst den vector ganz normal benutzen. Ich kann dir das später ein bisschen umschreiben und kommentieren damits verständlicher wird. Bin aber grad noch arbeiten.
17th May 2018, 3:50 AM
Alex
Alex - avatar
+ 3
Hab's fast vergessen :D Das meiste ist von deinem Code kopiert. Die Änderungen hab ich kommentiert und noch ne kleine Erklärung in die main rein. Fragst halt nochmal wenn was unklar ist. https://code.sololearn.com/cjM3vmrqyRrx/?ref=app Und gib am besten auch Bescheid ob's funktioniert hat. Kann's hier nicht testen. Sollte aber denk ich passen.
17th May 2018, 12:52 PM
Alex
Alex - avatar
+ 2
Best thing to solve this would be to just use a vector. Make your DreieckDat function return a Vector<float>. This let's you access all you need. To use a vector you need to include the header: #include <vector> To initiate a vector you need to specify the datatype: vector<float> dreieckWerte To add values to it you can use: dreieckWerte.push_back(Wert); And you can return it from the function just like a normal variable: return dreieckWerte; In your main you can then create a vector<float> and assign the return value of the function to it: vector<float> werte = DreieckDat(); The amount of values in it can then be accessed by werte.size() Here is a reference to the vector class: http://www.cplusplus.com/reference/vector/vector/ It's basically an easy to use dynamic array.
16th May 2018, 3:48 AM
Alex
Alex - avatar
+ 1
Du kannst die Werte mit einer integer Variablen zählen. Nenn die einfach mal counter. Für jeden Wert den der Code ausliest erhöhst die diese um 1. Also zu jedem: Dreieck >> Wert; zusätzlich ein: counter++; Sollte was unklar sein frag nochmal nach.
15th May 2018, 3:47 AM
Alex
Alex - avatar
+ 1
Dankeschön funktioniert super!
15th May 2018, 11:35 AM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
+ 1
Vielen lieben dank für die Hilfe !!
16th May 2018, 1:29 PM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
+ 1
Am besten bei solchen Fragen den Code Teil der den Fehler verursacht mit posten. Ich vermute mal deine Funktion gibt nen vector<double> zurück und du versuchst das einem vector<float> zuzuweisen. Da gibt's keine Standard Konvertierung, weil es u.U. falsche Werte produziert, weil Double und float verschieden präzise sind. Double hat hat 64 Bits und ist bis 15 Nachkommastellen genau, float nur 32 Bit und nur bis 7. Am besten nicht durchmischen. Wenn's nicht anders geht gibt's verschiedene Wege. Einer wäre z.B. den ganzen Vector zu konvertieren: https://code.sololearn.com/cKBJmAf19SG9/?ref=app Am einfachsten wär's wenn du bei double bleibst.
16th May 2018, 5:27 PM
Alex
Alex - avatar
+ 1
also ich hab halt double Werte; int counter; int N; vector <double>DreieckWerte; double DreieckDat () { ifstream Dreieck; Dreieck.open ("Dreieck.dat",ios::out); Dreieck>>Werte; if (Dreieck.is_open ()) { cout<<"offen"<<endl; while (!Dreieck.eof ()) { Dreieck>>Werte; counter++; DreieckWerte.push_back(Werte) } Dreieck.close (); return DreieckWerte; } } int main () { vector <double>WerteAusgabe=DreieckDat (); N=DreieckDat (); } aber DreieckWerte geht halt nicht T.T
16th May 2018, 6:01 PM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
+ 1
juhu endlich hab ichs ! Danke fürs Zeit nehmen, hat mir sehr geholfen 😊
17th May 2018, 5:45 PM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
0
how can I get the this code to display all entrys in an array? the counter is getting returned and then I tried using in the main function : double N; N=DreieckDat (); float Reele [N]; I need this array for so I can calculate a spectrum T.T
15th May 2018, 11:51 PM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
0
ahh wieso sagt es: es ist keine Konvertierung von ""std::vector <float,std:: allocator <float>> "" in ""double"" vorhanden?! T.T
16th May 2018, 4:59 PM
Isabell Reinschmidt
Isabell Reinschmidt - avatar
0
Danke und das wäre super weil irgendwie schreib ich anscheinend trotzdem noch was falsch .
17th May 2018, 11:34 AM
Isabell Reinschmidt
Isabell Reinschmidt - avatar