tutorials.de Buch-Aktion 05/2012
Like Tree8Danke
  • 1 Beitrag von Steiner_B
  • 1 Beitrag von Steiner_B
  • 1 Beitrag von Steiner_B
  • 1 Beitrag von Matthias Reitinger
  • 1 Beitrag von MCoder
  • 1 Beitrag von MCoder
  • 1 Beitrag von MCoder
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
14
ZUGRIFFE
456
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Moin Leute,

    ich bin neu hier. Ich geb mir größte Mühe, alles so zu beschreiben, dass es schnell klar wird und wenig Aufwand für euch ist. Falls doch mal was nicht so präzise ist, bitte nachfragen. Ich verwende Ecplise Wascana.

    Für meinen HiWi-Job bin ich grade fleißig am Progammieren.
    Ein Teilprogramm will aber noch nicht richtig.
    In diesem möchte ich Daten aus einer .txt Datei einlesen.
    Die Datei heißt wasser.txt und ist im selben Ordner wie das Programm.
    Das funktioniert allerdings nicht. Hier der Quellcode:

    #include<iostream>
    #include<cmath>
    #include<fstream>
    #include<string>
    #include<sstream>

    using namespace std;

    int main()
    {

    [...]
    string datei = "wasser.txt";
    ifstream in( datei ); // Textdatei einlesen

    if (in)
    {
    cout<<"Alles hat geklappt";
    string zeile;

    while( !in.eof())// solange Dateieende nicht erreicht
    {
    getline( in, zeile); // zeilenweise einlesen
    cout<<zeile<<endl;
    cout<<a<<endl;
    a++;
    }
    }
    else
    {
    cout <<"Leider ist beim Lesen der Datei thermdat.txt ein Fehler aufgetreten";
    }


    Mir wird immer "Leider..." ausgegeben.


    Vielen Dank schon mal im Vorraus
    Fuji
     

  2. #2
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Versuch mal statt
    Code cpp:
    1
    
    if (in)
    folgendes:
    Code cpp:
    1
    
    if (in.good())
    fujifilm bedankt sich. 

  3. #3
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Hallo,

    Versuch mal statt
    Code cpp:
    1
    
    if (in)
    folgendes:
    Code cpp:
    1
    
    if (in.good())

    Danke für deine Antwort; funktioniert aber leider auch nicht
    EDiT: War nen Versionenfehler. Sry

    Hab nen kleinen Fehler oben in meinem Text gehabt und mach das ganze jetzt nochmal in cpp der Übersichthalber:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    
    /*
     * test.cpp
     *
     *  Created on: 16.09.2011
     *      Author: Jules
     */
     
    #include<iostream>
    #include<cmath>
    #include<fstream>
    #include<string>
    #include<sstream>
     
    using namespace std;
     
    int main()
    {
        //double NasaKoeff [7][10];
        int a = 1;
        string datei = "thermdat.txt";
     
        ifstream in( "datei" ); // Textdatei einlesen
        if (in.good())
        {
            cout<<"alles klappt";
            string zeile;
            while( !in.eof())// solange Dateieende nicht erreicht
     
            {
                getline( in, zeile);    // zeilenweise einlesen
                cout<<zeile<<endl;
                cout<<a<<endl;
                a++;
            }
        }
        else
        {
        cout <<"Leider ist beim lesen der Datei thermdat.txt ein Fehler aufgetaucht";
        }
     
     
    return 0;
    }

    mfg
    fuji
    Geändert von fujifilm (20.09.11 um 18:40 Uhr)
     

  4. #4
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Es muss trotzdem if (in.good()) heißen. Nebenbei: Ich wusste garnicht das ifstream einen Konstruktor hat der einen String akzeptiert.
    fujifilm bedankt sich. 

  5. #5
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Moin,

    hab die falsche Version reinkopiert. Sry. Habs jetzt nochmal überarbeitet.
    Hm, hab ich in nem Tutorial gelesen.

    Hast du eventuell eine andere Lösung, wie ich das einlesen könnte?

    mfg
    fuji
     

  6. #6
    Steiner_B Steiner_B ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Ort
    Wien
    Beiträge
    573
    Hallo,

    Habs grad selber versucht. Bei mir mit Visual Studio 2010 hats anfänglich auch nicht funktioniert, hab jetzt grad gesehen das aber Standartmäßig als Ausführ-Verzeichnis im Debug-Mode das Projektverzeichnis und nicht das Ausgabeverzeichnis gesetzt war.
    Funktioniert dein Programm wenn dus direkt aus dem Ordner startest?

    Edit: Mit dem Konstruktor hast du recht, den gibts wirklich. Naja, man lernt nie aus.
    fujifilm bedankt sich. 

  7. #7
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.802
    Blog-Einträge
    5
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Es muss trotzdem if (in.good()) heißen.
    Besser if (in.is_open()).

    Zitat Zitat von Steiner_B Beitrag anzeigen
    Nebenbei: Ich wusste garnicht das ifstream einen Konstruktor hat der einen String akzeptiert.
    Aber auch erst seit C++11.

    Zitat Zitat von fujifilm Beitrag anzeigen
    Code cpp:
    1
    2
    3
    
        string datei = "thermdat.txt";
     
        ifstream in( "datei" ); // Textdatei einlesen
    Du versuchst hier die Datei namens datei zu öffnen. Wenn du thermdat.txt öffnen willst, musst du
    Code cpp:
    1
    
    ifstream in( datei );
    schreiben.

    Zitat Zitat von fujifilm Beitrag anzeigen
    Code cpp:
    1
    
        if (in.good())
    Code cpp:
    1
    
        if (in.is_open())

    Zitat Zitat von fujifilm Beitrag anzeigen
    Code cpp:
    1
    2
    3
    4
    5
    
            string zeile;
            while( !in.eof())// solange Dateieende nicht erreicht
     
            {
                getline( in, zeile);    // zeilenweise einlesen
    Besser:
    Code cpp:
    1
    2
    3
    
            string zeile;
            while( getline( in, zeile)) // solange Dateieende nicht erreicht
            {

    Ansonsten mal das Arbeitsverzeichnis beim Ausführen überprüfen und ggf. selber in der Konsole starten oder einen absoluten Pfad verwenden.

    Grüße,
    Matthias
    fujifilm bedankt sich. 
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  8. #8
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Moin ihr beiden,

    habe das Programm ohne die Vorschläge von Matthias direkt aus dem Ordner per "cmd-konsole" gestartet. Aber das hat leider auch nicht funktioniert.

    @Matthias:
    Habe deine Vorschläge umgesetzt; allerdings meckert er dann bei "datei":

    Code cpp:
    1
    2
    3
    
    string datei = "wasser.txt";
     
        ifstream in( datei ); // Textdatei einlesen

    Ich weiß nicht warum. Wenn ich direkt "wasser.txt" reinschreib akzeptiert er es. Allerdings funktioniert das einlesen dann auch nicht.

    In die if-Schleife kommt er auch bei
    Code cpp:
    1
    
    if (in.is_open())
    nicht rein.

    Wie funktioniert das mit dem absoluten Pfad? Das würde ich dann nämlich lernen und versuchen.


    Vielen Dank euch
    fuji
    Geändert von fujifilm (21.09.11 um 12:45 Uhr)
     

  9. #9
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    der Konstruktor akzeptiert kein string-Objekt sondern nur einen nativen C-String. Schreibe daher:
    Code cpp:
    1
    
    ifstream in( datei.c_str() ); // Textdatei einlesen

    Ein absoluter Pfad ist eine vollständige Pfadangabe, beginnend mit dem Laufwerk. Also statt "wasser.txt" verwendet man "c:/irgendwas/hier/dort/wasser.txt".

    Gruß
    MCoder
    fujifilm bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  10. #10
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Moin,

    @MCoder: Super, zwei neue Sachen auf einen Schlag gelernt.

    Aber es funktioniert leider immer noch nicht.
    Beim builden kommt nur ein Warning, wenn ich das Programm ausführe, kommt er einfach nicht in die if-schleife.
    Ich hau jetzt nochmal den kompletten Quellcode hierrein, vllt. übersehe ich ja was:

    Code cpp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    
    #include<iostream>
    #include<cmath>
    #include<fstream>
    #include<string>
    #include<sstream>
     
    using namespace std;
     
    int main()
    {
        //double NasaKoeff [7][10];
        int a = 1;
        string datei = "E:\Julius\Programme\Wascana\Workspace\Temperatur\thermdat.txt";
     
        ifstream in(datei.c_str()); // Textdatei einlesen
        cout<<"test"<<endl;
        if (in.is_open())
        {
            cout<<"alles klappt";
            string zeile;
            while( !in.eof())// solange Dateieende nicht erreicht
     
            {
                getline( in, zeile);    // zeilenweise einlesen
                cout<<zeile<<endl;
                cout<<a<<endl;
                a++;
            }
        }
        else
        {
        cout <<"Leider ist beim lesen der Datei thermdat.txt ein Fehler aufgetreten";
        }
     
    return 0;
    }

    Den Pfad habe ich übrigens aus dem Explorer kopiert, daran sollte es nicht liegen.
     

  11. #11
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Hallo,

    wenn du Backslashes verwendest, dann müssen diese in C/C++ gedoppelt werden, weil der Compiler dieses Zeichen sonst als Einleitung für eine ESC-Sequenz interpretiert.

    Also so:
    Code cpp:
    1
    
    string datei = "E:\\Julius\\Programme\\Wascana\\Workspace\\Temperatur\\thermdat.txt";

    Alternativ könnte man bei Pfadangaben auch Slashes ( / ) verwenden, was noch den Vorteil hat, dass sie auch auf anderen Plattformen (Linux) funktionieren.

    Gruß
    MCoder
    fujifilm bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  12. #12
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Hi MCoder,

    habe das verbessert und das warning tritt nun nicht mehr auf. Allerdings schafft er es immernoch nicht in die if-schleife.

    Kann das am Dateieninhalt liegen?

    Viele Grüße
    fuji
     

  13. #13
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.448
    Das Öffnen der Datei sollte erstmal unabhängig vom Dateiinhalt funktionieren. Wenn du sicher bist, dass der Pfad stimmt, fällt mir gerade nur noch ein, dass es vielleicht ein Problem mit Leserechten in dem Verzeichnis sein könnte.

    Gruß
    MCoder
    fujifilm bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  14. #14
    fujifilm fujifilm ist offline Mitglied
    Registriert seit
    Sep 2011
    Beiträge
    19
    Moin an alle,

    @MCoder: Jap, daran lags. Hab den Inhalt der Datei in eine neue kopiert und schon hat es funktioniert.

    @all: Vielen Dank für eure Hilfe. Auf jede Frage eine Antwort bekommen. Superforum!

    Gruß
    fuji

    EDiT: Fehler der hierbei noch passieren kann ist, dass die Datei datei.txt heißt; bzw. in Wahrheit dann: datei.txt.txt
    Falls jemand hier mal wieder vorbeischaut
    Geändert von fujifilm (23.09.11 um 12:17 Uhr)
     

  15. #15
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von Steiner_B Beitrag anzeigen
    Versuch mal statt
    Code cpp:
    1
    
    if (in)
    folgendes:
    Code cpp:
    1
    
    if (in.good())
    Das bedeutet übrigens exakt dasselbe.

    Gruß
    fujifilm bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. Problem beim Einbinden einer swf-Datei
    Von guenter024 im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 18.06.09, 13:03
  2. Antworten: 2
    Letzter Beitrag: 04.05.07, 18:23
  3. Einbinden einer css-Datei
    Von peter333 im Forum CSS
    Antworten: 3
    Letzter Beitrag: 29.12.06, 23:31
  4. Einbinden einer css-Datei
    Von peter333 im Forum HTML & XHTML
    Antworten: 3
    Letzter Beitrag: 29.12.06, 23:31
  5. Antworten: 1
    Letzter Beitrag: 28.05.04, 16:15

Stichworte