繁体   English   中英

逐行读取文件并存储为字符串

[英]Reading file line by line, and storing as a string

在此程序中,我应该逐行阅读程序,然后使用提供给我的一些函数,这些函数将提取字符串的一部分并将其发送给另一个函数。 我在读取文件并“存储”时遇到问题

void histogram(const int MaxPages, istream& input, ostream& output)
{
CountedLocation *array[MaxPages];
int linenum = 0;

string temp;
//getline(input, linestring);
//output << linestring;
while (linenum < MaxPages)
{
   string linestring = "";
   getline(input, linestring);
   //linenum++;
   extractTheRequest(linestring);
   if (isAGet(linestring) == true)
   {
       extractLocator(linestring);
       linenum++;
       output << linestring << endl;
       output << "test1";
   }
   linenum++;
}

问题似乎在于该程序从未真正“读取”文件。 我尝试将线串初始化为字符串temp的初始化下方,即为“ string linestring =” f“”。 该程序当然会在几个“ f”串在一起时输出文本文件。 我尝试查看如何逐行阅读它,但是大多数人不使用istream,并且不允许编辑除直方图函数之外的任何内容。 如果if语句中没有关于“ isAGet”的内容,则不会真正“发生”。

我的问题是; 如何逐行读取文本文件,然后将每一行存储为字符串? 我以为也许可以像下面这样循环执行,将行存储到临时流中,执行我需要的操作,然后清除流以重复该过程。 还有另一种方法会更容易吗? 我不能自己弄清楚。

不知道您的isAGetextractTheRequest做什么,而是回答“我如何逐行读取文本文件,然后将每一行存储到字符串中”

为什么不简单地这样呢?

std::vector<std::string> vec;
while ( std::getline(input, linestring) && (linenum < MaxPages ) )
{
  //...
  //Store into std::vector, if required
  vec.push_back(linestring); 

  //.. use other calls 
  output << linestring ;
  linenum++;
}

该代码应如下所示:

void histogram(const int MaxPages, istream& input, ostream& output) {
    if (!input.good()) {
        cerr << "File doesn't exist" << endl;
        return;
    }

    string line;
    for (int line_no = 0; getline(input, line); ++line_no) {
        output << '"' << line << '"' << endl;
    }
}

提及那些引用到控制台的报价。 它们表明,如果文件的最后一行为空,则getline将返回错误,并且不会调用work_with_that_line 使用getline样式的文件输入是一个众所周知的问题。 如果需要,请考虑使用逐个字符或二进制输入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM