Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [C++] Datei durchsuchen, danach Inhalt ausgeben/kopieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
06.05.2004, 13:21 Uhr
grillse



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...


C++:

//---------------------------------------------------------------------------
#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 entscheidenn";
    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;
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2004, 14:10 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mach dir am besten ein struct oder ne klasse (dann kannst du den << und >> operator überladen) für einen datensatz...
dann nimm z.b. einen std::vector (oder ein array wobei das dann kompilizierter zu handhaben ist) um deine daten einzulesen...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2004, 14:20 Uhr
grillse



Habe ich jetzt auch nicht wirklich verstanden, bin leider Anfänger und froh das ist ich zumindest soweit schon geschafft habe!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2004, 14:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich hatte letztens mal angefangen versucht sowas in ein template zu giessen...
davon kannst du dir ja was abkupfern, sollte mehr oder weniger alles dabei sein was du brauchst..
www.fun-soft.de/showtopic.php?threadid=6912&time=1083846759
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.05.2004, 14:42 Uhr
grillse



Hmm ich kanns ja mal versuchen, aber ehrlich gesagt verstehe ich da nur Bahnhof, habe noch nie was mit Klassen gemacht!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.05.2004, 17:37 Uhr
theosoft



ich schliesse mich den Ausführungen von Windalf an.
Zufällig habe ich einen Codefetzen mit struct in Binäre Datei schreiben und wieder lesen. Es ist auch ein Beispiel für bestimmten Datensatz suchen dabei!
@grillse: Kannst dir's ja mal anschauen.

C++:
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>  // iostream.h ist enthalten !!!

struct account
{
  char user[15];
  char PW[15];
  int nr;
};

account u[5];

void account_init()
{
  char temp_u[15];
  char temp_p[15];
  for(int i=0; i<5; i++)
  {
    itoa(i+1,temp_u,10);
    itoa(i+1,temp_p,10);
    strcat(temp_u, ". User");
    strcat(temp_p, ". Passwort");
    strcpy(u[i].user, temp_u);
    strcpy(u[i].PW, temp_p);
    u[i].nr = i+1;
  }
}

void datei_schreiben(char *name)
{
fstream datei_out(name, ios::out|ios::binary);

if(datei_out)
{
  for(int i=0; i<5; i++)
   {
    datei_out.write((const char*)&u[i],sizeof(u[i]));
   }
  datei_out.close();
  cout << "TEST_STRUCT.DAT wurde in's aktuelle Verzeichnis geschrieben.";
}
else cout << "\n\nDatei konnte nicht geoeffnet werden !";
  cout << endl << endl;
}

void datei_lesen(char *name)
{
account a[5];
fstream datei_in(name, ios::in|ios::binary);
if(datei_in)
{
  cout << endl << endl << "Die Datei enthaelt folgende Werte:" << endl;
  int i = 0;
  datei_in.read((char*)&a[i],sizeof(a[i]));
  while(!datei_in.eof())
  {
    cout << a[i].nr << " - " << a[i].user << " hat " << a[i].PW << endl;
    i++;
    datei_in.read((char*)&a[i],sizeof(a[i]));
  }
  datei_in.close();
}
else cout << "\n\nDatei konnte nicht geoeffnet werden !";
cout << endl << endl;
}

void suchen(char *name)
{
  account b;
  int i = 6;
  while(i>5 || i<0)
  {
    cout << endl << "Welchen Datensatz? ";
    cin >> i;
  }
  i--;
  fstream datei_in(name, ios::in|ios::binary);
  if(datei_in)
  {
    datei_in.seekg(i*sizeof(b),ios::beg);
    datei_in.read((char*)(&b),sizeof(b));
    cout << b.nr << " - " << b.user << " hat " << b.PW << endl;

    cout << "zum Test: der zweitletzte (4.) Datensatz ist: " << endl;
    datei_in.seekg(-2*sizeof(b),ios::end);
    datei_in.read((char*)(&b),sizeof(b));
    cout << b.nr << " - " << b.user << " hat " << b.PW << endl;
    datei_in.close();
  }
  else cout << "\n\nDatei konnte nicht geoeffnet werden !";
  cout << endl << endl;
}

int main()
{
  account_init();
  datei_schreiben("test_struct.dat");
  cout << "hit any key";
  getch();
  datei_lesen("test_struct.dat");
  cout << "hit any key";
  getch();
  suchen("test_struct.dat");
  cout << "hit any key to end";
  getch();
  return(0);
}


Viel Erfolg wünscht Theo
--
ifS (immer fröhliches Schaffen)
theosoft
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: