Spalte aus Matrix in externer Datei einlesen



  • Hallo,

    Ich habe eine Matrix in einer externen Datei 'test.dat':
    -1.929481e+01 0.000000e+00 -1.929481e+01 1.593886e+00 2.817968e+00 7.629167e-02
    1.814395e+01 0.000000e+00 1.814395e+01 2.634391e+00 5.391297e+00 4.073703e-02
    .
    .
    usw.

    Jetzt möchte ich beim Programmstart die Spalte abfragen die eingelesen werden soll. Den Rest brauche ich für das Programm nicht.
    Ich habe folgendes Programm gefunden:

    #include <iostream>
    #include <fstream>
    #include <iomanip>
    #include "math.h"
    #include <stdlib.h>
    #include <vector>
    #include <sstream>
    
    using namespace std;
    
    int main() {
      const char* filename = "test.dat";
      ifstream inFile(filename);
    
      if(!inFile) {
        cout << endl << "Failed to open file " << filename<<endl;
        return 1;
      }
    
      double n = 0;
      while(!inFile.eof()) {
        inFile >> n;
        cout << setw(6) << n;
      }
      cout << endl;
      return 0;
    }
    

    Meine Fragen:
    -Das Programm gibt bisher nur '0' aus. Liegt es am Dateityp 'double'?
    -Wie kann ich meine Idee umsetzen zB nur die Spalte 3 oder 5 einzulesen?

    Und noch interessantes Zusatzwissen:
    -Wie kann ich beim einlesen wissen, dass ich am Ende einer Zeile bin?
    -Oder wie kann ich untersuchen wie viele Zeilen die 'Matrix'
    hat?

    Ich steig leider momentan noch nicht durch diese fstream,ostream usw. Geschichte. Wenn jemand eine verständliche Einführung hat, bitte her damit 🙂

    Grüße,

    Marius



  • Was denn, geht doch alles ? 😕
    Oder ist die Datei vielleicht keine Textdatei ?

    Wie kann ich meine Idee umsetzen zB nur die Spalte 3 oder 5 einzulesen?
    

    Alle anderen Zeilen ignorieren.

    Wie kann ich beim einlesen wissen, dass ich am Ende einer Zeile bin?

    Entweder du kennst die Größe der Matrix (dann sollte es ja wohl klar sein) oder wenn eine neue Zeile ('\n') kommt.

    Oder wie kann ich untersuchen wie viele Zeilen die 'Matrix'
    hat?

    Entweder du kennst die Größe der Matrix oder du ließt einfach bis zum Ende der Datei.



  • Bisher wird ja nur alles eingelesen, es wird links oben angefangen und rechts unten aufgehört.

    Ich möchte aber:
    1. Eintrag Spalte n
    2. Eintrag Spalte n
    ..

    Ich schätze du sagst dass ich so wie bisher durch die Liste gehen muss.
    Um die Anzahl der Spalten(und Zeilen) zu bekommen mache ich also vorher noch einen Durchlauf in dem ich die Anzahl der Elemente zähle und eine Abfrage mache wann ein "\n" kommt.

    Wie mache ich diese Abfrage?
    Und mein Problem dass bisher nur nullen ausgegeben werden besteht noch..

    EDIT: Kann mir denn bitte bitte bitte jemand helfen?
    Ich habe jetzt verstanden dass mit dem Operator ">>" immer Wort für Wort eingelesen wird.
    Ich muss also in der Schleife eine Abfrage machen:

    while(!inFile.eof()) {
        inFile >> n;
        cout << setw(6) << n;
        if(??){cout<<endl;}
      }
    

    Bei dem ?? muss ich als irgendwie schauen ob es mit einem /n endet. Ich weiß nur nicht wie!

    Ich kann doch nicht der erste sein der so grundlegende Sachen vorhat oder?


Log in to reply