c代码在vc++6.0里提取txt文件中的一部分。

如:1.txt中有一下类容。。。。任意字符n个。。。a。。。。。b。。。任意字符n个。。要提取a和b之间的类容... 如:1.txt中有一下类容
。。。。任意字符n个。。。a。。。。。b。。。任意字符n个。。
要提取a和b之间的类容
展开
 我来答
拥云庄主
2013-03-29 · TA获得超过2505个赞
知道小有建树答主
回答量:672
采纳率:100%
帮助的人:446万
展开全部

写个函数就可以了:

 

//pText:文本指针

//cA起始标记

//cB结束标记

//pOutBuf接收提取内容的张缓冲区

int ExtractText(const char *pText, const char cA, const char cB, char *pOutBuf){

 if (pText == NULL || pOutBuf == NULL)

 {

  return 0;

 }

 

 char cTmp;//临时变量 

 char cBeginCopy = 0;//是否开始拷贝

 //是否找到起始标记,没有找到,认为提取失败

 char cIsFindA = 0;

 while ((cTmp = *pText++) != '\0') {

  if (!cBeginCopy)

  {

   if (cTmp == cA)

   {

    cBeginCopy = 1; 

    cIsFindA = 1;

   }

  }

  else

  {

   if (cTmp == cB)

   {

    break;

   }

 

   *pOutBuf = cTmp;   pOutBuf ++;

  }   

 

 }

 return cIsFindA;

}

 

测试代码:

 

int main() {

 

 char *pTest = "1234ahello world!b112"; 

//char *pTest = "1234ahello world!";//没有结束标记b的 

//char *pTest = "1234hello world!b112";//没有起始标记a 

 

char cBuf[100] = {0}; 

 if (ExtractText(pTest, 'a', 'b', cBuf))

 {

  printf("%s\n", cBuf);

 }

 else

 {

  printf("Extract error!\n");

 }

 

 return 0;

}

 

正常用例的测试结果:

追问
被匹配的字符串是在一个txt文件中,整个文本文件很大
追答
有多大啊?先获取一下文本大小,然后动态分配一块内存来存放文本里的字符串,然后再调用函数处理。不过如果文件非常大,处理起来会比较慢。

楼下的用strchr函数查找两个标记的方法也可行,不过需要考虑一下两个标记如果不存在的问题,而且需要遍历两次数据,效率比较低了,直接遍历一次即可提取出所需要的数据。
另外还可以把标记换成字符串,这样可以适应标记是由多个字符组成的情况:
重载一下函数:

int ExtractText(const char *pText, const char *pA, const char *pB, char *pOutBuf){

if (pText == NULL || pOutBuf == NULL)
{
return 0;
}

char *pTmp = (char *)pText;
char cBeginCopy = 0;
char cIsFindA = 0;

while (*pTmp++ != '\0')
{
if (!cBeginCopy)
{
if (strncmp(pTmp, pA, strlen(pA)) == 0)
{
cBeginCopy = 1;
cIsFindA = 1;
pTmp += (strlen(pA) - 1);//跳过起始标记长度
}
}
else
{
if (strncmp(pTmp, pB, strlen(pB)) == 0)
{
break;
}

*pOutBuf = *pTmp;
pOutBuf ++;
}

}

return cIsFindA;

}

测试:
char *pTest = "1234a1hello world!b11234";
char cBuf[100] = {0};

if (ExtractText(pTest, "a1", "b1", cBuf))
{
printf("%s\n", cBuf);
}
else
{
printf("Extract error!\n");
}
输出结果:hello world!
双鱼座大叔0309
2013-03-29 · TA获得超过255个赞
知道小有建树答主
回答量:209
采纳率:100%
帮助的人:168万
展开全部
用文件操作函数 fopen fgets
然后查找 a b所在的位置 strchr
记下指针位置,字符串长度就是len = pb-(pa+1);
strncpy(dst, pa+1, len);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式