CoolerFreak
Well-known member
Fehler Durchsuchen einer Datei, Funktioniert jedes 2. Mal(Anfänger)
Hallo alle zusammen.
Ich bastel im Moment an einer Datenbank. Sie ist möglichst simpel aufgebaut, da meine Kenntnisse in C++ sehr eingeschränkt sind und ich neu auf diesem Gebiet bin. Der Code funktioniert einigermaßen (schlecht^^). Jedoch gibt er mir beim Anfragen immer nur jedes zweite Mal eine korrekte Antwort. Dies müsste doch eigentlich nicht möglich sein, da ich das Abfragen als Funktion ausgelagert habe und er jedes Mal die Datei neu öffnet? Was habe ich falsch gemacht?
Würde mich über jede Hilfe freuen
lg CoolerFreak
Achso:
Dateiaufbau ist folgender:
Anzahl der Datenpaare
"Test" "TestInfo" "Test1" "Test1Info"...
main.cpp:
funktionen.h:
Hallo alle zusammen.
Ich bastel im Moment an einer Datenbank. Sie ist möglichst simpel aufgebaut, da meine Kenntnisse in C++ sehr eingeschränkt sind und ich neu auf diesem Gebiet bin. Der Code funktioniert einigermaßen (schlecht^^). Jedoch gibt er mir beim Anfragen immer nur jedes zweite Mal eine korrekte Antwort. Dies müsste doch eigentlich nicht möglich sein, da ich das Abfragen als Funktion ausgelagert habe und er jedes Mal die Datei neu öffnet? Was habe ich falsch gemacht?
Würde mich über jede Hilfe freuen
lg CoolerFreak
Achso:
Dateiaufbau ist folgender:
Anzahl der Datenpaare
"Test" "TestInfo" "Test1" "Test1Info"...
main.cpp:
Code:
#include <iostream>
#include <fstream>
#include <string>
#include "funktionen.h"
using namespace std;
int main()
{
cout << "Database 1.0" << endl << "By ***" << endl;
anzeigen();
while(1)
{
suche();
}
}
funktionen.h:
Code:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int anzeigen(void)
{
ifstream dat_ein;
ofstream dat_aus;
int anzahl;
char zeichen;
string dateiname = "data.txt";
int loop;
string suche;
dat_ein.open(dateiname.c_str(), ios_base::in); //offnen der Datei
if(!dat_ein)
{
cout << "Datenbank konnte nicht geoeffnet werden" << endl;
return -1;
}
dat_ein >> anzahl; //Anzahl der Datenpaare einer Datei einlesen
string name[anzahl]; //Arrays zu jedem Paar erstellen
string beschr[anzahl];
suche = "Test";
loop = 0;
suche = "Test";
while(loop < anzahl) //Solange Solange noch Datenpaare noch nicht eingelesen wurden
{
while(zeichen != '\"')
{
dat_ein.get(zeichen); //Bis zum ersten Datenwert einlesen
}
dat_ein.get(zeichen); //Das " uberspringen
while(zeichen != '\"') // Bis zum nächsten " Einlesen
{
name[loop] += zeichen; // in den zugehörigen Array einspeichern
dat_ein.get(zeichen);
}
dat_ein.get(zeichen); //Das " uberspringen
while(zeichen != '\"') //Bis zum nächsten " einlesen
{
dat_ein.get(zeichen);
}
dat_ein.get(zeichen); // Das " uberspringen
while(zeichen != '\"')
{
beschr[loop] += zeichen; // in den zugehörigen Array einspeichern
dat_ein.get(zeichen);
}
dat_ein.get(zeichen);
cout << name[loop] << ";" << beschr[loop] << endl; //Die eingelesen Werte ausgeben
++loop;
}
dat_ein.close();
return 0;
}
int suche (void)
{
ifstream dat_ein;
ofstream dat_aus;
int anzahl;
char zeichen;
string dateiname = "data.txt";
int loop;
string suche;
dat_ein.open(dateiname.c_str(), ios_base::in); //offnen der Datei
if(!dat_ein)
{
cout << "Datenbank konnte nicht geoeffnet werden" << endl;
return -1;
}
dat_ein >> anzahl;
string name[anzahl];
string beschr[anzahl];
suche = "Test";
loop = 0;
suche = "Test";
while(loop < anzahl)
{
while(zeichen != '\"')
{
dat_ein.get(zeichen);
}
dat_ein.get(zeichen);
while(zeichen != '\"')
{
name[loop] += zeichen;
dat_ein.get(zeichen);
}
dat_ein.get(zeichen);
while(zeichen != '\"')
{
dat_ein.get(zeichen);
}
dat_ein.get(zeichen);
while(zeichen != '\"')
{
beschr[loop] += zeichen;
dat_ein.get(zeichen);
}
dat_ein.get(zeichen);
++loop;
}
dat_ein.close();
cout << "Zu suchendes Objekt eingeben: "; //Suchbegriff einlesen
cin >> suche;
loop = 0;
while(loop < anzahl) //Alle Datenpaare uberprufen
{
if(name[loop] == suche) //Vergleichen
{
cout << endl << beschr[loop] << endl; //richtigen Wert ausgeben
break;
}
++loop;
}
return 0;
}