[求助]关于定位文本文件中的某行的问题!!!单独处理前三行或者后两行数据调试都可执行,同时处理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.771870void 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;
}
解决方案 »
- 请问牛人:如何测量某个端口或者某个运行中的进程的网络流量?
- 为什么说"内核对象的句柄可以是局限于一个进程的"
- error C2146: syntax error : missing ';' before identifier 'm_yunTai'
- CView类写字板程序 如何实现鼠标选字,并复制粘贴????
- 用什么方法可以在对话框指定区显示JPG图片?
- 请教DeviceIoControl函数的用法?
- 有谁知道RS232,RS485,RS422,RS423的原理??
- 急!!《深入浅出MFC》中一个关于多线程的问题(续)
- vector在Release模式下出错
- 偶是新手,问个最基本的内容,大家不要笑我哦
- VC2005 loadmenu简单问题?
- 求简单的网页验证码的代码.
感觉有些想不明白
if(strsour.Find("Vsss")>=0) //处理前三行数据
{
......
}
else if(strsour.Find("Burst Power")>=0) //处理后两行数据
{
......
}
for(int i=0;fileR.ReadString(strsour);++i)
{
}i+1就是你要的行号
读取一行源文件的信息就删除一行信息;
不可能直接在正在读取的文件中执行删除操作,
会影响执行效率也容易出现异常;不知道如何把文本文件中的内容读到内存进行操作。
[color=#0000FF]TestR005.txt文件不能同时以读和写的模式打开,只能以读的模式打开;[/color]
请大家帮忙提一些建议啊,谢谢啦
把else if改成if还是不能得到需要的数据格式;
分别单独验证两个if语句时:if(strsour.Find("Vsss")>=0) //处理源文件的前三行数据
{
......
}
////////必须把要处理的数据放在文本的前三行,才可以转换成需要的数据格式;
if(strsour.Find("Burst Power")>=0) //处理源文件的后两行数据
{
......
}
//////// 必须把要处理的数据放在文本的前两行(必须删除前三行数据),
//////// 才能转换成需要的数据格式;
把else if改成if还是不能得到需要的数据格式;
分别单独验证两个if语句时:if(strsour.Find("Vsss")>=0) //处理源文件的前三行数据
{
......
}
////////必须把要处理的数据放在文本的前三行,才可以转换成需要的数据格式;
//////// 该if 语句里面的代码执行三次
if(strsour.Find("Burst Power")>=0) //处理源文件的后两行数据
{
......
}
//////// 必须把要处理的数据放在文本的前两行(必须删除前三行数据),
//////// 才能转换成需要的数据格式;
//////// 该if 语句里面的代码执行两次
回复三楼的朋友:
能否按行进行数据的处理;
对前三行数据进行处理的代码,放在一个循环语句里;
对后两行数据进行处理的代码,放在另外一个循环语句里;
比如://处理前三行数据
for(int i=0;i<3;++i)
{
.........
}
//处理后两行数据
for(i=3;fileR.ReadString(strsour);++i)
{
..............
}
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;
现在可以进行按行读取文件啦,
因为不知道怎么使用 CStringArray ,
我把下面一行代码注释啦;
// strs.Add(strsour);
马上揭帖!