textfile in Matrix laden



  • Hi alle zusammen,

    also ich hab bis jetzt leider noch absolut null Ahnung von cpp, muss da aber jetzt so schnell wie möglich rein kommen. als aller erstes muss es schaffen eine txt.Datei einzulesen, die tab-gesteuert eine Matrix mit int in 2 Spalten enthält, allerdings weiß ich nich wie lang die is, is immer unterschiedlich.

    Hab jetzt schon heufenweise Beiträge durchgelesen, und weiß auch dass ich da fstream und so zeug verwenden muss, check das aber alles immer noch nich so ganz. Was muss ich denn da tun? und wie kann ich anschließend wieder auf die einzelnen Werte einer Zeile zugreifen?

    ich will heraus finden, welcher Punkt in der Matrix am nähesten an meinem aktuellen Punkt liegt

    also in Matlab würde das ganze bei mir so aussehen:

    Matrix = dlmread('Text.txt','*\t');
    p_aktuell = [1 2];

    for i=1:length(Matrix(:,1))
    l(i) = sqrt((p(1)-Matrix(i,1))2+(p(2)-Matrix(i,2))2);
    end

    ind_min = find(l==min(l),1,'first');

    p_nearest = Matri(ind_min,:);

    Danke schon mal im voraus...

    JP


  • Mod

    Könntest du bitte versuchen, in dialektfreien Deutsch zu schreiben? Wenn es schon ein anstrengendes Problem ist, deinen Text zu entziffern, dann mag ich gar nicht noch über dein eigentliches Problem nachdenken.



  • Wenn du die Anzahl nicht weißt, kannst du eine mitwachsende Datenstruktur verwenden, ich würde dafür einen std::vector<> verwenden. Dann liest du die Datei zeilenweise ein und verarbeitest sie.
    (für den Anfang empfehle ich dir ein gutes Tutorial oder C++ Buch (nicht von JW))



  • std::ifstream file("test.txt");
    if(!file.is_open())
      throw std::runtime_error("Could not open file!");
    
    std::vector<std::vector<double>> matrix;
    std::string line;
    while(std::getline(file, line))
    {
      std::istringstream data(line);
      std::vector<double> parsedLine;
      double curNumber;
      while( data >> curNumber )
        parsedLine.push_back(curNumber);
    
      matrix.push_back(parsedLine);
    
      if(matrix.size() > 1)
       if(matrix[matrix.size() - 1] != matrix[matrix.size() - 2])
         throw std::runtime_error("Row length mismatch!");
    }
    

    So ähnlich könnte man es machen, eben just4fun in den Browser getippt. 😉


Anmelden zum Antworten