Zeilen in Datei zählen



  • Hi,
    ich will ein Prog schreiben was mir Ausgibt wie viele Zeilen in einer Datei stehen.
    Aber im Programm ist ein Fehler drin den ich nicht verstehe.
    Hier der Code:

    #include "stdafx.h"
    #include <fstream>
    #include <iostream>
    #include <string>
    
    using namespace System;
    using namespace std;
    
    int main(array<System::String ^> ^args)
    {
    
    ifstream quelle;
    string quelldateiname;
    cout << "Quelldatei?...(Kompletten Pfad angeben!!)"<<endl;
    cin >> quelldateiname;
    
    quelle.open(quelldateiname.c_str(), ios::binary|ios::in);
    
    if(!quelle)
    	{
    	cerr << quelldateiname << "kann nicht geoeffnet werden!" <<endl;
    	exit(-1);
    	}
    
    cout << "Zieldatei?..."<<endl;
    string zieldateiname;
    cin >> zieldateiname;
    ofstream ziel(zieldateiname.c_str(), ios::binary|ios_base::app);
    
    if(!ziel)
    	{
    	cerr << zieldateiname <<"kann nicht geoeffnet werden!"<<endl;
    	exit(-1);
    	}
    
    //Hilfsvariablen(zähler,hilfspuffer)
    int cout=0;
    char line[1024];
    while(quelle.eof())
    	{
    		//zeile einlesen
    		fgets(line,1024,quelldateiname);
    		//zähler um ein erhöhen ->zeile wird gezählt
    		cout++;
    
    	}
    ziel.put(cout);
    cout <<"...Zeahlvorgang abgeschlossen..."<<endl;
    
    }
    

    Und zwar meckert der Compiler unter anderem an der stelle mit "fgets" .
    Ich bitte um hilfe.
    MFG steve



  • Was sagt denn der Compiler ?



  • statt

    char line[1024];
    while(quelle.eof())
        {
            //zeile einlesen
            fgets(line,1024,quelldateiname);
            //zähler um ein erhöhen ->zeile wird gezählt
            cout++;
        }
    

    nimm

    std::string text;
    while(getline(quelle,text) cout++;
    

    und dann benenn die Variable cout um in count, könnte sonst auch Probleme mit sich bringen.



  • MiP schrieb:

    statt

    char line[1024];
    while(quelle.eof())
        {
            //zeile einlesen
            fgets(line,1024,quelldateiname);
            //zähler um ein erhöhen ->zeile wird gezählt
            cout++;
        }
    

    nimm

    std::string text;
    while(getline(quelle,text) cout++;
    

    und dann benenn die Variable cout um in count, könnte sonst auch Probleme mit sich bringen.

    ...und im open() das ios::binary streichen



  • Danke funktioniert alles soweit gut.
    Compiler meckert nich mehr und prog wird ausgeführt.
    Danke schon ma hier an dieser stelle an alle.
    Aber der schreibt mir in die Datei die er erstellt ein ASCII zeichen rein.
    😡



  • Du musst hier

    ofstream ziel(zieldateiname.c_str(), ios::binary|ios_base::app);
    

    auch das ios::binary wegnehmen
    Edit:
    http://www.cplusplus.com/reference/iostream/ofstream/open/



  • hab ich auch schon gemacht..immer noch ein ASCII-Zeichen 😕
    mfg steve



  • Problem gefunden:

    int count=0;
    string text;
    while(getline(quelle,text))
    	{
    	  count++;
    	}
    
    ziel.put(count);
    

    Die Variable count ist ein Int-wert, aber die Fktn. ziel.put(), nimmt nur char werte.
    D.h. das sie die Int-werte in char umwandelt.
    Oder lieg ich da falsch?
    Wenn nicht wie schreibe ich dann die Int-werte in die Datei?
    gruß





  • Jop danke hab es gerade auch gefunden auf den link.
    Programm funzt,alles tip top!
    Vielen dank......
    MFG Steve 😃



  • MiP schrieb:

    und dann benenn die Variable cout um in count, könnte sonst auch Probleme mit sich bringen.

    Was wiederum Probleme mitbringt, sobald man <algorithm> inkludiert und den Namensraum offenlegt. Wenn man nicht so schreibfaul ist, kann sich das std:: unter Umständen lohnen... 😉


Anmelden zum Antworten