从文本文件中读取数据

时间:2011-02-15 03:07:53

标签: c++ text

  2      1     3       6    0    9    0
         2     9       5    0    0    8
         3    10       0    6    0    6
  3      1     1       0    4    0    8
         2     1       7    0    0    8
         3     5       0    4    0    5
  4      1     3      10    0    0    7
         2     5       7    0    2    0
         3     8       6    0    0    7
  5      1     4       0    9    8    0
         2     6       2    0    0    7
         3    10       0    5    0    5
  6      1     2       2    0    8    0

我有很多文字文件。格式如上所述。我希望将每个列数据存储到不同的数组,例如col01[5] ={2,3,4,5,6}(对应于第1列)。我怎样才能做到这一点? col02[15] ={1,2,3......}(对应第二列数据)。

第一列中的数字不固定,位置也是随机的。例如,第一列中的数字随机分布在某些行中。列号固定。它可能采用以下格式:

  2      1     3       6    0    9    0
  2      2     9       5    0    0    8
         3    10       0    6    0    6
  3      1     1       0    4    0    8
         2     1       7    0    0    8
  5      3     5       0    4    0    5
  4      1     3      10    0    0    7
         2     5       7    0    2    0
         3     8       6    0    0    7
  5      1     4       0    9    8    0
         2     6       2    0    0    7
         3    10       0    5    0    5
  6      1     2       2    0    8    0

我尝试使用istringstreamgetline,但实在太复杂了。感谢

5 个答案:

答案 0 :(得分:2)

更简单,更有效的方法是逐字符扫描文件,即增加“i”a并比较每个值。 if(i ==“”)//如果字符是“”SPACE则不做任何事情 / \ / \ if(i == 10)//如果字符是ascii(10),则输入然后切换到col01 / \ / \ else继续存储col01中的DIGITS,然后打开col02,直到col07。

这是您问题解决方案的摘要。 希望能帮助到你。 如果它现在不让我,我会很高兴再次帮助。

答案 1 :(得分:1)

  1. 将文本转换为2-D数组(you can use this for splitting by spaces
  2. Transpose数组(like this
  3. 读取数组的每一行。

答案 2 :(得分:1)

保持std::map<int,std::vector<int>>,将整数与它们所在的列配对。仔细阅读每一行,直到找到一个数字。您需要手动执行此操作,不能使用operator>>。您需要阅读数字的末尾以确定它所在的列,然后:the_map[the_column].push_back(the_number);

答案 3 :(得分:1)

针对这个具体问题。

声明7列13个空格。

读一行。 如果第一个char不是空格,则第一个数字转到第一个col。 读到下一个号码。去第二列。 重复。

答案 4 :(得分:0)

# include < iostream>
# include < fstream>
using namespace std;
int main()
{
  char ch;
  char str[256];
  ofstream fout("test.dat");
  if(!fout) {
    cout << "Cannot open file for output.\n";
    return 1;
  }
  fout << "This is a line of text.\n";
  fout << "This is another line of text.\n";
  fout << "This is the last line of text.\n";
  fout.close();
  if(!fout.good()) {
    cout << "An error occurred when writing to the file.\n";
    return 1;
  }
  ifstream fin("test.dat", ios::in);
  if(!fin) {
    cout << "Cannot open file for input.\n";
    return 1;
  }
  cout << "Use get():\n";
  cout << "Here are the first three characters: ";
  for(int i=0; i < 3; ++i) {
    fin.get(ch);
    cout << ch;
  }
  cout << endl;
  fin.get(str, 255);
  cout << "Here is the rest of the first line: ";
  cout << str << endl;
  fin.get(ch);
  cout << "\nNow use getline():\n";
  fin.getline(str, 255);
  cout << str << endl;
  fin.getline(str, 255);
  cout << str;
  fin.close();
  if(!fin.good()) {
    cout << "Error occurred while reading or closing the file.\n";
    return 1;
  }
  return 0;
}