[C++] Datei durchsuchen, danach Inhalt ausgeben/kopieren

grillse

Mitglied
Hallo,

ich habe folgendes Programm geschrieben, in dem man Kundendaten eingeben kann und diese danach in eine Datei geschrieben wird. Gleichzeitig zaehlt ein Zaehler mit und vergibt für jeden Kundendateneintrag eine Kundennummer, danach kommen dann die Kundendaten. Lässt sich blöd erklären aber so sieht das dann in der Datei aus:

####
0
Bla GmbH
SchmidtManfred
bla 5
42313
irgendwas
012312334
1
Bla 2 GmbH
HeinzSiegfred
Irgendwo 12
31231
nirgendwo
1234032

...danach kommt dann Kunde "2" und dessen Daten, usw.
###

Allerdings habe ich nun das Problem das ich die Daten nicht einlesen kann, bzw. ich nicht weiß wie ich das umsetzen soll...

Ich denke mal die einfachste Lösung wäre doch nach dem Eintrag Nr 1 zu Suchen und dann die nächsten 6 Zeilen auszugeben bzw einzulesen!


Hier der Code, sieht noch kaotisch aus, aber er funktioniert schonmal...

Code:
//---------------------------------------------------------------------------
#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
using namespace std;

//---------------------------------------------------------------------------


/* Projekt Anwendungsentwicklung C++ / 28.04.2004 */ 

int main()
{
    char fname[60],name[60],vname[60],strasse[60],ort[60],plz[5],tel[60];
    int auswahl = 0, kdnr;

    const char* kundenz = "zaehler.dat";
    const char* kundendat = "kunden.dat";

    ifstream Zaehlerin;
    Zaehlerin.open(kundenz);
    if (!Zaehlerin)
    {
        cout << "Fehler beim Oeffnen der Zaehlerdatei!\n"
        "Datei wird neu erstellt, starten Sie das Programm jetzt bitte neu!";
        {
            ofstream zaehlernew(kundenz);
            if (!zaehlernew) {
                cout << "Zaehlerdatei kann nicht erstellert werden!\n";
                exit (1);
            }
            zaehlernew << auswahl << endl;
        }
        exit(1);
    }
    Zaehlerin >> kdnr;
    Zaehlerin.close();

    cout << kdnr << '\n';
    cout << "\tIT4YOU\nCustomer Management Software\tv0.10 28.04.2004\n\n";

    /* EINGABE */
Start:
    cout << "Zum Start der Eingaben bitte [ENTER] druecken!" << endl;
    getchar();
    cout << setw(20) << "Firmenname: ";
    cin.getline(fname, 60);
    cout << setw(20) << "Nachname: ";
    cin.getline(name, 60);
    cout << setw(20) << "Vorname: ";
    cin.getline(vname, 60);
    cout << setw(20) << "Strasse + Hausnr.: ";
    cin.getline(strasse, 60);
    cout << setw(20) << "PLZ: ";
    cin.getline(plz, 6);
    cout << setw(20) << "Stadt: ";
    cin.getline(ort, 60);
    cout << setw(20) << "Telefon: ";
    cin.getline(tel, 60);

    cout << "\nDie Kundendaten wurden erfolgreich eingegeben, Sie koennen sich "
    "nun fuer einen der folgenden Schritte entscheiden:\n";
    cout << "1 - Kundendaten einsehen\n2 - Kundendaten exportieren";
    cin >> auswahl;
    fflush(stdin); 
    
    /* ANFANG ANZEIGEN */
    if (auswahl == 1) {
    cout << "Anzeige:" << endl;
    cout << setw(20) << "Firmenname: " << fname << endl;
    cout << setw(20) << "Nachname: " << name << endl;
    cout << setw(20) << "Vorname: " << vname << endl;
    cout << setw(20) << "Strasse + Hausnr.: " << strasse << endl;
    cout << setw(20) << "PLZ: " << plz << endl;
    cout << setw(20) << "Stadt: " << ort << endl;
    cout << setw(20) << "Telefon: " << tel << endl;

    }
    /* ENDE ANZEIGEN */
    
    /* ANFANG EXPORTIEREN + KUNDENZAEHLER +1 & SPEICHERN */
    {
        ofstream Output(kundendat, ios::app);
        if (!Output) {
            cout << "Fehler beim Erstellen der Kundendatei!\n";
            exit (1);
        }
        Output << kdnr << endl;
        Output << fname << endl;
        Output << name << vname << endl;
        Output << strasse << endl;
        Output << plz << endl;
        Output << ort << endl;
        Output << tel << endl;
    }
    // Daten wurden gespeichert, Kundennr.-Zähler + 1
    kdnr++;
    ofstream Zaehlerout;                // Speichern der aktuellen Kundennr.
    Zaehlerout.open(kundenz);

    if (!Zaehlerout) {
        cout << "Fehler beim Oeffnen der Datei!\n";
        exit(1);
    }
    Zaehlerout << kdnr;
    Zaehlerout.close();
    /* ENDE EXPORTIEREN + KUNDENZAEHLER +1 & SPEICHERN */

    return 0;
}
 
Du kannst es natürlich ganz einfach machen, in dem du es wie
eine INI-Datei schreibst. Dann kannst du evtl sogar die Bibliotheks-
funktionen verwenden (GetPrivateProfileString!).

Die Datei sähe dann so aus:

[1]
firma=ccc
name=xxx
strasse=ddd
..

[2]
firma=fff
name=xhf
strasse=dtrd
..

mit nem Zähler kannst du dann über die Blöcke iterieren.
 
Der Gedanke ist im Prinzip gut, allerdings läuft das erstens nur mit Windows und zweites dürfen .ini-Dateien nur 32KB gross werden. Das wird wahrscheinlich nicht ausreichen.

@grillse: Schau mal hier rein, ich habe da mal einen Ansatz gepostet, wie man es machen könnte: Klick
 
Erstmal danke für eure Antworten!

Das erste Beispiel scheint recht einfach umsetzbar zu sein, allerdings habe ich wie gesagt kein Plan wie ich nach bestimmten stellen suchen kann.

@Kachelator: Bei deinem Vorschlag/Beispiel blicke ich ehrlich gesagt nicht ganz durch, liegt wohl dadran das ich erst mit der Programmierung angefangen habe.
 
So, habe jetzt eine andere Idee, allerdings in meinem CPP Kurs verstehe ich nicht so ganz wie man z.B. Zeile 5 in einer Datei auslesen kann.

Kann das vielleicht nochmal jemand erklären?
 
Die Zeilen in einer Textdatei werden durch Zeilenumbrüche ('\n') getrennt. Die fünfte Zeile beginnt nach dem vierten '\n'. Du könntest also die Zeilenumbrüche zählen, wenn du die Datei zeichenweise mit istream::get() einliest. Du kannst aber auch direkt istream::getline() nutzen, das dir deine ganze Zeile einliest.
 
Zurück