Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool ReadPoints(std::string const& fileName, std::vector<Point3D>& xyz_vector)
- {
- if (ValidateFile(fileName))
- {
- //do things
- std::ifstream file{ fileName };
- if (!file.is_open())
- {
- std::cerr << cErrOpen;
- return false;
- }
- try //der Scanner wirft im Fehlerfall eine Exception -> try-catch-block
- {
- bool header = false;
- size_t count = 0;
- pfc::scanner scan;
- scan.register_keyword(cHeader); //register keyword for header
- scan.set_istream(file);//Anlegen des Scanners mit gleichzeitigem Lesen des Eingabestromes in einen internen Puffer. Das erste Symbol wird gescannt.
- if (scan.is_keyword() && (scan.next_symbol()).is(cEqChar))
- {
- header = true;
- scan.next_symbol();
- count = scan.get_integer();
- xyz_vector.clear();
- }
- scan.next_symbol();//Weiterschalten auf das naechste Symbol
- size_t i = 0;
- char flag = 1;
- while (scan.has_symbol() && !scan.is_eof())
- {
- Point3D tmp;
- if (scan.is(cBrOpenChar))
- {
- scan.next_symbol();
- }
- else if (scan.is(cBrCloseChar))
- {
- scan.next_symbol();
- }
- else if (scan.is(cCommaChar))
- {
- scan.next_symbol();
- }
- else if (scan.is(cNegChar))
- {
- flag = -1;
- }
- else if (scan.is_integer())
- {
- tmp.x = scan.get_integer()*flag;
- do
- {
- flag = 1;
- scan.next_symbol();
- if(scan.is(cNegChar))
- {
- flag = -1;
- }
- }while (!scan.is_integer());
- tmp.y = scan.get_integer()*flag;
- do
- {
- flag = 1;
- scan.next_symbol();
- if (scan.is(cNegChar))
- {
- flag = -1;
- }
- } while (!scan.is_integer());
- tmp.z = scan.get_integer()*flag;
- xyz_vector.push_back(tmp);
- i++;
- }
- scan.next_symbol();
- }
- file.close();//Schliessen der geoeffneten Datei
- std::clog << std::endl << cFinished;
- return true;
- }
- catch (std::exception const& ex)//hier werden die Exceptions des Scanners gefangen und eine Fehlermeldung ausgegeben
- {
- std::cerr << "Error: " << ex.what() << std::endl;
- file.close();//Schliessen der geoeffneten Datei
- return false;
- }
- }
- else
- {
- std::cerr << std::endl << cFinished;
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement