string aus datei auslesen und in der main ausgeben



  • Eine Klasse für ein spezielles Dateiformat zu schreiben macht Sinn. So ist es aber Unsinn!



  • CFile::CFile(string dateiName)
    {
    	m_Zustand = geschlossen;
    	if (dateiName.find(":")!=1)
    	{
    		dateiName = "c:\\" + dateiName;
    	}
    	if (dateiName.size() - dateiName.find_last_of(".")!=4)
    	{
    		dateiName += ".txt";	
    	}
    	if (dateiName.size()<=7)
    	{
    		dateiName.insert(3,"test");
    	}
    	m_DateiName = dateiName;
    }
    

    WTF???????????



  • @imhotep:
    Vielen Dank für deine Hilfe aber ich krieg damit ziemlich viele Fehlermeldungen, die ich net wegbekomm...

    Kann ich es nicht mit dieser Funktion machen?:

    {
    
    	char tmp[anzahl];
    	//while(!m_Datei.eof())				//WIE KANN ICH HIER ALLES AUSLESEN 
    	//{									//OHNE DIE WHILESCHLEIFE ZU BENUTZEN?
    		m_Datei.getline(tmp,anzahl);	//DAS MÖCHTE ICH AUSGEBEN
    	//}
    	*inhalt = tmp;
    	return true;
    }
    

    Hier das ganze mit int:

    bool CFile::read(int*inhalt)
    {
    	char tmp[anzahl];
    	//while (!m_Datei.eof())
    	//{
    		m_Datei.getline(tmp,anzahl);	//WIE KANN ICH HIER ALLES AUSLESEN 
    	//}									//OHNE DIE WHILESCHLEIFE ZU BENUTZEN?
    	*inhalt = atoi(tmp);
    	return true;
    }
    

    Das funktioniert wunderbar, nur das ich nicht alle ints auslesen kann, falls mehrere untereinander stehen, denn mit eof() funktioniert es nicht... 😞

    Gibt es für string denn keine funktion, wie das atoi bei int?

    MfG, Alex™



  • @LOL:
    Das ist für den Dateinamen...
    Man soll selbst einen Dateinamen angeben können!
    Hier wird überprüft, ob der Pfad stimmt.

    @lehrer:
    Warum ist das hier Unsinn?
    So hat mir mein Lehrer die Aufgabe gestellt!

    MfG, Alex™



  • Lies alles als Strings ein und wandel es dann erst nach int, float, [...] um.



  • rat schrieb:

    Lies alles als Strings ein und wandel es dann erst nach int, float, [...] um.

    Aber wie mache ich das?

    Außerdem sollen wir daseigentlich in ein char array einlesen(so wie ich es gemacht habe und dann davon umwandeln...)
    siehe:

    char tmp[anzahl];
    

    MfG, Alex™



  • Umwandlung einen Strings in einen Zahl.

    #include <stdlib.h>
    
    string szeile; 
    char * czeile;
    
    /* Dateizeile in szeile und czeile gespeichert */
    
    int zahl1 = atoi(szeile.c_str());
    long zahl2 = atol(szeile.c_str());
    double zahl3 = atof(szeile.c_str());
    
    int zahl4 = atoi(czeile);
    long zahl5 = atol(czeile);
    double zahl6 = atof(czeile);
    


  • OK, danke!

    Ich verstehe hier jetzt nur noch nicht so ganz, wie ich das wieder in einen string umwandle...

    Und warum hast du das char als pointer gemacht??

    MfG, Alex™



  • Ein Array kann man auch als Pointer deklarieren, muss dann aber bevor man es benutzt dynamisch Speicher dafür anfordern. Will dich jetzt nicht überfordern, also mach ich es auch gern anderst.

    char czeile[1024]; // schön groß, damit die Zeile auch rein passt
    int zahl;
    char zahl_als_string[20]; // reicht, da ints niemals 20 Stellen haben.
    
    /* czeile erhält eine Zeile aus der Datei*/
    
    zahl = atoi(czeile);
    zahl ++;
    printf("Zahl plus eins gleich %d", zahl); // Ausgabe
    sprintf(zahl_als_string, "%d\0", zahl); // Umwandlung zurück in char-Array
    

    Das '\0' soll verdeutlichen, dass an der Stelle der String endet.



  • Vielen Dank fürdie Mühe, die Du dir mit mir machst 🙂

    char czeile[1024]; // schön groß, damit die Zeile auch rein passt 
    int zahl; 
    char zahl_als_string[20]; // reicht, da ints niemals 20 Stellen haben. 
    
    /* czeile erhält eine Zeile aus der Datei*/ 
    
    zahl = atoi(czeile); 
    zahl ++;   //Wofür brauche ich das hier?
    printf("Zahl plus eins gleich %d", zahl); // Ausgabe 
    sprintf(zahl_als_string, "%d\0", zahl); // Umwandlung zurück in char-Array
    

    printf und sprintf habe ich noch nie gehört...??
    ist das sowas wie cout?
    `Wenn ja, kann ich es stattdessen auch mit cout machen?

    EDIT: Kann es sein, dass das C ist und nicht C++?

    MfG, Alex™



  • Ja es ist C. Ich versteh auch nicht ganz, wieso euer Lehrer C++ programmiert aber mit Char-Arrays arbeitet.

    Für Zahlen in String siehe FAQ.
    Aus einem String einen Char-Array machen

    char czeile[1024]
    string szeile;
    strcpy(czeile, szeile);
    


  • imhotep schrieb:

    Ja es ist C. Ich versteh auch nicht ganz, wieso euer Lehrer C++ programmiert aber mit Char-Arrays arbeitet.

    Was soll daran nicht verständlich sein 🙂 .
    Char-Arrays sind ja nicht verboten wenn man in C++ programmiert.
    Auserdem sollte jeder C++'ler auch den Umgang mit char-Arrays drauf haben 😉



  • Richtig sie sind nicht verboten, aber sie zählen für mich nicht zu C++, sind Überbleibsel aus C. Wenn man C++ macht sollte man halt mit Strings arbeiten, weil die besser in der Handhabng sind.



  • am besten, du schreibst die read-funktionen so, daß sie immer nur eine zahl aus der datei auslesen. schließlich übergibst du an die funktion beim aufruf in main() ja auch nur einen zeiger auf eine zahlenvariable und nicht einen zeiger auf ein ganzes array.

    was das eigentliche einlesen der zahlen angeht: das funktioniert genauso wie das ausgeben: m_Datei>>zahl. je nach typ von zahl liest der befehl dann ein int bzw double ein.

    bool CFile::read(double *inhalt)
    {
      m_Datei>>*inhalt;
    
      return !m_Datei.fail();
    }
    

Anmelden zum Antworten