分隔字符行形成数据

时间:2018-07-30 07:21:26

标签: c++

我只想在文件中存储数据(字符行除外)。我有这个脚本来读取文件,

#include "TMath.h"
#include <vector>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <math.h>

temp() {

    ifstream myfile("scanner.dat");
    ifstream input_file("scanner.dat");

    int nlines=1;
    string line;
    if(myfile.is_open()){
        while(!myfile.eof()){ 
            getline(myfile,line); nlines++;
        }
        myfile.close();
    }
    cout<<"nlines = "<<nlines-1<<endl;
    int dim=nlines-1;
    string a[dim],b[dim],c[dim],d[dim],e[dim],f[dim],g[dim];

    if(input_file.is_open()){
        for(int i=0; i<700;i++) {
            input_file>>a[i]>>b[i]>>c[i]>>d[i]>>e[i]>>f[i]>>g[i];
            cout<<a[i]<<" "<<b[i]<<" "<<c[i]<<" "<<d[i]<<" "<<e[i]<<" "<<f[i]<<" "<<g[i]<<endl;
        }
    }

}

但是问题是字符行在特定日期行之后没有出现。这是输入数据文件的一部分。

# Before scan of next raw/column:
# X Y t I1 I2 I3 I4
0.00 0.00 1.92 330 0 0 0
0.00 0.00 2.92 335 0 0 0
0.00 0.00 3.92 330 0 0 0
0.00 39.99 9.92 345 0 0 0
# Before scan of next raw/column:
# X Y t I1 I2 I3 I4
0.00 0.00 1.92 330 0 0 0
0.00 0.00 2.92 335 0 0 0
0.00 0.00 3.92 330 0 0 0
0.00 39.99 9.92 345 0 0 0
0.00 0.00 3.92 330 0 0 0
0.00 39.99 9.92 345 0 0 0 

1 个答案:

答案 0 :(得分:0)

  • 首先,您需要将整行读为string
  • 然后通过在菜单上选中“#”来确定是否为注释 第一个字符。
  • 请记住使用其他索引计数器,因为某些行会被忽略。 (在以下示例中使用了j变量)

下面有一个例子,

//...
std::string line;
for(int i=0, j=0; i<700;i++)
{
  std::getline(input_file, line)
  if (line.rfind("#", 0) == 0)
    continue; // Ignore the comments.

  std::istringstream iss(line)
  iss>>a[j]>>b[j]>>c[j]>>d[j]>>e[j]>>f[j]>>g[j];
  j++;
  //...