[求助]关于定位文本文件中的某行的问题!!!

jscn123789abc 2008-04-21 07:16:18

[求助]关于定位文本文件中的某行的问题!!!

单独处理前三行或者后两行数据调试都可执行,同时处理5行数据就不会处理啦。。。
不知道是否有直接定位到文本文件中的某行,或显示当前在读的文件行数的函数可直接调用,
请做过这方面程序的朋友提一些建议,谢谢啦。。。


转换前读的格式
GSMPCL1 Vsss1.230
GSMPCL11 Vsss0.476
GSMPCL22 Vsss0.307
Avg. Burst Power (Avg.)[dBm] = 11.771870 Pass
Peak Burst Power [dBm] = 11.771870 Pass


转换以后写的格式
Ccc+Final,GSMPCL5 Vsss,value,,,1.230
Ccc+Final,GSMPCL12 Vsss,value,,,0.476
Ccc+Final,GSMPCL17 Vsss,value,,,0.307
Ccc+Final,GSM TCH 666_3_Avg. Burst Power,dBm,,,11.771870
Ccc+Final,GSM TCH 666_3_Peak Burst Power,dBm,,,11.771870

void CRWTestFileDlg::ReadWriteTxtFile()
{
CString strsour;
CStdioFile fileR,fileW;
if (!fileR.Open("TestR005.txt",CFile::modeRead))
return;
if (!fileW.Open("TestW005.txt",CFile::modeCreate |CFile::modeWrite))
return;
bool b = fileR.ReadString(strsour);;
while(b)
{
////if()//
////{
////该函数应用有问题,是否有判断某字符串中是否有某子串的函数可以调用???
if(strsour.Find("Vsss")>=0) //处理前三行数据
{
strsour.Insert(0,"Ccc+Final,"); //字符串中插入Ccc+Final,
int valuepos=strsour.Find("Vsss"); //查找Vsss在字符串中的位置
strsour.Insert(valuepos+4,",value,,,");
fileW.WriteString(strsour+'\n'); //写文件
}


else if(strsour.Find("Burst Power")>=0) //处理后两行数据
{
strsour.TrimLeft();
strsour.Insert(0,"Ccc+Final,GSM TCH 666_3_");
int powerpos=strsour.Find("Power"); //查找字符串中Power位置
int dBmpos=strsour.Find("dBm"); //查找字符串中dBm位置
strsour.Delete(powerpos+5,dBmpos-powerpos-5);
strsour.Insert(powerpos+5,",");
strsour.Insert(powerpos+9,",,,");
int equalpos=strsour.Find("="); //查找字符串中=位置
int rsimbolpos=strsour.Find("]");
strsour.Delete(rsimbolpos,equalpos-rsimbolpos+4);
int strlentemp=strsour.GetLength();
strsour.Delete(strlentemp-4,4);
strsour.TrimRight();
fileW.WriteString(strsour+'\n'); //写文件
}

/////}
b = fileR.ReadString(strsour);

}
fileR.Close;
fileW.Close;
}
...全文
207 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jscn123789abc 2008-04-22
  • 打赏
  • 举报
回复
谢谢楼上的朋友!
现在可以进行按行读取文件啦,
因为不知道怎么使用 CStringArray ,
我把下面一行代码注释啦;
// strs.Add(strsour);
马上揭帖!
simon031187 2008-04-21
  • 打赏
  • 举报
回复

CStringArray strs;
for(int i=0;fileR.ReadString(strsour);++i)
{
strs.Add(strsour);

if(i<2)//前3行
;
else//后面的
;
}


还有你前面的

//应该用CFile::modeCreate | brvbarCFile::modeWrite
if (!fileW.Open("TestW005.txt",CFile::modeCreate ¦CFile::modeWrite))
return;

simon031187 2008-04-21
  • 打赏
  • 举报
回复
全读出来还不容易,用CStringArray不就行了,每读一行Add一下
jscn123789abc 2008-04-21
  • 打赏
  • 举报
回复

回复三楼的朋友:
能否按行进行数据的处理;
对前三行数据进行处理的代码,放在一个循环语句里;
对后两行数据进行处理的代码,放在另外一个循环语句里;
比如:

//处理前三行数据
for(int i=0;i<3;++i)

{
.........
}


//处理后两行数据
for(i=3;fileR.ReadString(strsour);++i)

{
..............
}
jscn123789abc 2008-04-21
  • 打赏
  • 举报
回复
回复四楼的朋友:
把else if改成if还是不能得到需要的数据格式;
分别单独验证两个if语句时:

if(strsour.Find("Vsss")>=0) //处理源文件的前三行数据
{
......
}
////////必须把要处理的数据放在文本的前三行,才可以转换成需要的数据格式;
//////// 该if 语句里面的代码执行三次





if(strsour.Find("Burst Power")>=0) //处理源文件的后两行数据
{
......
}
//////// 必须把要处理的数据放在文本的前两行(必须删除前三行数据),
//////// 才能转换成需要的数据格式;
//////// 该if 语句里面的代码执行两次
jscn123789abc 2008-04-21
  • 打赏
  • 举报
回复
回复四楼的朋友:
把else if改成if还是不能得到需要的数据格式;
分别单独验证两个if语句时:

if(strsour.Find("Vsss")>=0) //处理源文件的前三行数据
{
......
}
////////必须把要处理的数据放在文本的前三行,才可以转换成需要的数据格式;


if(strsour.Find("Burst Power")>=0) //处理源文件的后两行数据
{
......
}
//////// 必须把要处理的数据放在文本的前两行(必须删除前三行数据),
//////// 才能转换成需要的数据格式;
zoulie 2008-04-21
  • 打赏
  • 举报
回复
两个IF都执行将第二个else if 改成if不行?
jscn123789abc 2008-04-21
  • 打赏
  • 举报
回复
我的想法是:
读取一行源文件的信息就删除一行信息;
不可能直接在正在读取的文件中执行删除操作,
会影响执行效率也容易出现异常;

不知道如何把文本文件中的内容读到内存进行操作。
[color=#0000FF]TestR005.txt文件不能同时以读和写的模式打开,只能以读的模式打开;[/color]
请大家帮忙提一些建议啊,谢谢啦。。。
zoulie 2008-04-21
  • 打赏
  • 举报
回复
判断某个字串的子串就是find,
simon031187 2008-04-21
  • 打赏
  • 举报
回复

for(int i=0;fileR.ReadString(strsour);++i)
{
}

i+1就是你要的行号
jscn123789abc 2008-04-21
  • 打赏
  • 举报
回复
现在的问题是:如何让两个if语句都执行???
感觉有些想不明白。。。
if(strsour.Find("Vsss")>=0) //处理前三行数据
{
......
}
else if(strsour.Find("Burst Power")>=0) //处理后两行数据
{
......
}

16,548

社区成员

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

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

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