文本中每行有三个数据(数据间以空格分开)想要一次读取一行 存到数组array中:如:点击按钮开始:第一秒只读第一行,放入array,进行后续操作;第二秒只读第二行替换array中内容,进行后续操作;。
如何实现?请指教

解决方案 »

  1.   

    读完第一个,sleep()
    依此类推..
      

  2.   

    假设用定时器
    我用CSdioFile能一次读出一行
    第一秒 我读出第一行
    到了第二秒 我怎么跳过第一行 去读第二行
      

  3.   

    用ontimer。至于如何跳过第一行或第N行,就要看看你的程序是如何写的,假设你用的是CFile类来进行文件的读写,简单的话你可以把这个CFile类对像做为类的一个成员变量,那么用CFile::Open打开后每次在ontimer中引用这个变量去读文件,因为文件指针在你读完一行后就移动到了这一行的行末的,下次再读就是从第二行开始,只要你调用CFile::Close(),那么文件指针就会随着每次Read()的调用顺次读下去,不会出现你说的第二次又从第一行读起的情况。如果你需要每次进入timer都打开文件,读完一行后关闭。那么你可以利用CFile::Seek()这个函数来定位函数指针,它的参数是从文件头到你要读取数据的偏移量,以字节数为单位。而读取数据的CFile::Read()函数的返回值是你读取数据的字节数,在你的问题中就是每一行的字节数,你只要把这些已经读取的字节数纪录下来,每次打开的时候用CFile::Seek()把文件指针定位到你想要读取的那个位置即可。
      

  4.   

    第二秒只读第二行替换array中内容
    =========
    那就没必要用数组了。我用CSdioFile能一次读出一行
    第一秒 我读出第一行
    到了第二秒 我怎么跳过第一行 去读第二行
    ========
    你读出一行,文件指针自动指向下一行了。
      

  5.   

    void CRockRollView::OnTimer(UINT nIDEvent) 
    {
    // TODO: Add your message handler code here and/or call default
    CFileDialog dlg(TRUE);
            dlg.m_ofn.lpstrFilter="Text Files(*.txt)\0 *txt\0 All Files(*.*)\0 *.*\0\0";
            dlg.m_ofn.lpstrDefExt="txt";
            dlg.m_ofn.lpstrTitle="读入GPS数据";        if(dlg.DoModal()==IDOK)          
           {
              CString m_FilePath = dlg.GetPathName(); 
              CStdioFile File;  
              File.Open(m_FilePath,CFile::modeRead);      
              CString FileData;    char TempStr1[10];
      char TempStr2[10];
      char TempStr3[10];
     
      memset(TempStr1,'\0',10);
      memset(TempStr2,'\0',10);
        memset(TempStr3,'\0',10);                    GPSPoint m_tempGPS;
                        long n=1;
                             while (File.ReadString(FileData))
           {
      sscanf(FileData,"%s%s%s",TempStr1,TempStr2,TempStr3);   double temp = (double)atof(TempStr1);
      m_tempGPS.X=temp;
      temp = (double)atof(TempStr2);
      m_tempGPS.Y = temp;
      temp = (double)atof(TempStr3);
      m_tempGPS.Z =temp;                              n++;
      if(n>1)
      break;        }//////////////////////////////////////////
    这样作能否保证下一次响应ontimer时只读第N+1行,如果不能应该怎样