当前位置: 首页>>代码示例>>C++>>正文


C++ TextStream::nextLineAsTokens方法代码示例

本文整理汇总了C++中TextStream::nextLineAsTokens方法的典型用法代码示例。如果您正苦于以下问题:C++ TextStream::nextLineAsTokens方法的具体用法?C++ TextStream::nextLineAsTokens怎么用?C++ TextStream::nextLineAsTokens使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在TextStream的用法示例。


在下文中一共展示了TextStream::nextLineAsTokens方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: parseCoordinates

bool Cube::parseCoordinates(TextStream& textStream, unsigned nAtoms) 
{
   Data::Geometry* geometry(new Data::Geometry);
   bool ok;
   unsigned atomicNumber;
   qglviewer::Vec position;

   for (unsigned i = 0; i < nAtoms; ++i) {
       QStringList tokens(textStream.nextLineAsTokens());
       if (tokens.size() != 5) return false; 
       atomicNumber = tokens[0].toUInt(&ok);  if (!ok) goto error;
       position.x = tokens[2].toDouble(&ok);  if (!ok) goto error;
       position.y = tokens[3].toDouble(&ok);  if (!ok) goto error;
       position.z = tokens[4].toDouble(&ok);  if (!ok) goto error;
       geometry->append(atomicNumber, position);
   } 

   geometry->scaleCoordinates(m_scale);
   geometry->computeGasteigerCharges();
   m_dataBank.append(geometry);
   return true;

   error:
      QString msg("Incorrect format on line ");
      msg += QString::number(textStream.lineNumber());
      delete geometry;
      return false;
}
开发者ID:autodataming,项目名称:IQmol,代码行数:28,代码来源:CubeParser.C

示例2: readEfpFragmentSection

void QChemInput::readEfpFragmentSection(TextStream& textStream)
{
   // Check for an existing list from the $molecule section
   Data::EfpFragmentList* efps(0);
   QList<Data::EfpFragmentList*> lists = m_dataBank.findData<Data::EfpFragmentList>();
   if (lists.isEmpty()) {
      efps = new Data::EfpFragmentList;
      m_dataBank.append(efps);
   }else {
      efps = lists.last();
   }

   QString msg("Invalid $efp_fragments format on line ");
   QStringList tokens;
   bool ok, allOk;
   int count(1);

   while (!textStream.atEnd()) {
      tokens = textStream.nextLineAsTokens();

      if (tokens.size() == 1 && tokens[0].contains("$end", Qt::CaseInsensitive)) {
         break;

      }else if (tokens.size() < 7) {
         Data::EfpFragment* efp(0);
         if (count <= efps->size()) {
            efp = efps->at(count-1);
         }else {
            efp = new Data::EfpFragment;
            efps->append(efp);
         }
         efp->setName(tokens[0]);
 
      }else {
         allOk = true;
         QString name(tokens[0]);
         double x, y, z, a, b, c;
         if (allOk) x = tokens[1].toDouble(&ok);  allOk = allOk && ok;
         if (allOk) y = tokens[2].toDouble(&ok);  allOk = allOk && ok;
         if (allOk) z = tokens[3].toDouble(&ok);  allOk = allOk && ok;
         if (allOk) a = tokens[4].toDouble(&ok);  allOk = allOk && ok;
         if (allOk) b = tokens[5].toDouble(&ok);  allOk = allOk && ok;
         if (allOk) c = tokens[6].toDouble(&ok);  allOk = allOk && ok;

         if (allOk) {
            efps->append(new Data::EfpFragment(name, qglviewer::Vec(x,y,z), a, b, c));
         }else {
            m_errors.append(msg += QString::number(textStream.lineNumber()));
         }
      }
      ++count;
   }
}
开发者ID:nutjunkie,项目名称:IQmol,代码行数:53,代码来源:QChemInputParser.C

示例3: parse

