我用vc想读取一个文本文件中的数据
数据是再文本文件中是这样存在的
1 -1 1 1 1
1  0 0 1 1
1  1 1 0 1
我想知道怎么能够判断数据是第一行还是第二行!

解决方案 »

  1.   

    用CStdioFile 来打开文件,
    用函数ReadString()来读取一行数据,
    自己做过计数器来计数就行了。
      

  2.   

    "查找‘\n’"不好,
    比如
    1 -1 1 1 11  0 0 1 1
    1  1 1 0 1
    有空行就不好办,最好是你根据文件行的特点用计数器计数。如果是自己程序产生的文件,最好的办法是在每行记录前加上16进制的行号。
    如果每行数据是一样多的还可以每行输出16个数据,然后每行前加上该行第一个数据序号的。
    如:
    0x00 1 0 1 1 1 1 1 1 1 1 1 0 1 1 1 1
    0x10 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
    0x20 0 1 0 1 1 0 1 1 1 1 0 1 1 1 1 1
    这样可以方便的得到每个数据的位置,而且每行前面哪个数字n>>4就是行号,哈哈~!
      

  3.   

    要自己读的时候就去数了。伪代码:
    calss myData{
    string sData;
    int nLine;
    }int n = 0;
    myData datas[100];
    open file (f);
    while(iseof(f))
    {
      string sLine = readline(f);
      if (sLine.IsEmpty())
        continue;
      datas[n].sData = sLine;
      datas[n].nLine = n+1;
    }
      

  4.   

    CStdioFile file;
    if( !file.Open("d:\\1.txt", CFile::modeRead) )
    {
    AfxMessageBox("can not open file!");
    return;
    }

    CString strLine, strTemp;
    int nLine=0;
    while( file.ReadString(strLine) )
    {
                   nLine++;        
    }
    file.Close();
      

  5.   

    回复人: mintwlf(Programmer)
    没看明白,怎么能确定每个数据位置啊!
    比如我就要取3行4列那个数,怎么取啊1
      

  6.   

    long CountEnter(const char*pFileName)
    {
       if( !pFileName )
          return -1;   FILE*fp=fopen(pFileName,"r");
       if( !fp )
          return -1;   long nCount=0;
       char ch;
       while((ch=fgetc(fp) ) != EOF )
       {
          if( ch == '\n' ) nCount++;
       }
       return nCount;
    }
      

  7.   

    试一试:FILE* pf=fopen("c:\\test.txt","r");
    fseek(pf,0,SEEK_SET);
    int iLines=0; //行数
    char c[1024];
    while(!feof(ph))
    {
     iLines++;
     fgets(c,100,pf);
    }
    fclose(pf);
      

  8.   

    cstdiofile 的readstring一次读取一行;
    trim得到的结果看是不是空行;
    不断find空格自己拆分每行。如果是自己写的程序,直接用carchive对象读写就不用这么麻烦了