用MFC读取一个文本文件,文件里面的数据是以矩阵的形式存在,m*n矩阵,但是m和n未知,数据以double形式读取,因为要对进行处理。请教如何解决?

解决方案 »

  1.   

    两个问题而已:1、读取文件,将你的数据读出来,这个应该简单吧,CFile,CStdioFile这些就可以了
    2、获取数据,将读出来的数据解析出来,并存储就可以了,就new一个m×n的内存,将数据存进去就ok了
      

  2.   

    1.CStdioFile.ReadString读取的是一行文本,但是是以Cstring类型读取,如何做到分开读取每个数据?或者怎样知道这行有几组数据?
    2.读取的数据解析,怎样解析,能否给出相关代码,谢谢。new一个m*n(m行n列)的内存,m可以很好地得到,n如何得到?(同1的每行有几组数组的问题)谢谢。
      

  3.   

    1. 使用fopen打开文件,用fgets配合feof读出每一行,需要构造循环;
    2. 每一行中的数据,一定是用某个分割符分开的,如逗号,空格,可以使用strtok函数,具体用法参见msdn;使用strtok函数循环分割一行数据时,M*N矩阵的N数字也就得知了;
    3. 文本到浮点数的转换,使用atof函数,每转换一个,添加到一个CList<double, double>或CArray<double, double>中(推荐CArray)。添加完毕后,CArray.getsize函数得知总个数,除以N既是M。
      

  4.   

    typedef CArray<double,double> AryDb;CArray<AryDb*, AryDb*&> ary;   // AryDb表示一行,ary表示m*n
      

  5.   

    有一个M和N固定大小的程序,你参考下吧#include <iostream>
    #include <fstream>
    #include <sstream>
    #include <string>using namespace std;int main()
    {
    string filename;
    cout << "Please Enter the filename you want to translate" << endl;
    cin >> filename; const int N = 50/*, M = 40*/;
    ifstream readfile;
    ofstream writefile;

    readfile.open(filename.c_str());
    if(readfile.fail())
    {
    cout << "Cann't open the file" << endl;
    exit(1);
    } float fArray[N][N]; string line;
    int nindex = 0;
    while(getline(readfile, line))
    {
    writefile << line << "\n";
    istringstream istr(line);
    for (int i = 0; i < N; ++i)
    {
    istr >> fArray[nindex][i];
    //  cout << fArray[nindex][i] << " ";
    }
    ++nindex; cout << endl;
    } readfile.close(); return 1;
    }
      

  6.   

    呵呵
    如果文件存在的仅是矩阵数据的话,我可以提供一个解决方案恩。用CFile将文件数据全部读取到strBufffer中去。
    然后对strBuffer进行分析,如果两个字符之间的是‘ ’那可以认为是在一行之内,当读取到‘\r\n’的时候说明已经发生了换行,矩阵可以进行下一行的读取了。
    关键对文件中的每个字符进行分析,如果文件只有矩阵还是比较容易办到的。
      

  7.   

    谢谢各位的帮助。
    我先用CStdioFile.ReadString读取每行,再用AfxExtractSubString分割每个数据,最后转换成double型。期间用到了CStringArray。