0

我想从一个结构很奇怪的文件中读取数据。该文件如下所示:

some lines with text....

10 1000  10
 1    1   1
 1  100 100 
    .
    .
    .

some lines with text... 

again data like above..

some lines with text... etc

所以我有两个问题:

  1. 如何仅读取包含数据的特定行?

  2. 如何读取这些右对齐数据?

这是我的试验之一:

string line;
ifstream myfile ("aa.txt");

double a,b,c;

while (! myfile.eof() )
{
  for (int lineno = 0; getline (myfile,line); lineno++)
  if (lineno>2 && lineno<5){

myfile>>a>>b>>c;

  cout<<lineno<<"      " << line << endl;}


}
myfile.close();
4

2 回答 2

0
  1. 如何仅读取包含数据的特定行?

    好吧,读取所有行,然后编写一个函数来检测当前行是否为“数据”行。

    你的数据线有什么特点?它只包含数字和空格?可以有标签吗?列呢,它们是固定宽度吗?如果是这样,您的谓词函数可以检查所需列中是否有空格。

  2. 我怎样才能读取这些右对齐的数据?

    你想提取整数值吗?好吧,您可以std::istringstream为您的行创建一个(一旦您检查它数据),然后使用>>流提取运算符将值读入适当类型的变量中。

    阅读它如何处理空格(和/或实验) - 它可能会毫不费力地做你需要的事情。

于 2016-10-08T12:48:52.183 回答
0

这只是一个简单的示例:您将 3 个变量声明为 a、b、c 为整数和一个字符串行您打开一个文件并输入行将行转换为整数,如果可以将其分配给 a,如果不是,则不执行任何操作b 和 c 直到下一次读取,直到 a 的有效转换正常,然后输入 b 和 c,如下所示:

#include <iostream>
#include <string>
#include <fstream>


int main()
{
    std::ifstream in("data.txt");
    int a = 0, b = 0, c = 0;
    std::string sLine;

    if(in.is_open())
    {
        while(in >> sLine)
        {
            if( a = atoi(sLine.c_str()))
                std::cout << "a: " << a << std::endl;

            if(a)
            {
                in >> sLine;
                if( b = atoi(sLine.c_str()))
                    std::cout << "b: " << b << std::endl;
            }

            if(b)
            {
                in >> sLine;
                if( c = atoi(sLine.c_str()))
                    std::cout << "c: " << c << std::endl;
            }
        }

    }

    in.close();

    std::cout << std::endl;
    return 0;
}
于 2016-10-08T13:38:29.113 回答