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;Heinz

    Hoffentlich 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;
    }
    

Anmelden zum Antworten