bool ExternalCharges::parse(TextStream& textStream) 
{
   int max(INT_MAX);
   bool allOk(true), isDouble;
   bool maxSet(false), invalidFormat(false);
   double x, y, z, q;
   QStringList tokens;
   Data::PointChargeList* charges(new Data::PointChargeList);

   while (!textStream.atEnd() && charges->size() < max) {
      tokens = textStream.nextLineAsTokens();
      if (tokens.size() >= 4) {
         x = tokens[0].toDouble(&isDouble);  allOk = allOk && isDouble;
         y = tokens[1].toDouble(&isDouble);  allOk = allOk && isDouble;
         z = tokens[2].toDouble(&isDouble);  allOk = allOk && isDouble;
         q = tokens[3].toDouble(&isDouble);  allOk = allOk && isDouble;

         if (allOk) {
            charges->append(new Data::PointCharge(q, qglviewer::Vec(x,y,z)));
         }else {
            invalidFormat = true;
            break;
         }
      }else if (tokens.size() >= 1) {
         if (tokens.first().contains("$end", Qt::CaseInsensitive) || maxSet) {
            break;
         }else {
            max = tokens[0].toInt(&maxSet);
         }
      }
   } 

   if (maxSet && charges->size() != max) {
      if (invalidFormat) {
         QString msg("Invalid format on line ");
         m_errors.append(msg += QString::number(textStream.lineNumber()));
      }else {
         m_errors.append("End of stream encountered");
      }
      delete charges;
   }else if (charges->isEmpty()) {
      m_errors.append("No charges found");
      delete charges;
   }else {
      m_dataBank.append(charges);
   }

   return m_errors.isEmpty();
}
开发者ID:autodataming,项目名称:IQmol,代码行数:49,代码来源:ExternalChargesParser.C

示例4: readMoleculeSection

