mathiaspl20

Untitled

Apr 17th, 2020
201
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bool ReadPoints(std::string const& fileName, std::vector<Point3D>& xyz_vector)
  2. {
  3.     if (ValidateFile(fileName))
  4.     {
  5.         //do things
  6.         std::ifstream file{ fileName };
  7.         if (!file.is_open())
  8.         {
  9.             std::cerr << cErrOpen;
  10.             return false;
  11.         }
  12.  
  13.         try //der Scanner wirft im Fehlerfall eine Exception -> try-catch-block
  14.         {
  15.             bool header = false;
  16.             size_t count = 0;
  17.             pfc::scanner scan;
  18.  
  19.             scan.register_keyword(cHeader); //register keyword for header
  20.  
  21.             scan.set_istream(file);//Anlegen des Scanners mit gleichzeitigem Lesen des Eingabestromes in einen internen Puffer. Das erste Symbol wird gescannt.
  22.  
  23.             if (scan.is_keyword() && (scan.next_symbol()).is(cEqChar))
  24.             {
  25.                 header = true;
  26.                 scan.next_symbol();
  27.                 count = scan.get_integer();
  28.                 xyz_vector.clear();
  29.             }
  30.             scan.next_symbol();//Weiterschalten auf das naechste Symbol
  31.             size_t i = 0;
  32.             char flag = 1;
  33.             while (scan.has_symbol() && !scan.is_eof())
  34.             {
  35.                 Point3D tmp;
  36.                 if (scan.is(cBrOpenChar))
  37.                 {
  38.                     scan.next_symbol();
  39.                 }
  40.                 else if (scan.is(cBrCloseChar))
  41.                 {
  42.                     scan.next_symbol();
  43.                 }
  44.                 else if (scan.is(cCommaChar))
  45.                 {
  46.                     scan.next_symbol();
  47.                 }
  48.                 else if (scan.is(cNegChar))
  49.                 {
  50.                     flag = -1;
  51.                 }
  52.                 else if (scan.is_integer())
  53.                 {
  54.                     tmp.x = scan.get_integer()*flag;
  55.                     do
  56.                     {
  57.                         flag = 1;
  58.                         scan.next_symbol();
  59.                         if(scan.is(cNegChar))
  60.                         {
  61.                             flag = -1;
  62.                         }
  63.                     }while (!scan.is_integer());
  64.                     tmp.y = scan.get_integer()*flag;
  65.                     do
  66.                     {
  67.                         flag = 1;
  68.                         scan.next_symbol();
  69.                         if (scan.is(cNegChar))
  70.                         {
  71.                             flag = -1;
  72.                         }
  73.                     } while (!scan.is_integer());
  74.                     tmp.z = scan.get_integer()*flag;
  75.                     xyz_vector.push_back(tmp);
  76.                     i++;
  77.                 }
  78.                 scan.next_symbol();
  79.             }
  80.             file.close();//Schliessen der geoeffneten Datei
  81.             std::clog << std::endl << cFinished;
  82.             return true;
  83.         }
  84.         catch (std::exception const& ex)//hier werden die Exceptions des Scanners gefangen und eine Fehlermeldung ausgegeben
  85.         {
  86.             std::cerr << "Error: " << ex.what() << std::endl;
  87.             file.close();//Schliessen der geoeffneten Datei
  88.             return false;
  89.         }
  90.     }
  91.     else
  92.     {
  93.         std::cerr << std::endl << cFinished;
  94.         return false;
  95.     }
  96. }
RAW Paste Data