使用c ++

时间:2017-09-12 14:10:41

标签: c++ file-io fstream

作为解析文件的一部分,我的任务涉及剥离文件中的所有注释,然后解析文件。解析完成后,我需要将注释插回到同一行。

要删除评论,我会阅读该文件并检查评论是否已发生,然后在那里输入换行符。我使用Ragel来做到这一点,逻辑工作正常。

example: file.cpp 

  #1 /** comments */
  #2 /** comments */
  #3 
  #4 ABCD : XYZ, 123
  #5 EFGH : ABC, 987

intermediate_file.cpp
 #1 
 #2 
 #3 
 #4 ABCD : XYZ, 123
 #5 EFGH : ABC, 987

注释与行号一起存储在std::map<int,string>中,稍后用于迭代并将字符串输出到文件intermediate_file.cpp。我使用以下代码:

fstream m_fstr; //class member
std::map<int,std::string> m_Comments_map; //to hold the comments

void WriteBackCommentsToFile(void) {
  m_fstr.open("intermediate_file.cpp", ios_base::out);
  int LineNbr = 0;
  for(std::map<int,std::string>::iterator it = m_Comments_map.begin(); it != m_Comments_map.end(); ++it)    {
      LineNbr = it->first;
      if(m_fstr.is_open()) {
        m_fstr.seekg(std::ios::beg);
        GotoLine(m_fstr,LineNbr );
        m_fstr << it->second << endl;
      }
  }
}

std::fstream& GotoLine(std::fstream& file, unsigned int num){
    for(int i=0; i < num - 1; ++i){
        file.ignore(std::numeric_limits<std::streamsize>::max(),'\n');
        //getline(m_fstr,ReadLine); -- another try
    }
    return file;
}

解析完成后,我正在尝试将m_Comments_map的评论写回文件intermediate_file.cpp 通过上述逻辑,我只能打印文件中的第一行 - /** comments */。其余内容不会写回文件。

我已尝试将std::map的内容打印到控制台,并验证评论是否已正确存储在std::map中。问题在于将std::map内容打印到文件中。有谁能告诉我我的代码的哪一部分不正确。?

我使用此处描述的逻辑实现了上述内容: In C++ is there a way to go to a specific line in a text file?

0 个答案:

没有答案