现在在记事本中有如下数据:
116.442218,40.184768,   4.6, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184775,   0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442218,40.184781,   0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442219,40.184788,   0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184795,   0.0, 0.0,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184802,  40.0, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
116.442217,40.184808,   8.2, 4.5,2001710179,"F2:F01","L1:LOAD0001","Wheat"
   如果现在要用VC编一个象记事本那样的程序,当我点打开时,找到上面的文件后,把上面的内容显示成如下的东西,其他的不让显示。也就是说要把上面的数据先处理成如下形式,存成.txt文件。 
116.442218,40.184768,   4.6, 4.5,  
116.442218,40.184775,   0.0, 0.0,  
116.442218,40.184781,   0.0, 0.0,  
116.442219,40.184788,   0.0, 0.0,   
116.442217,40.184795,   0.0, 0.0,   
116.442217,40.184802,  40.0, 4.5,  
116.442217,40.184808,   8.2, 4.5,  
请那位大虾帮个忙,帮我想想应该用个啥办法才能编好这个程序。

解决方案 »

  1.   

    SORRY,找到每行第4个,号,删除后面的字符。
      

  2.   

    你的文件格式不复杂,可以按如下思路:
    读文件(一个字符一个字符的读),直到发现第四个“,”,把以前读的数据写入另一个文件,然后移动读文件指针(自己数数本行还有多少字符)。然后重复上面的操作。需要以下API函数:
    CreateFile   
    ReadFile      
    ReadFileScatter   
    WriteFile
      

  3.   

    是SetFilePointer,不是ReadFileScatter
      

  4.   

    scanf()就可以搞定,用占位符!!!!!!!!!!!!!!!!!
      

  5.   

    可以这样试试
    float a,b,c,d;
    char ch[100];
    fscanf(fp,"%f,%f,%f,%f%s",a,b,c,d,ch);//fp为文件
      

  6.   

    你不是提过问了吗?
    并且结帖了的:)http://www.csdn.net/expert/topic/941/941766.xml?temp=.7816584
      

  7.   

    我的文件大约有一万行呀,不过是.txt文件,所以请大虾想个好办法。主要是想能不能给个办法能够按照要求来按行与按列读出。
      

  8.   

    CStdioFile *fp;
    fp.ReadString()
    fp.WriteString()
      

  9.   

    CFile file;
     CString string; 
     file.Open (filename,CFile::modeRead);
     CArchive ar(&file,CArchive::load);
     while(NULL!=ar.ReadString(string))
     {
        ……………
        ar.Left(length);                 //length为要提取的长度
        ……………
      }
     ar.Close ();
     file.Close ();
      

  10.   

    这个不算难
    有固定的格式和长度,很EASY偶最近在构思一个网页里的FORM元素提取分析的才算复杂呢还没有想到好办法
    //sigh
      

  11.   

    很简单
    1、读出一行,行的标志是'\A',也就是10号字符,保存在一个CString strTemp中
    2、读取其中的最前面strlen("116.442218,40.184768,   4.6, 4.5,"+1)个字符
    3、strTemp.setAt(strlen("116.442218,40.184768,   4.6, 4.5,"+1),'\A')也就是再加入一个换行符。
    4、把这个字符串保存到一个新文件中就可以了。
    循环1-4,直到文件尾。
    就可以了
      

  12.   

    BOOL FileReadALine(HANDLE hFile,LPSTR lpBuffer)
    {
        int     i = NULL;
        char    cBuf = NULL;
        DWORD   dwData = NULL;    while(ReadFile(hFile,&cBuf,sizeof(char),&dwData,NULL) != ERROR_HANDLE_EOF)
        {
            if(cBuf == 0x0D || cBuf == 0x0A)
            {
                lpBuffer[i] = '\0';
                return TRUE;
            }
            lpBuffer[i ++] = cBuf;
        }    return FALSE;
    }BOOL SplitString(LPSTR lpOrgString,FLOAT *fltCol1,FLOAT *fltCol2,FLOAT *fltCol3,FLOAT *fltCol4,LPSTR lpszCol5,LPSTR lpszCol6,LPSTR lpszCol7,LPSTR lpszCol8)
    {
        char    *lpszStart = NULL;
        char    *lpszNext = NULL;    lpszStart = lpOrgString;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            (*fltCol1) = (FLOAT)atof(lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            (*fltCol2) = (FLOAT)atof(lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            (*fltCol3) = (FLOAT)atof(lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            (*fltCol4) = (FLOAT)atof(lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            strcpy(lpszCol5,lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            strcpy(lpszCol6,lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            strcpy(lpszCol7,lpszStart);
        }    lpszStart = lpszNext + 1;
        lpszNext = strchr(lpszStart,',');
        if(lpszNext)
        {
            lpszNext[0] = '\0';
            strcpy(lpszCol8,lpszStart);
        }    return TRUE;
    }    .
        .
        .
        HANDLE  hFile;
        char    szBuffer[1024];
        FLOAT   fltCol1;
        FLOAT   fltCol2;
        FLOAT   fltCol3;
        FLOAT   fltCol4;
        char    szCol5[64];
        char    szCol6[64];
        char    szCol7[64];
        char    szCol8[64];    hFile = CreateFile(...);   //此处略
        while(ReadFileALine(hFile,szBuffer))
        {
            if(szBuffer[0])
            {
                SplitString(szBuffer,&fltCol1,&fltCol2,&fltCol3,&fltCol4,szCol5,szCol6,szCol7,szCol8);
                //你自己处理吧:)
            }
        }    CloseFile(hFile);
        .
        .
        .写的有些笨,但思路应该没人说不对吧:)
    代码优化就靠你自己了;)
      

  13.   

    太复杂了其实用上面有人提到的strtok就完全可以处理好
      

  14.   

    非常容易。
    如果是固定格式的文本,则下面的代码应该可以解决问题:.......FILE *fp=fopen("specific.txt","rb");
    FILE *fp1=fopen("destinat.txt","wb");
    char buffer[35];.......fread(buffer,32,1,fp);
    buffer[32]=0x0d; buffer[33]=0x0a; buffer[34]=0;(在屏幕上显示文本)fwrite(buffer,34,1,fp);......
      

  15.   

    fscanf可以从文件中读取格式化的数据
    e.g.
    #include "stdio.h"
    FILE *fp;
    float f1,f2,f3,f4;
    char s1[10],s2[20],s3[20],s4[20];
    fp=fopen("Data.txt","rt");
    fscanf(fp,"%f,%f,%f,%f,%10s,\"%s\",\"%s\",\"%s\"",&f1,&f2,&f3,&f4,s1,s2,s3,s4);
      

  16.   

    snsins:
    form/html用regexp/常规表达式