Externe Datenbanken nutzen (Wie .txt Files, etc.)
-
Hi,
ich bin gerade dabei ein kleines Program zu schreiben, was auf eingegebene Sätze vorgegebene Antworten aus externen Quellen (z.B. einer .txt Datei) geben soll. Wenn z.B. ein Satz die Wörter "Wie", "geht" ,"dir" enthält, sollte irgendwas wie "Mir gehts gut", oder "Jo, alles klar" kommen. Zwar kann man jetzt mit ganzen if Armeen kommen, und cin sowie cout benutzen, aber das würde dann irgendwann unübersichtlich werden. Daher wollte ich z.B. in eine .txt Datei 10 mögliche Antworten auf eine Frage schreiben, die dann per Zufall ausgewählt werden. Allerdings habe ich keine Ahnung, wie ich die Textdatei in C++ verarbeiten kann. Wisst ihr weiter?Beste Grüße,
MaximilianPS: Dies ist mein 1. Post, also lyncht mich bitte nicht gleich, wenn ich was falsch gemacht haben sollte.

PPS: Ich benutze Dev C++
-
Ich glaube, du hast dich mit dem Projekt weit übernommen. Wenn es wirklich nur um Dateilesen geht, dann ist die Antwort einen
ifstreamzu benutzen. Benutzung ganz analog zu allen anderen Streams, einziger wichtiger Unterschied ist, dass man im Konstruktor des Streams einen Dateinamen angeben kann. Ich habe aber den Eindruck, dass du mit den gelesenen Daten dann aber gar nichts anzufangen wüsstest, da deine Beschreibung so vage klingt, als hättest du dir noch keinerlei Gedanken über Algorithmen und Datenstrukturen gemacht. Und selbst wenn doch: Wenn du ifstreams nicht kennst, dann kennst du sicherlich auch nicht die ganzen vorgefertigten Algorithmen und Datenstrukturen in C++ und programmierst dir einen Wolf, das was es schon längst gibt, selber nachzubauen.Darf ich dir also empfehlen, erst einmal anhand eines Lehrbuches (siehe meine Signatur) tiefer in die Sprache und insbesondere die Standardbibliothek einzusteigen? Und mehr Erfahrung mit einfachen Projekten zu sammeln wäre auch nicht verkehrt, dein Beitrag erweckt den Eindruck, als würdest du recht planlos an die Sache drangehen und hättest noch nicht einmal eine klare Vorstellung, wie das Programm am Ende funktionieren soll.
-
Ok, ich komme von lite-c (einer C ähnlichen Sprache) auf C++, also kenne ich mich noch nicht perfekt aus. Meine Beschreibung hört sich vielleicht etwas planlos an, aber ich habe mir schon Gedanken gemacht:
Im Grunde sollte das Programm Wörter aus Sätzen erkennen, und je nachdem welche Wörter es erkannt hat, antworten gibt. (Die aus den .txt Dateien.) Ich dachte auch, dass man evt. eine gewisse emotionale Basis mit einbringen könnte, z.B. dass das Programm kürzere und kotzigerere Antworten gibt, wenn man es Beleidigt, etc. Das ganze soll ein Schulprojekt werden, habe bin Ende 2012 Zeit. Ich werde mal nach "ifstream" googeln, mal gucken was ich finde.
Das Problem mit den Büchern ist, dass ich derzeit in Dubai lebe, und hier sendet Amazon, ebay, etc. nicht her. 
Beste Grüße,
Maximilian
-
"Thinking in C++" ist ein gutes (und gratis) Ebook, das bekommst du auch in Dubai.
Aber ok, mit 8 Monaten Zeit wird das auf jeden Fall etwas. Da könntest du sogar die ganze Sprache halbwegs gut lernen. Ich würde aber trotzdem erst einmal C++ lernen, anstatt jetzt schon an deinem Projekt zu arbeiten. Man wird am Anfang so schnell so viel besser, dass du das was du jetzt fabrizierst, in ein paar Monaten für den hinterletzten Müll hältst (normalerweise zurecht) und alles nochmal neu schreibst.
-
Alles klar, vielen Dank für die Links, habe mich schon eingelesen.
Das mit dem lesen und schreiben in der externen Datenbank funktioniert schon ganz gut, nur wird der vorherige Eintrag durch den folgenden immer überschrieben. Wenn ich z.B. zuerst "Hallo" in die Output Datei schreiben lasse, und danach "Tschüss", dann wird das "Hallo" durch "Tschüss" überschrieben. Wie kann ich das verhindern?
Mein Code:
ofstream output; output.open("C:\\Users\\Maximilian\\Documents\\C++ Projects\\test\\Informations.txt"); output << "Name: " << hName << "\n"; output.close(); cout << "question1 ?\n"; getline(cin,hquestion1); output.open("C:\\Users\\Maximilian\\Documents\\C++ Projects\\test\\Informations.txt"); output << "answer to question1: " << hquestion1 << endl; output.close();hquestion1 ist vor der main als string definiert.
Vielen Dank schonmal im Vorraus.
Edit: Warum wird das wort V_O_R_R_A_U_S zensiert? O.oGrüße,
Maximilian
-
TheShooter007 schrieb:
Das mit dem lesen und schreiben in der externen Datenbank funktioniert schon ganz gut, nur wird der vorherige Eintrag durch den folgenden immer überschrieben. Wenn ich z.B. zuerst "Hallo" in die Output Datei schreiben lasse, und danach "Tschüss", dann wird das "Hallo" durch "Tschüss" überschrieben. Wie kann ich das verhindern?
Indem du die Datei nicht dauernd öffnest und schließt oder, falls doch, die Datei zum Anhängen öffnest. Das hättest du in einem vernünftigen Buch sicherlich so auch erklärt bekommen. Dein Code mit dem ganzen open und close (das ist in C++ sehr ungewöhnlich) deutet darauf hin, dass du irgendein komisches Internettutorial von einem der berüchtigten "C mit cout"-Programmierer gelesen hast. Empfehlung: Lieber gar nichts lernen, als schlecht lernen.
Vielen Dank schonmal im v******.
Edit: Warum wird das wort V_O_R_R_A_U_S zensiert? O.oGuck mal im Duden nach.
-
Jap, genau aus so einem flüchtigen Tutorial habe ich das. Aber jetzt habe ich ja was gelernt. Jedenfalls bin ich dabei das Buch durchzuarbeiten, und mal sehen was draus wird.
Beste Grüße,
MaximilianPS: Über das besagte Wort habe ich nichts finden können.

-
TheShooter007 schrieb:
PS: Über das besagte Wort habe ich nichts finden können.

Ach! Und wenn es nicht im Duden steht, was würde Sherlock Holmes daraus folgern?
-
Vielleicht, dass es das Wort nicht gibt? (Ich weiß, es wird eigentlich "Voraus" geschrieben.) Aber das beantwortet immer noch nicht meine Frage, warum das Wort zensiert wird? Werden neuerdings Rechtschreibfehler mit Zensur bestraft?

MfG,
Maximilian
-
TheShooter007 schrieb:
Werden neuerdings Rechtschreibfehler mit Zensur bestraft?
Ja! Zum Schutze der rechtschreiblichen Gesundheit des Forenkörpers.
Ich weiß, es wird eigentlich "Voraus" geschrieben.
Warum schreibst du es dann nicht so? Hast du eventuell zu oft Leute "vorraus" schreiben sehen? Vielleicht in Internetforen?
Aber das beantwortet immer noch nicht meine Frage, warum das Wort zensiert wird?
Ist es nun klar?
-
Ok, du hast recht. Ja, das hat sich sozusagen schon eingebrannt, die tägliche Routine machts.
Sorry, wird in Zukunft nicht mehr vorkommen. 