Dateien



  • Hallo!

    Gibt es ein Gegenstück zu getline? Ich habe eine Datei wo Adressen drin stehen. Wenn sich die Adresse ändert, würde ich gerne die eine Zeile überschreiben. Gibt es vielleicht sowas wie putline? Ich habe schon eine kleine Funktion geschrieben. Wenn z. B. die Anzahl der Zeichen im Straßennnamen größer ist, dann werden die anderen Zeichen ünerschrieben. Was kann man da tun?

    void Kunde::aendern () {
    
    	int auswahl;
    	int i = 0;
    	char c;
    	char buf[100];
    	string pfad; 
    	Kunde kunde;
    	cout << "Kundendaten aendern!" << endl;
    	cout << "Bitte geben Sie die Kundennummer ein:" << endl;
    	cin >> kunde.kuNummer;
    	pfad = "C:/Konto/Dateien/kunden/" + kunde.kuNummer + ".txt";
    	fstream kuFile(pfad.c_str(), ios::in| ios::out);
    	if (!kuFile) {
    		cout << "Kundendaten nicht vorhanden" << endl << endl;
    	}
    	else
    	{
    		cout << "Datei erfolgreich geoeffnet!"<< endl;
    		cout << "Was moechten Sie aendern?" << endl;
    		cout << "(0) Vorname, (1) Name, (2) Strasse, (3) PLZ, (4) Wohnort" << endl;
    		cin >> auswahl;	
    
    		kuFile.seekg(auswahl);
    		kuFile.getline(buf,100);
    		cout << "Der Eintrag war: " << buf << endl
    		cout << "Neuer Eintrag: ";
    		cin >> buf;
    		kuFile.seekg(auswahl);
    		kuFile << buf << ';';
    		kuFile.seekg(0);
    
    		while(!kuFile.eof() ) 
    		{			
    			kuFile.get(c); // aktuelles Zeichen in der Variablen c speichern 
    	       if(c == ';') 
    				i = i + 1;
    		}
    		cout << "i= " << i << endl;
    		kuFile.close();
    	}
    
    }
    

    Gruß, sole :p



  • Schoen, wenn's so einfach gehen wuerde.

    Du kannst aber eine Zeile nur ersetzen, wenn sie kleiner oder gleich der Originalzeile ist.

    Abhilfe aus dem Datenbankbereich: Du machst Dateien mit fester Zeilenlaenge.

    Sonst musst Du die Datei komplett einlesen und wieder rausschreiben.



  • Power Off schrieb:

    Abhilfe aus dem Datenbankbereich: Du machst Dateien mit fester Zeilenlaenge.

    Oder du liest die Datei in einen vector <string>. Da mußt du dir allerdings die Einlesefunktion selbst basteln...

    Moritz



  • sole2202 schrieb:

    ...

    ...while(!kuFile.eof() ) 
            {            
                kuFile.get(c); // aktuelles Zeichen in der Variablen c speichern 
               if(c == ';') 
                    i = i + 1; 
            } 
            cout << "i= " << i << endl;...
    

    welchen zweck erfüllt 'i'? zählst du hier die semikolonze? 🙂


Anmelden zum Antworten