Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Στο παρακάτω κώδικα για ενα PCD parser μου επιστρέφει σκουπίδια. Αν μπορεί καποιος να βρει τι πάει λάθος.

#include <cstring>
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>

void parsePCD(const std::string &filename);

int main(int argc, char **argv) {
    if (strcmp(argv[1], "") == 0)
        std::cerr << "Μissing PCD file argument\n";
    else {
        std::string filename(argv[1]);
        parsePCD(filename);
    }

    return 0;
}

void parsePCD(const std::string &filename) {
    std::string buffer;
    std::ifstream source;
    source.open(filename);
    const std::string header_end = "DATA ascii";
    float x_tmp, y_tmp, z_tmp;
    num = 0;

    std::cout << "Parsing PCD started.\n";

    do { // Skip PCD header
        std::getline(source, buffer);
        if (buffer.find("POINTS") != std::string::npos) {
            num = std::stoi(buffer.substr(buffer.find_last_of("POINTS") + 1));
            std::cout << "PCD number of points: " << num << std::endl;
        } else if (buffer.find(header_end) != std::string::npos)
            std::cout << "PCD header successfully skipped!\n";

    } while (buffer.find(header_end) == std::string::npos);

    while (std::getline(source, buffer)) { // Parse PCD x, y, z fields
        std::stringstream slicer;
        slicer >> x_tmp >> y_tmp >> z_tmp;
        std::cout << x_tmp << " " << y_tmp << " " << z_tmp << "\n";
    }

    std::cout << "Parsing PCD ended.\n";
}

Το PCD file έχει την παρακάτω μορφή:

# .PCD v.7 - Point Cloud Data file format
VERSION .7
FIELDS x y z
SIZE 4 4 4
TYPE F F F
COUNT 1 1 1
WIDTH 5
HEIGHT 1
VIEWPOINT 0 0 0 1 0 0 0
POINTS 5
DATA ascii
-0.063141 0.152896 -0.009314
0.010250 0.076696 -0.032355
-0.061584 0.155311 -0.022582
-0.052901 0.114056 -0.016235
-0.067758 0.169960 -0.032616

 

  • Moderators
Δημοσ. (επεξεργασμένο)

Άκυρο γιατί όλο βλακείες γράφω.

Έλα σ' έφτιαξα.

std::stringstream slicer(buffer);

Προσπαθούσες να πάρεις τιμές από άδειο stringstream. Επίσης δεν έχεις δηλώσει τύπο στο num.

Επεξ/σία από Kercyn
Δημοσ.
3 hours ago, Kercyn said:

Άκυρο γιατί όλο βλακείες γράφω.

Έλα σ' έφτιαξα.


std::stringstream slicer(buffer);

Προσπαθούσες να πάρεις τιμές από άδειο stringstream. Επίσης δεν έχεις δηλώσει τύπο στο num.

Είσαι άρχοντας!

(το num το έχω δηλώσει στον full κώδικα, απλά ξέχασα να το κάνω paste στο stripped down παράδειγμα εδώ)

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...