Textdatei einlesen und überprüfen
-
Hi....
Als aller erstes muss ich euch sagen, dass ich absoluter C++ Neuling bin.
Nur damit ihr nicht denkt...wie dumm is der
Wir haben in der Schule die Aufgabe vor den Ferien bekommen, ein fertiges Programm zu kommentieren und zusätzliche Funktionen hinzuzufügen.
Ich hab mir da ein Programm ausgesucht welches wenn man ein Datum angiebt den entsprechenden Wochentag ausgiebt (z.B. 17.3.08 wäre dann ein Mo). Jetzt hab ich mir die Aufgabe ausgedacht, einen Geburtstagsreminder dazu zu schreiben. Leichter gesagt als getan. Ich dachte mir ich verwirkliche das über eine Text datei in der ich die Geburtstage aufliste. Oder doch ne andere Lösung.Mein Problem: Wie lese ich die Daten aus der Textdatei aus und frage sie in dem Programm ab?
Geschafft: Ich kann die Textdatei mittlerweile schon auslesen und nach einem ";" eine neue Zeile erzeugen. Doch wie speicher ich das in ein Array, bzw. lass das auslesen?char filename[128] = "test.txt"; ifstream file; char zeile[1024]; // Dateinamen einlesen //cout << "Dateinamen eingeben: " << flush; //cin.getline(filename, 127); // Datei öffnen file.open(filename, ios::in); if (file.good()) { // Wenn die Datei geoeffnet werden konnte... // An den Anfang der Datei springen file.seekg(0L, ios::beg); while (! file.eof()) { // Die Datei zeilenweise auslesen file.getline(zeile, 1024, ';'); cout << zeile << endl; } } else { // Wenn die Datei nicht geoeffnet werden konnte, // aus welchen Gruenden auch immer... cout << "Datei nicht gefunden." << endl; } }in der Test.txt steht dann z.B.:
25;7;HeinzHoffentlich kann mir wer helfen. Ich weiß echt nicht mehr weiter....
Danke schon mal für jede Antwort.
-
Falsches Forum: Richtig wäre C++.
-
Baue dir deine Eigene Datenstrkutur (Klasse od. Struktur) und dann fülle deine Daten in diese Datenstruktur ab und lege das Objekt z.B. in einem std::vector ab.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Das Ding is nur. Wir wurden da in der Klasse alle ins kalte Wasser geworfen. Ich hab keinen schnall von C++. Ich weiß echt nicht mehr weiter. Vor allem muss ich eigentlich fürs Abi lernen und nicht dieses Programm schreiben.
Und wie ich das nun machen soll mit der Klasse oder so...ka...
Mein Kompletter Quellcode sieht so aus.Die Funktion Geburtstagskalender ist hierbei nicht wichtig..so wollte ich das vorher mal lösen aber geht net.
/*************************************************************************** main.cpp - description ------------------- begin : Sunday July 7 11:13:38 GMT+8 2002 copyright : (C) 2002 by Jerry Jenkins email : Jerry_J_Jenkins@hotmail.com ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * *************************************************************************** * * * In the Gregorian calendar, which is widely used now, the year AD 1 * * is directly preceded by the year 1 BC; a year 0 does not exist in * * this system. In contrast, astronomical reckoning indeed uses a year * * 0. For the purpose of distinction, astronomical reckoning drops the * * symbols AD and BC and uses a plus or minus sign before the year * * instead. The astronomical year +1 therefore corresponds to the year * * AD 1, the year 0 corresponds to 1 BC, and the year -1 to 2 BC. For * * convenience, I'll use astronomical years in the program. * * * ***************************************************************************/ #ifdef HAVE_CONFIG_H //Kurzschreibweise für #if defined #include <config.h> #endif #include <iostream.h> #include <fstream> #include <stdlib.h> #include <assert.h> #include <stdio.h> using namespace std; int DayOfWeek( int nYear, int nMonth, int nDay ); //Integer Deklaration int CountOfFeb29( int nYear ); bool Schaltjahr( int nYear ); char Geburtstagskalender ( int nDay, int nMonth); /************************************************** * int main muss in jedem Programm enthalten sein.* * Es ist der Einstiegspunkt des Programms. * * In den Klammer () werden die * * Variablen argc in Interherund argv in Char * * deklariert. * * Hier ist es dafür zuständig Die Ausgabe und * * Abfrage zu erstellen * * ************************************************/ int main(int argc, char *argv[]) //Definiert in der Datei "stdlib.h" { int nYear, nMonth, nDay; //deklarieren der Variablen Year Month und Day const static char aszWeekDayNames[][16] = //Erstellen eines Arrays. Jede spallte kann Maximal 16 Zeichen lang sein. { "Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag" //Dem Array werden die 7 Wochentage zugewiesen }; printf( "Druecken Sie CTRL+C um das Programm zu beenden.\n\n" ); //Ausgabe: "Drücken Sie CTRL+C um das Programm zu beenden." while( 1 ) //Eine whileschleife wird gestartet { //prinf ist eine Ausgabe: Tag,Monat,Jahr printf ( "Tag,Monat,Jahr\t: " ); //scanf ist ein Formatbezeichner. Durch "%d" erwartet das Programme eine Decimalzahl scanf ( "%d,%d,%d", &nDay, &nMonth, &nYear ); //Ausgabe:Das Programm gibt das aus was man als Datum eingegeben hat + den Tag. //"%d" Stellt hier die Zahlen da, die man eingegeben hat. //"\t" ist ein horizontaler Tab. //"%s" steht für den String. Hier der Wochentag printf ( "%d,%d,%d\t: %s\n", nDay, nMonth, nYear, aszWeekDayNames[ DayOfWeek( nYear, nMonth, nDay ) ] ); printf ("Vom Jahr 0 bis zum Jahr %d gibt es %d Schaltjahre\n", nYear, CountOfFeb29(nYear)); Geburtstagskalender (nDay,nMonth); //Textdatei einlesen char filename[128] = "test.txt"; ifstream file; char zeile[1024]; // Dateinamen einlesen //cout << "Dateinamen eingeben: " << flush; //cin.getline(filename, 127); // Datei öffnen file.open(filename, ios::in); if (file.good()) { // Wenn die Datei geoeffnet werden konnte... // An den Anfang der Datei springen file.seekg(0L, ios::beg); while (! file.eof()) { // Die Datei zeilenweise auslesen file.getline(zeile, 1024, ';'); cout << zeile << endl; } } else { // Wenn die Datei nicht geoeffnet werden konnte, // aus welchen Gruenden auch immer... cout << "Datei nicht gefunden." << endl; } } return EXIT_SUCCESS; //Ein vordefinierter Wert für das ende der Main Funktion } /************************************************** * Dies ist das eigentlich Programm zur Bestimmung* * des Wochentages. Die Variablen Year Month und * * Day werden der Function übergeben * * ************************************************/ int DayOfWeek( int nYear, int nMonth, int nDay ) //Übergeben der Variablen aus der Main Funktion { int nDayOfWeek; //DayOfWeek wird als Integer deklariert /* const = Die Variable wird hier definiert und kann später nicht mehr geändert werden. static = eine Globale Variable wird erzeugt. Diese Variable gilt somit auch in anderen Funktionen. int = Integer. Ganze Zahl. */ const static int pnDaysBeforeMonth[] = //DaysBeforeMonth werden die Werte durch ein Array zugewiesen { //In dem Array werden 14 Zahlen gespeichert. Man fäng bei 0 an zu zählen. //Weiter unten wird dann der Wert des eingegebenen Monats um einen erhöht. //Man gibt 12 ein + 1. D.h. wir haben 365 Tage. 0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }; assert //"Assert" heißt soviel wie "bestehen auf" ( nMonth > 0 && nMonth <= 12 //Monath muss größer sein als 0 und kleiner gleich 12 ); assert //Assert ist eine Behauptung, falls sie nicht eintritt, wird das Programm sofort abgebrochen ( nDay > 0 //Es müssen mehr als 0 Tage angegeben werden ); assert ( nDay <= ( pnDaysBeforeMonth[ nMonth+1 ] - pnDaysBeforeMonth[ nMonth ] ) //Die Tage müssen kleinergleich (Monate+1)-Monate sein. || ( nMonth == 2 && nDay == 29 && Schaltjahr(nYear) ) //oder die Tage müssen kleinergleich (Monat:2 Tag:29 und dem Schaltjahr sein) ); /* the day of Jan 1, nYear */ nDayOfWeek = 6 + nYear % 7 + CountOfFeb29(nYear) % 7 + 14;/* + 14 : makes nDayOfWeek >= 0 */ /* the day of nMonth 1, nYear */ nDayOfWeek += pnDaysBeforeMonth[ nMonth ]; if( nMonth > 2 && Schaltjahr(nYear) ) nDayOfWeek++; /* the day of nMonth nDay, nYear */ nDayOfWeek += nDay - 1; nDayOfWeek %= 7; return nDayOfWeek; } /******************************************************** *Diese Function zählt wieviele 29. Ferbuare es bis * * zum angegebenen Datum gibt und gibt sie dann mittels * * der Retunrfunction in der Variablen nCount aus. * ********************************************************/ int CountOfFeb29( int nYear ) { int nCount = 0; //Die Variable nCount wird deklariert und 0 gesetzt if( nYear > 0 ) //Wenn die Jahre größer als 0 sind durchläuft das Programm die If-Schleife { nCount = 1; //Das Jahr 0 ist ein Schaltjahr nYear--; //Das eingebene Jahr wird um ein Jahr zurück gesetzt } nCount += nYear / 4 - nYear / 100 + nYear / 400; return nCount; //Die Variable wird mit der Returnfunction an andere Unterprogramme übergeben } /**************************************** * Function zur Überprüfung ob sich vom * * Jahr 0 bis zum angegebenen Jahr ein * * Schaltjahr befindet * ****************************************/ bool Schaltjahr( int nYear ) //Schaltjahr { if( nYear % 4 != 0 ) return false; //Wenn man die Angegebenen jahre durch vier teilt und das Ergebnis nicht 0 ist gibt er ein false aus if( nYear % 100 != 0 ) return true; //Wenn die angegebenen Jahre durch hundert geteielt nicht null sind gibt die Funktion ein true aus return ( nYear % 400 == 0 ); } char Geburtstagskalender ( int nDay, int nMonth) { int a = nMonth; int b = nDay-1; char Januar [30][20] = {"bam","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","blue","green","Splete"}; char Februar [30][20] = {"Splete"}; char Maerz [30][20] = {"Freeety"}; char April [30][20] = {"Hubert"}; char Mai [30][20] = {"Cornelia"}; char Juni [30][20] = {"Baaaaaa"}; char Juli [30][20] = {}; char August [30][20] = {}; char September [30][20] = {}; char Oktober [30][20] = {}; char November [30][20] = {}; char Dezember [30][20] = {}; switch(a) { case 1 : cout<<Januar [b];break; case 2 : cout<<Februar [b];break; case 3 : cout<<Maerz [b];break; case 4 : cout<<April [b];break; case 5 : cout<<Mai [b];break; case 6 : cout<<Juni [b];break; case 7 : cout<<Juli [b];break; case 8 : cout<<August [b];break; case 9 : cout<<September[b];break; case 10 : cout<<Oktober [b];break; case 11 : cout<<November[b];break; case 12 : cout<<Dezember[b];break; default : cout<<"An diesem Tag hat keiner Geburtstag.\n\n"; } return 0; }