示例#1
0
///////////////////////////////////////////////////////////////////////////////
/// \brief Reads the contents of the name file
///////////////////////////////////////////////////////////////////////////////
bool LgrFileReader::impl::ReadFile ()
{
  EReadAsciiFile fp(m_inputFile);
  if (!fp.OpenFile())
    return false;

  try
  {
    CStr line;

    // LINE 0: [#Text] comment
    bool isComment;
    do
    {
      fp.GetLine(&line);

      if (!line.IsEmpty() && line.at(0) == '#')
        isComment = true;
      else
        isComment = false;
    } while (isComment);

    // LINE 1: LGR
    CStr firstItem;
    if (!fp.ReadData(firstItem) || firstItem != "LGR")
      return false;

    // LINE 2: NGRIDS
    int ngrids;
    fp.GetLine(&line);
    if (!fp.ReadData(ngrids) || ngrids < 1)
      return false;

    // LINE 3: NAME FILE
    CStr nameFile;
    fp.GetLine(&line);
    if (!fp.ReadData(nameFile) || nameFile == "")
      return false;
    m_files.push_back(nameFile);

    // LINE 4: GRID STATUS
    if (!fp.GetLine())
      return false;
    // LINE 5: IUPBHSV IUPBFSV
    if (!fp.GetLine())
      return false;

    for (int i = 0; i < ngrids-1; ++i)
    {
      // LINE 6: NAME FILE
      fp.GetLine(&line);
      if (!fp.ReadData(nameFile) || nameFile == "")
        return false;
      m_files.push_back(nameFile);

      // LINE 7: GRIDSTATUS
      if (!fp.GetLine())
        return false;
      // LINE 8: ISHFLG IBFLG IUCBHSV IUCBFSV
      if (!fp.GetLine())
        return false;
      // LINE 9: MXLGRITER IOUTLGR
      if (!fp.GetLine())
        return false;
      // LINE 10: RELAXH RELAXF
      if (!fp.GetLine())
        return false;
      // LINE 11: HCLOSELGR FCLOSELGR
      if (!fp.GetLine())
        return false;
      // LINE 12: NPLBEG NPRBEG NPCBEG
      if (!fp.GetLine())
        return false;
      // LINE 13: NPLEND NPREND NPCEND
      if (!fp.GetLine())
        return false;
      // LINE 14: NCPP
      if (!fp.GetLine())
        return false;
      // LINE 15: NCPPL [Repeat NCPPL a total of (NPLEND + 1 - NPLBEG) times]
      if (!fp.GetLine())
        return false;
    }
  }
  catch(ioexception)
  {
    ErrorStack::Get().PutError("Error in input file format. Aborting.");
    return false;
  }

  return true;
} // LgrFileReader::impl::ReadFile