Counting how many entrys a Dat File with one column has? | Sololearn: Learn to code for FREE!
Novo curso! Todo programador deveria aprender IA generativa!
Experimente uma aula grƔtis
+ 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 Respostas
+ 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