[求助]关于定位文本文件中的某行的问题!!!单独处理前三行或者后两行数据调试都可执行,同时处理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;
}

解决方案 »

  1.   

    判断某个字串的子串就是find,
      

  2.   

    现在的问题是:如何让两个if语句都执行???
    感觉有些想不明白
    if(strsour.Find("Vsss")>=0)       //处理前三行数据 
    {
    ......
    }
    else if(strsour.Find("Burst Power")>=0) //处理后两行数据 
    {
    ......
    }
      

  3.   


    for(int i=0;fileR.ReadString(strsour);++i)
    {
    }i+1就是你要的行号
      

  4.   

    我的想法是:
    读取一行源文件的信息就删除一行信息;
    不可能直接在正在读取的文件中执行删除操作,
    会影响执行效率也容易出现异常;不知道如何把文本文件中的内容读到内存进行操作。
    [color=#0000FF]TestR005.txt文件不能同时以读和写的模式打开,只能以读的模式打开;[/color]
    请大家帮忙提一些建议啊,谢谢啦
      

  5.   

    两个IF都执行将第二个else if 改成if不行?
      

  6.   

    回复四楼的朋友:
    把else if改成if还是不能得到需要的数据格式;
    分别单独验证两个if语句时:if(strsour.Find("Vsss")>=0)       //处理源文件的前三行数据  

    ...... 

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

    ...... 
    }
    ////////  必须把要处理的数据放在文本的前两行(必须删除前三行数据),
    ////////  才能转换成需要的数据格式;
      

  7.   

    回复四楼的朋友:
    把else if改成if还是不能得到需要的数据格式;
    分别单独验证两个if语句时:if(strsour.Find("Vsss")>=0)       //处理源文件的前三行数据  

    ...... 

    ////////必须把要处理的数据放在文本的前三行,才可以转换成需要的数据格式;
    //////// 该if 语句里面的代码执行三次

    if(strsour.Find("Burst Power")>=0)    //处理源文件的后两行数据  

    ...... 
    }
    ////////  必须把要处理的数据放在文本的前两行(必须删除前三行数据),
    ////////  才能转换成需要的数据格式;
    //////// 该if 语句里面的代码执行两次
      

  8.   


    回复三楼的朋友:
    能否按行进行数据的处理;
    对前三行数据进行处理的代码,放在一个循环语句里;
    对后两行数据进行处理的代码,放在另外一个循环语句里;
    比如://处理前三行数据
    for(int i=0;i<3;++i)

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

    {
    ..............
    }
      

  9.   

    全读出来还不容易,用CStringArray不就行了,每读一行Add一下
      

  10.   


    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  &brvbarCFile::modeWrite)) 
          return;     
      

  11.   

    谢谢楼上的朋友!
    现在可以进行按行读取文件啦,
    因为不知道怎么使用 CStringArray ,
    我把下面一行代码注释啦;
    //     strs.Add(strsour);
    马上揭帖!