现有原文本1.txt,格式如下:
3综合铜 LCPT
时间 开盘价 最高价 最低价 收盘价 成交量 持仓量
3综合铜      LCPT
时间            开盘价    最高价    最低价    收盘价    成交量    持仓量
 2005-11-11-18:55:00     4060.5    4060.5    4058.0    4058.0         4      7982
 2005-11-11-19:00:00     4064.5    4064.5    4062.0    4062.0         3      7982
 2005-11-11-19:05:00     4062.5    4067.5    4060.0    4065.0        20      7982
 2005-11-11-19:10:00     4068.5    4074.5    4065.0    4068.0        33      7982
我需要做个基于Dialog的小程序,处理这种文本,处理过后保存为2.txt,格式如下:
3综合铜      LCPT
时间            开盘价    最高价    最低价    收盘价    成交量    持仓量
2005-11-11-18,55,00,4060.5,4060.5,4058.0,4058.0,4,7982
2005-11-11-19,00,00,4064.5,4064.5,4062.0,4062.0,3,7982
2005-11-11-19,05,00,4062.5,4067.5,4060.0,4065.0,20,7982
2005-11-11-19,10,00,4068.5,4074.5,4065.0,4068.0,33,7982
由于我对文本操作不熟悉,所以不知道该怎么下手,希望高手们能指导一下,最好给出代码,谢谢了
注意,原文本的每条数据开头有个空格。

解决方案 »

  1.   

    既然格式固定,就好办多了。用CStdioFile打开文件,逐行读取。针对每一行,用sscanf函数进行分解,取出每个空格分割的信息。然后按照要求的格式转换后再保存成新文件。
      

  2.   

    CStdioFile file;
    file.Open("1.txt",CFile::modeRead);
    CStdioFile newFile;
    newFile.Open("2.txt",CFile::modeCreate|CFile::modeWrite);
    CString sLine;
    BOOL bEnd = file.ReadString(sLine);
    while(!bEnd)
    {
        sLine.TrimLeft();
        CString sTime;
        float f1,f2,f3,f4;
        int i1,i2;
        sscanf(sLine,"%s %f %f %f %f %d %d",sTime.GetBuffer(),&f1,&f2,&f3,&f4,&i1,&i2);
        sTime.ReleaseBuffer();
        sTime.Replace(':',' ');
        CString s1,s2,s3;
        sscanf(sTime,"%s %s %s",s1.GetBuffer(),s2.GetBuffer(),s3.GetBuffer());
        s1.ReleaseBuffer();
        s2.ReleaseBuffer();
        s3.ReleaseBuffer();
        
        CString sNewLine;
        sNewLine.Format("%s,%s,%s,%f,%f,%f,%f,%d,%d",s1,s2,s3,f1,f2,f3,f4,d1,d2);
        newFile.WriteString(sNewLine);
        bEnd = file.ReadString(sLine);
    }
    newFile.Close();
    file.Close();
      

  3.   

    我刚才试了一下,GetBuffer()里面应该有参数的,取什么合适呢?还有就是在跟踪到while(!bEnd)后没有进循环,直接跳到close那里了,把!去掉以后只执行一行了。
      

  4.   

    换行问题解决了,现在就是最后2列数字读出来不正确,还有GetBuffer()里的参数的取值问题
      

  5.   

    GetBuffer参数用0就可以了。
    你最后两列不是用空格分割的吧?是TAB?
      

  6.   

    只要搞清楚分隔符就行了,在sscanf的时候相应的换上
    sscanf(sLine,"%s %f %f %f %f\t%d\t%d",sTime.GetBuffer(),&f1,&f2,&f3,&f4,&i1,&i2);
    最后2行看起来象TAB
      

  7.   

    GetBuffer参数用0的话运行会出错,最后两列也是空格,不是TAB