+ 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 RĂ©ponses
+ 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