void QChemInput::readMoleculeSection(TextStream& textStream)
{
   QString msg("Invalid $molecule format on line ");
   int charge(0);
   unsigned multiplicity(1);
   bool ok;

   // First line can only contain the charge and multiplicity or 'read'
   QString line(textStream.nextLine());
   line = line.replace(',', ' ');
   QStringList tokens(TextStream::tokenize(line));

   switch (tokens.size()) {
      case 0:  // Error
         m_errors.append(msg + QString::number(textStream.lineNumber()));
         return;
      break;

      case 1:  // Could be reading in previous geometry
         if (tokens[0].contains("read", Qt::CaseInsensitive)) {
            if (m_geometryList->size() > 0) {
                // copy previous geometry
                Data::Geometry* geometry(new Data::Geometry(*(m_geometryList->last()))); 
                m_geometryList->append(geometry);
             }else {
				// We assume we are reading an input section from
				// an output file, so there is no new geometry.
             }
          }else {
             m_errors.append(msg + QString::number(textStream.lineNumber()));
          }
          return;
      break;

      default:
         charge = tokens[0].toInt(&ok);
         if (ok) multiplicity = tokens[1].toUInt(&ok);
         if (!ok) {
            m_errors.append(msg + QString::number(textStream.lineNumber()));
            return;
         }
      break;
   }

   // Second line could be a 'read' token or the first atom
   line = textStream.nextLine();
   // offset is passed to the CartesianCoordinates parser to give
   // an accurate line number if an error occurs.
   int offset(textStream.lineNumber()-1);

   if (line.isEmpty()) {
      m_errors.append(msg + QString::number(textStream.lineNumber()));
      return;
   }

   // Special case: read previous geometry
   if (line.contains("read", Qt::CaseInsensitive)) {
      if (m_geometryList->size() > 0) {
         // copy last geometry
         Data::Geometry* geometry(new Data::Geometry(*(m_geometryList->last()))); 
         geometry->setChargeAndMultiplicity(charge, multiplicity);
         m_geometryList->append(geometry);
      }else {
         m_errors.append(msg + QString::number(textStream.lineNumber()));
      }
      return;
   }

   // Special case: EFP only fragments
   if (line.contains("--")) {
	  // Check for an existing list which may have been created if the
	  // $efp_fragments section was parsed before $molecule.
      Data::EfpFragmentList* efps(0);
      QList<Data::EfpFragmentList*> lists = m_dataBank.findData<Data::EfpFragmentList>();
      if (lists.isEmpty()) {
         efps = new Data::EfpFragmentList;
         m_dataBank.append(efps);
      }else {
         efps = lists.last();
      }

      int count(1);
      while (!textStream.atEnd()) {
         tokens = textStream.nextLineAsTokens();

         if (tokens.size() == 1 && tokens[0].contains("$end", Qt::CaseInsensitive)) {
            break;
         }else if (tokens.size() == 6) {
            bool allOk(true);
            double x, y, z, a, b, c;
            if (allOk) x = tokens[0].toDouble(&ok);  allOk = allOk && ok;
            if (allOk) y = tokens[1].toDouble(&ok);  allOk = allOk && ok;
            if (allOk) z = tokens[2].toDouble(&ok);  allOk = allOk && ok;
            if (allOk) a = tokens[3].toDouble(&ok);  allOk = allOk && ok;
            if (allOk) b = tokens[4].toDouble(&ok);  allOk = allOk && ok;
            if (allOk) c = tokens[5].toDouble(&ok);  allOk = allOk && ok;

            if (allOk) {
               Data::EfpFragment* efp(0);
               if (count <= efps->size()) {
//.........这里部分代码省略.........
开发者ID:nutjunkie,项目名称:IQmol,代码行数:101,代码来源:QChemInputParser.C

示例5: parseGridAxes

int Cube::parseGridAxes(TextStream& textStream) 
{
   int nAtoms(0);
   bool ok, xOk, yOk, zOk;
   double x, y, z, dx, dy, dz;
   double thresh(1e-6);

   // origin line
   QStringList tokens(textStream.nextLineAsTokens());
   if (tokens.size() != 4) return 0;
   nAtoms = tokens[0].toInt(&ok);
   x = tokens[1].toDouble(&xOk);
   y = tokens[2].toDouble(&yOk);
   z = tokens[3].toDouble(&zOk);
   if (!(ok && xOk && yOk && zOk)) return 0;
   m_origin.setValue(x, y, z);

   // x line
   tokens = textStream.nextLineAsTokens();
   if (tokens.size() != 4) return 0;
   m_nx = tokens[0].toInt(&ok);
   dx   = tokens[1].toDouble(&xOk);
   y    = tokens[2].toDouble(&yOk);
   z    = tokens[3].toDouble(&zOk);
   if (!(ok && xOk && yOk && zOk)) return 0;
   if (std::abs(y) > thresh || std::abs(z) > thresh) goto axial_error;

   // y line
   tokens = textStream.nextLineAsTokens();
   if (tokens.size() != 4) return 0;
   m_ny = tokens[0].toInt(&ok); 
   x    = tokens[1].toDouble(&xOk);
   dy   = tokens[2].toDouble(&yOk);
   z    = tokens[3].toDouble(&zOk);
   if (!(ok && xOk && yOk && zOk)) return 0;
   if (std::abs(x) > thresh || std::abs(z) > thresh) goto axial_error;

   // z line
   tokens = textStream.nextLineAsTokens();
   if (tokens.size() != 4) return 0;
   m_nz = tokens[0].toInt(&ok); 
   x    = tokens[1].toDouble(&xOk);
   y    = tokens[2].toDouble(&yOk);
   dz   = tokens[3].toDouble(&zOk);
   if (!(ok && xOk && yOk && zOk)) return 0;
   if (std::abs(x) > thresh || std::abs(y) > thresh) goto axial_error;

   m_delta.setValue(dx, dy, dz); 

   // Check what units we are using.
   if (m_nx < 0) {
      m_scale = 1.0;
      QLOG_TRACE() << "Leaving grid data units unscaled";
   }else {
      m_scale = Constants::BohrToAngstrom;
      QLOG_TRACE() << "Scaling grid data units: Bohr -> Angstrom";
   }

   m_nx = std::abs(m_nx);
   m_ny = std::abs(m_ny);
   m_nz = std::abs(m_nz);
   m_origin *= m_scale;
   m_delta  *= m_scale;

   return nAtoms;

   axial_error:
      m_errors.append("Non-axial grid data not supported");
      return 0;
}
开发者ID:autodataming,项目名称:IQmol,代码行数:70,代码来源:CubeParser.C


注:本文中的TextStream::nextLineAsTokens方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。