txt datei einlesen und bearbeiten in c++



  • Hallo,

    ich möchte eine txt datei, die aus zwei Spalten und n Zeilen besteht(x und Y Koordinaten) einlesen und als Arrey ausgeben. Einlesen klappt bei mir, aber mit der Ausgabe komme ich nicht klar.

    Gewünschte ausgabe ist:

    XYKoords xy[] = { 
             XYKoords(3,6),
             XYKoords(4,9),
       }
    

    wie konnte ich am besten vorgehen.

    Danke fü Eure Tipps!



  • Zeig uns doch mal was du bisher schon hast und wo deine Probleme dabei sind.



  • babadu schrieb:

    aber mit der Ausgabe komme ich nicht klar.

    Dann zeig mal deinen bisherigen Code her, dann können wir besser beurteilen, was nicht funktioniert.

    EDIT:
    Lol, pumuckl, da warst du wohl 4 Sekunden schneller 😃 .


  • Mod

    Deine Frage ist leider etwas unpräzise, da sich nicht ersehen lässt, wo überhaupt dein Problem liegt, deshalb rate ich mal, welches Wissen dir fehlt:

    std::cout sollte bekannt sein: http://www.cplusplus.com/reference/iostream/cout/

    Für Formatierung von Ausgaben ein paar ganz einfache Tricks:
    * '\n' ist das newline-Zeichen, fängt eine neue Zeile an.
    * '\t' ist das Tabulator-Zeichen, kann benutzt werden, um Tabellen auszurichten

    Für ausgefallenere Formatierungen gibt es noch Stream-Manipulatoren, die meisten davon werden in <iomanip> deklariert: http://www.cplusplus.com/reference/iostream/manipulators/



  • Btw: Vielleicht ist std::map<> das, was du suchst... ansonsten ist dein Code ziemlich unsagend...



  • hi,

    ich danke Euch für die Antwort.

    Mein Problem ist, dass ich die Inhalt der Datei nicht in einer array speichern kann.

    Ich bin programmieranfänger und hoffentlich erscheint meine Frage nicht zu diletantisch.

    Danke im Voraus



  • fKoords, Koords, CPoint? Was jetzt? Mach den Code mal konsistent, der würde sich so nicht mal kompilieren lassen!?



  • #include <iostream>
    #include <fstream>
    #include <vector>
    //#include <cmath> <-Brauchst du doch gar nicht
    
    /*
    class Koords
    {
      public:
        double x;
        double y;
    
         Koords()
        :   x(0),
            y(0)
        {}
    
        Koords(double x, double y)
        :   x(x),
            y(y)
        {}
    
        void set(double x, double y)
        {
            this->x = x;
            this->y = y;
        }
    
        Koords& operator -=(Koords const & p)
        {
            this->x -= p.x;
            this->y -= p.y;
            return *this;
        }
    
       Koords& operator +=(Koords const & p)
        {
            this->x += p.x;
            this->y += p.y;
            return *this;
        }
    
        Koords operator+(Koords const & p2) const
        {
            return CPoint(x+p2.x, y+p2.y);
        }
    
        Koords operator-(Koords const & p2) const
        {
            return Koords(x-p2.x, y-p2.y);
        }
    };
    */
    
    ///// Alignment utner MSVS-C++ beachten /////
    struct coord
    {
    	coord()
    	{
    		x = 0;
    		y = 0;
    	}
    
    	int x, y;
    };
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        //char zeile[1024]; Einfach mal auf gut Glück 1024Bytes zu reservieren ist nicht toll, dass
    	                  //sind immerhin 0,9KB
    	std::vector<coord> Coords;
    
        std::ifstream fKoords;                        
        Koords.open("../test.txt", std::ios_base::in);
    
        if (fKoords.good())
        {
            fKoords.seekg(0L, std::ios::beg);
    		std::string line;
    
            while (! fKoords.eof())
            {
               getline( fKoords, line );
               //Je nach Dateiformat den std::string bearbeiten
    		   /*coord ocoord;
    		   ocoord.x = ::atoi( line[0].c_str( ) );
    		   ""
    
    		   Coord.push_back( ocoord );*/
            }
        }
        else
        {
            std::cout << "Datei nicht gefunden." << std::endl;
        }
    
        return 0;
    }
    

    Die Bezeichnungen gefallen mir nicht wirklich. Ansonsten gib uns ein vernünftiges Beispiel, wie die Datei aussieht.



  • Neue Code(lässt sich kompilieren, aber hat keine Ausgabe)



  • Funktioniert doch. test.txt dort hin wo die .vcproj ist (Wenn du Visual Studio nutzt und das Programm von dort heraus startest), zwei Zeilen reingeschrieben und sie werden ausgegeben! ...



  • Kóyaánasqatsi schrieb:

    Die Bezeichnungen gefallen mir nicht wirklich. Ansonsten gib uns ein vernünftiges Beispiel, wie die Datei aussieht.



  • die datei sieht so aus:

    20      5
       75      35
       50      67
       42      43
       32      45
       ...
    


  • Ja, und genau das wird mit dem Code in der Konsole auch ausgegeben!
    Und was nun? Lass dir doch nicht alles aus der Nase rausziehen!



  • Frickl0r schrieb:

    Ja, und genau das wird mit dem Code in der Konsole auch ausgegeben!
    Und was nun? Lass dir doch nicht alles aus der Nase rausziehen!

    Ich denke, dass er die Daten verteilt auf einen Vektor haben möchtet. Allerdings sitzen wir noch morgen hier, wenn uns nicht klar sagt, was er nun haben und tun möchte.



  • hallo,

    ich möchte Euch für die Hilfe danken.

    ich habe eine Funktion f(Koords *p, int anzP) - in dem ich versuche mahtematisches Problem zu lösen, eine Klasse Koords und eine Text datei mit Koordinaten Liste.

    Ich versuche die text Datei einzulesen und die Koordinaten und Anzahl der Punkte(anzahl der Zeilen) meine Funktion f zu übergeben.

    Bei mir kommt jetzt ehler : "getline": Bezeichner wurde nicht gefunden.



  • Du hast noch eine Funktion? Zeig mal her!

    babadu schrieb:

    Bei mir kommt jetzt ehler : "getline": Bezeichner wurde nicht gefunden.

    Müsstest die string-lib schon inkludieren.



  • std::ifstream coordFile("test.txt");
    
    if(coordFile)
    {
    	std::string temp;
    
    	while(std::getline(coordFile, temp))
    	{
    		std::istringstream iss(temp);
    
    		int x, y;
    
    		iss >> x;
    		iss >> y;
    
    		std::cout << "X: " << x << " / Y: " << y << std::endl;
    	}
    }
    else
        std::cout << "Datei nicht geoeffnet!" << std::endl;
    
    coordFile.clear(); // Falls Wiederverwendung von "coordFile"
    coordFile.close();
    

    Statt "int x, y;" legst du halt ein Koord-Objekt an, beschreibst es mit dem >> Operator von std::istringstream und schiebst es in eine Liste oder whatever.



  • hier eine Ausschnit aus meiner Datei:

    double f(Koords *p, int n)
        {
         //Summe alle Euklidische Abstände
         for (int k = 0; k < n; k ++ )
         {
              double abst += Koords::dist(p[k], p[k-1]);
         }
         return 0;
         }
    


  • Ja, und? Mein Code sollte dir geholfen haben.



  • vielen Dank für Eure Hilfe, habt mir sehr geholfen. Kommen ein Paar Fehlermeldungen, aber ich werde versuchen Damit selbst klar zu kommen.


Anmelden zum Antworten