Datenzugriff auf externe Datei



  • catachanfighter schrieb:

    main.cpp(4) : error C2664: 'fstream::fstream(int)' : Konvertierung des Parameters 1 von 'char [11]' in 'int' nicht moeglich

    *grübelt* Ich wußte gar nicht, daß fstream einen int-Konstruktor hat.

    *länger nachdenkt* setz' mal ein "using namespace std;" hinter die Includes (oder ein "std::" vor fstream).



  • bzw. schau einfach in die FAQ



  • so leute,

    ich hab nen neuen Versuch gestartet und der sieht wie folgt aus.

    #include <iostream.h>
    #include <fstream.h>
    main ()
    {
    int x;
    char zeile[100];
    fstream variablen ("mydata", ios::in);
    if (!variablen)
    {
    cout<< "keine Datei vorhanden!";
    return 3;
    }
    else
    {
    variablen.getline(zeile, 1);
    cout << zeile;
    cin >> x;
    }
    variablen.close();
    return 0;
    }

    Leider greift er weder auf die Zeile im File zu, noch bringt er den Fehler, wenn die Datei gar nicht existiert.
    Was mache ich flasch?

    Danke und Gruß



  • getline() erwartet als zweiten Parameter die Größe des Eingabpuffers - du liest also in der aktuellen Version nur ein Zeichen ein. Ansonsten scheint immer noch die namespace-Angabe zu fehlen.



  • @catachanfighter
    Hast du dir den angegebenen Link zur FAQ wirklich durchgelesen? Da ist das alles erklärt.



  • @braunstein
    ich habe den Link durchgelesen.
    aber wie ich bereits oben erwähnt habe bin ich noch Anfänger in c++. Mir ist auch schon sehr oft aufgefallen, dass solche Arten von Lösungen (weiterleiten eines schon bestehenden Quelltextes) pädagogisch nicht besonders hochwertig sind. Das Problem liegt einfach darin, dass jeder Programmierer einen eigenen Stil hat seine Programme zu erstellen und auch die Handhabe der verschiedenen Funktionen variiert sehr. Damit tun sich sehr viele "Newies" schwer. Darum ist es doch oft sinnvoller dem Fragendem seinen Quelltext zu ergänzen oder zu korrigieren.
    Das FAQ beschreibt wie ich entweder Strings in einen Vektor einlade oder aus Binärdateien lese...hat irgendwie beides nichts mit meinem Problem zu tun. Natürlich kommt jetzt gleich wieder die Aussage, ich soll diese Beispiele auf mein Problem zuschneiden und abändern. Aber genau das hab ich doch gemacht und es funktioniert eben leider nicht. Darum meine erneute Anfrage.
    Des weiteren habe ich auch die in diesem Threat vorgeschlagenen Quelltexte verwendet aber wie bereits erwähnt brachte kein Beispiel überhaupt ein compilierbares Ergebnis mit sich.

    Gruß



  • Du kannst alles was in der FAQ steht so auf dein Problem anwenden.
    Mal als Beispiel

    #include <iostream> // ohne .h
    #include <ifstream> //ohne .h
    #include <string> // für string
    using namespace std; //Namensraum std öffnen
    int main ()  //Kosmetik
    {
    int x;
    string zeile; // statt char zeile[100];
    ifstream variablen ("mydata"); // bei ifstream kann ios::in entfallen
    if (!variablen)
    {
      cout<< "keine Datei vorhanden!";
      return 3;
    } else
    {
      getline(variablen,zeile); // zeile einlesen
    


  • Also ich hab den Quelltext genommen und zu mir ins programm kopiert.
    aber er beklagt sich (wie bei allen anderen Beispielen auch) über die Zeile

    using namespace std; //Namensraum std öffnen

    und zwar folgendermaßen

    main.cpp(27) : error C2871: 'std' : Existiert nicht oder ist kein Namensraum

    des weiteren gibt es noch fünf andere Errors die gemeldet werden.
    ergänzt wurde der quelltext nur um folgende zeilen

    cout << zeile;
    }
    return 0;
    }



  • hi catafighter,
    ich kann dich nur zu gut verstehen da ich selber noch in den grünen Stiefeln
    stehe (in bezug auf C++)
    Du willst also wissen wie man aus einer externen Textdatei einen Wert nimmt und den der Variable in deiner .cpp Datei zuweist.
    Ich könnte dir so auf anhieb nicht weiterhelfen - wegen den grünen Stiefel -
    aber wenn du mir deine eMail adresse gibst könnte ich dir ein sehr gutes Tutorial zu diesem Thema schicken.
    Ich habe das tut noch nicht ganz durchgearbeitet aber so wie das bis jetzt aussieht gibt es gerade in C++ eine sehr komfortable und einfache Lösung deines Problems.
    Der Autor macht es irgendwie einfach mit cin und cout.... aber wie gesagt ich habs noch nicht ganz durch und auch noch nicht verstanden.
    Aber wenn Interesse besteht- dann kein prob.

    #include < schöneGrüße >



  • Hallo socco,

    häng einfach an meinen nick ein @gmx.de

    Danke vielmals!

    Gruß



  • Und wenn es nicht mit getline funktionieren sollte, gibt es auch noch eine andere, nicht aber schönere Möglichkeit den Text auszulesen:

    ##pragma argsused
    #include <iostream>
    #include <fstream>
    #include <conio.h>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
         string zeichen;
         ifstream DataRead ("test.txt");
         if (!DataRead)
         {
              cout << "Keine Datei vorhanden!";
              return 0;
         }
         else
         {
              while (!DataRead.eof())  // Wenn das Dateiende nicht erreicht ist
              {
                   zeichen = DataRead.get();     // Zeichenweise ein Zeichen in den
                   cout << zeichen;              // String schreiben
              }
          }
          DataRead.close();
          getch();
         return 0;
    }
    


  • ich denke es liegt einfach daran das die Variable "c" ein integer (int) ist und eigentlich ein char sein sollte.


Anmelden zum Antworten