vc 如何读取指定字符串所在行的内容

a278401627 2013-01-28 02:13:31
目标txt路径为 C:\123.txt

里面的内容大致是
7E1022044087E0$0$0.0.18$8
411FE0040$1$0.0.11$8
6310A224488610$2$0.0.16$8 //注意631···在文本中的位置不是固定的,要先定位,再读取

421022444886E0$3$0.0.15$8
080681107F8050$4$0.0.16$8
F21222444888E0$5$0.0.18$8
7E1222446880E0$6$0.0.19$8
C010027C700800$7$0.0.13$8
6E1222444886E0$8$0.0.19$8
701162244487E0$9$0.0.19$8


现在我已经实现了判断文本中是否存在 6310A224488610

现在需要实现的是 读取6310A224488610 所在行的全部内容也就是
6310A224488610$2$0.0.16$8

有时间的朋友再帮忙分离一下$得到其中的2

开发环境是VC6.0 控制台程序 本人基础差,会的朋友请给出代码 谢谢
...全文
220 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
「已注销」 2014-09-09
楼主可否贴上代码分享下呢?谢谢 我也想在文本里找到几行指定的字符串,然后把这行删掉,重新写入。没有找到就继续循环,再继续判断。
  • 打赏
  • 举报
回复
a278401627 2013-01-29
已解决```````
  • 打赏
  • 举报
回复
zhangyihu321 2013-01-28
先把文件一行行的读出来 根据换行分隔符,找到相应行再进行相应的字符串查找操作。。。
  • 打赏
  • 举报
回复
schlafenhamster 2013-01-28
把文件 全部 读入 buffer (注意 加个 0) char *pStartAt=strstr(buffer,“631”); char pEndAt=pStartAt; while((*pEndAt != 13 ) && (*pEndAt != 10 )) pEndAt++;
  • 打赏
  • 举报
回复
gz_qmc 2013-01-28
楼主缺乏的是思路,我看楼上这些人,思维也比较混乱 楼主的问题其实是实现这个过程 第一步,读一行 第二步,查找读到的数据有没有包含要比较的字串 有,那么刚读取的数据就是结果 没有,那么循环,往下再读一行进行比较. 直到文件结束.
  • 打赏
  • 举报
回复
天涯洪七公 2013-01-28
如果数据很多的话,我建议你用fstream读取,我看每个数据都是用$8结尾的,用这个判断 ,当$8前面是你需要的数据时你就保存起来……
  • 打赏
  • 举报
回复
rxguoblp 2013-01-28
CString.Find("$")//查找 CString.Mid(pos1,pos2)//截取
  • 打赏
  • 举报
回复
jimette 2013-01-28
看来只有像一楼那样自己比较! 使用这个
// crt_strcmp.c

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

char string1[] = "The quick brown dog jumps over the lazy fox";
char string2[] = "The QUICK brown dog jumps over the lazy fox";

int main( void )
{
   char tmp[20];
   int result;

   // Case sensitive
   printf( "Compare strings:\n   %s\n   %s\n\n", string1, string2 );
   result = strcmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof(tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof (tmp), "less than" );
   else
      strcpy_s( tmp, _countof (tmp), "equal to" );
   printf( "   strcmp:   String 1 is %s string 2\n", tmp );

   // Case insensitive (could use equivalent _stricmp)
   result = _stricmp( string1, string2 );
   if( result > 0 )
      strcpy_s( tmp, _countof (tmp), "greater than" );
   else if( result < 0 )
      strcpy_s( tmp, _countof (tmp), "less than" );
   else
      strcpy_s( tmp, _countof (tmp), "equal to" );
   printf( "   _stricmp:  String 1 is %s string 2\n", tmp );
}
  • 打赏
  • 举报
回复
小新蜡笔 2013-01-28
  • 打赏
  • 举报
回复
a278401627 2013-01-28
nizhiqiang1128 这位朋友,用你的代码已经可以的把2提取出来了,谢谢 不过现在的关键问题是怎么把6310A224488610$2$0.0.16$8; 这行读出来
  • 打赏
  • 举报
回复
快乐鹦鹉 2013-01-28
用CStdioFile逐行读取,判断
  • 打赏
  • 举报
回复
nizhiqiang1128 2013-01-28

CString str;
int npos;
str=6310A224488610$2$0.0.16$8;
npos=str.Find('$');
str.delete(0,npos+1);
npos=str.Find('$');
str=str.Left(npos);
此时str的值为第一个$和第二个$之间的字符串。
楼主可用while循环将整行以$分解成若干元素,直接取第二个元素。
  • 打赏
  • 举报
回复
a278401627 2013-01-28
还是没有朋友给出正确完整的代码,本人基础差 希望会的朋友给一下具体代码,非常感谢
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC
加入

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2013-01-28 02:13
社区公告

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