Werte aus Datei in Array speichen??????



  • moinsen,

    ich hab folgendes Problem, und zwar hab ich eine Datei wo x und y koordinaten enthlaten sind, nun möchte ich diese auslesen und in array speichern davor müßte ich sie aber noch konvertieren, nun weiss ich aber nicht wie ich an die sache ran gehen soll.
    Würd mich über einen kleines code beispiel freuen

    danke im voraus



  • Hallo,
    Um die verschiedenen Koordinaten einzulesen, bietet es sich an, eine Struktur für selbige zu schreiben:

    struct coord
    {
        size_t m_x;
        size_t m_y;
        coord(size_t x = 0, size_t y = 0) m_x(x), m_y(y) {}
    
        istream& operator>>(istream& is, coord& rhs)
        {
            is >> rhs.m_x >> rhs.m_y;
            return is;
        }
    };
    

    Wenn deine Datei den Folgenden Aufbau hat, ist das Einlesen nun relativ simpel:

    x_koordinate1 y_koordinate1
    x_koordinate2 y_koordinate2
    ...
    

    Beispiel: (Ungetestet)

    #include <algorithm> // für std::copy()
    #include <iterator> // istream_iterator.
    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        vector<coord> coords;
        ifstream i("inputfile.txt");
        if(i)
        {
            copy(istream_iterator<coord>(i), istream_iterator<coord>(), back_inserter(coords))
            /* der std::vector coords enthält nun die Koordinaten aus der Datei namens Inputfile */
        }
        else
            // Fehler beim öffnen.
    }
    

    Gruß Caipi



  • Inhalt der Datei coords.dat

    1,2 4,2 5,4 -1,3 -4,24
    

    Code zum lesen

    #include <iostream>
    #include <fstream>
    
    // Koordinaten Struktur
    struct coord
    {
      int x;       
      int y;
    };
    
    // operator >> für coord ( liest jeweils eine Koordinate ein )
    std::istream & operator>>( std::istream & is , coord & cp )
    {
       // um das trennzeichen zu lesen
       char c;
       // erst ein x lesen dann ein trennzeichen dann ein y 
       is >> cp.x >> c >> cp.y;
       // is zurückgeben
       return is;
    }
    
    int main()
    {
       // Koordinaten datei öffnen
       std::ifstream ifs("coords.dat");
       // Array mit 10 elementen 
       coord arr[10];
       // Damit wir wissen wieviele elemente es waren zählen wir mit
       int cnt = 0;
       // wird entweder bis 10 ausgeführt oder bis ein fehler beim lesen aufgetreten ist ( z.b. wenn eof gelesen wird )
       for( cnt = 0; cnt < 10 && (ifs.good()) ; ++cnt)
          ifs >> arr[cnt];
       // Nun wissen wir das es cnt - 1 elemente gibt, und die geben wir aus:
       for( int i = 0; i < cnt-1; ++i )
          std::cout << arr[i].x   << "/" << arr[i].y << std::endl;
    }
    

    // Edit: da war Caipi wohl schneller 🙂



  • Meine Datei sieht folgerndermaßen aus!!!!

    NAME : w9
    DIMENSION : 9
    EDGE_WEIGHT_TYPE : EUC_2D
    NODE_COORD_SECTION
    1 20833.3333 17100.0000
    2 20900.0000 17066.6667
    3 21300.0000 13016.6667
    4 21600.0000 14150.0000
    5 21600.0000 14966.6667
    6 21600.0000 16500.0000
    7 22183.3333 13133.3333
    8 22583.3333 14300.0000
    9 22683.3333 12716.6667



  • vector<coord> Punkte;
    string line;
    getline(file,line);
    //Name aus 'line' extrahieren
    getline(file,line);
    //Dimension extrahieren
    getline(file,line);
    //Typ extrahieren
    getline(file,line);
    if(line=="NODE_COORD_SECTION")
      while(file)
      {
        int num;double x,y;
        file>>num>>x>>y;
        Punkte.push_back(coord(x,y));
      }
    

    (die ersten paar Befehle lesen den Header-Bereich zeilenweise aus - die dortigen Daten mußt du anschließend noch interpretieren (eventuell auch in einer Schleife mit Überprüfung, wenn sich die Anordnung ändern kann), in der while-Schleife wird jeweils eine Zeile der COORD_SECTION gelesen und die y/x-Werte in einen Vektor gepackt)


Anmelden zum Antworten