关于MCF中文本处理问题

captain9293 2005-11-22 12:43:50
现有原文本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
由于我对文本操作不熟悉,所以不知道该怎么下手,希望高手们能指导一下,最好给出代码,谢谢了
注意,原文本的每条数据开头有个空格。
...全文
169 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2005-11-22
  • 打赏
  • 举报
回复
随手写的,不一定完全正确。
快乐鹦鹉 2005-11-22
  • 打赏
  • 举报
回复
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();
快乐鹦鹉 2005-11-22
  • 打赏
  • 举报
回复
既然格式固定,就好办多了。用CStdioFile打开文件,逐行读取。针对每一行,用sscanf函数进行分解,取出每个空格分割的信息。然后按照要求的格式转换后再保存成新文件。
快乐鹦鹉 2005-11-22
  • 打赏
  • 举报
回复
那也不是一个空格吧
captain9293 2005-11-22
  • 打赏
  • 举报
回复
GetBuffer参数用0的话运行会出错,最后两列也是空格,不是TAB
alen_ghl 2005-11-22
  • 打赏
  • 举报
回复
只要搞清楚分隔符就行了,在sscanf的时候相应的换上
sscanf(sLine,"%s %f %f %f %f\t%d\t%d",sTime.GetBuffer(),&f1,&f2,&f3,&f4,&i1,&i2);
最后2行看起来象TAB
快乐鹦鹉 2005-11-22
  • 打赏
  • 举报
回复
GetBuffer参数用0就可以了。
你最后两列不是用空格分割的吧?是TAB?
captain9293 2005-11-22
  • 打赏
  • 举报
回复
换行问题解决了,现在就是最后2列数字读出来不正确,还有GetBuffer()里的参数的取值问题
oyljerry 2005-11-22
  • 打赏
  • 举报
回复
这样一次读入一行到strLine中
captain9293 2005-11-22
  • 打赏
  • 举报
回复
错了,不是只执行1行,而是没有分行,把处理后的都连在一起了
oyljerry 2005-11-22
  • 打赏
  • 举报
回复
while(file.ReadString(strLine))
captain9293 2005-11-22
  • 打赏
  • 举报
回复
我刚才试了一下,GetBuffer()里面应该有参数的,取什么合适呢?还有就是在跟踪到while(!bEnd)后没有进循环,直接跳到close那里了,把!去掉以后只执行一行了。

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