在文本文件中寻找匹配字符,送分!

flyflyflylflyfly 2003-04-21 09:07:23
各位高手,请问如何在程序执行过程中在指定的一批文本文件中找到给定的某些字符然后返回其位置。我想对一批文本文件进行操作比如在其中找到“姓名”字段然后就把后面的所有文字读出,遇到换行就重新寻找下一个给定字符。请各位高手指点!
...全文
57 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
竹背篼 2003-06-21
  • 打赏
  • 举报
回复
学习
clinton81 2003-06-21
  • 打赏
  • 举报
回复
顺便说一下,前几天做了个记事本(是我们的作业),用了BM算法,没有充分考虑中文问题(没时间考虑了),所以在“不区分大小写”搜索的时候会有中文字串误搜索的情况。现在有思路解决了,但没时间去改。
clinton81 2003-06-21
  • 打赏
  • 举报
回复
有两个方法:
一、用Memo1的自带搜索功能。用起来方便,但是体现不出你的水平。
二、自己写,使用一些成熟的搜索算法。如KMP或BM算法,其中BM算法优于KMP。
叶子哟 2003-06-21
  • 打赏
  • 举报
回复
看文件大不大了,不大的话,直接全读出来
看个正则的例子
TRegexp reg("[matq]");
unsigned int iS, iL;

iS= reg.find("01234567matq3456", &iL, 0);

ShowMessage(iS); //8

ShowMessage(iL);//1
叶子哟 2003-06-21
  • 打赏
  • 举报
回复
不知用正则表达式如何?
hong668 2003-06-21
  • 打赏
  • 举报
回复
同意:: BigFatBear(笨熊) ( )
用控件去做,如果想看不到隐藏就行了.
rebell 2003-06-21
  • 打赏
  • 举报
回复
现在没有cbuilder,但是我记得用indexof也可以,不过最好用Pos
好像是int SourceString.Pos(substring)。返回值是子字符串在源字符串中的位置。
还有一个字符串函数 StrPos(str1,str2),1为源,2为子字符串。
用以上的可以查出,以前也写过类似的。具体查查帮助或者有关文档就知道了
ljb198102 2003-04-23
  • 打赏
  • 举报
回复
\\纠正

字符串匹配算法(有复位法)
int pipai(long,short) \\如果查到匹配字符,则返回第一个匹配字符串首字符位置返回
\\返回-1
char long[100]\\原字符串
,short[5];\\目标字符串
{
int i,j;
i=j=0;
for (i=0;i<100;i++)
if (long[i]==short[j])
{
i++;
j++;
}
else if (i<96)
{
i=i-j+1;\\i 复位
j=0;\\j 复位
}
else
{
return -1;\\失败,返回-1
}
return (j-i+1);\\成功返回匹配首字符位置
}

效率很低!!!
仅供参考:

ljb198102 2003-04-23
  • 打赏
  • 举报
回复
字符串匹配算法(有复位法)
int pipai(long,short) \\如果查到匹配字符,则返回第一个匹配字符串首字符位置返回
\\返回-1
char long[100]\\原字符串
,short[5];\\目标字符串
{
int i,j;
i=j=0;
for (i=0;i<100;i++)
{
if (long[i]==short[j])
{
i++;
j++;
}
else if (i<96)
{
i=i-j+1;\\i 复位
j=0;\\j 复位
}
else
{
return -1;\\失败,返回-1
}
return (j-i+1);\\成功返回匹配首字符位置
}

效率很低!!!
仅供参考:
BigFatBear 2003-04-22
  • 打赏
  • 举报
回复
可以借有一下TMemo 控件
下面Memo1 是一个TMemo 实例(/对象 );

Memo1->Lines->LoadFromFile();
把文件内容装入,
然或借用控件的方法去查找吧!
也许能省一点劲!
SharpKing515 2003-04-21
  • 打赏
  • 举报
回复
不知道用这个行不行?
TStringList* pList = new TStringList;
pList->LoadFormFile("XXXXXX") ;
int nPos ;
AnsiString sTempStr ;
for(int i=0 ;i< pList->Count; ++i)
{
if((nPos=pList->IndexOf("姓名"))!=-1)
{
if(不等于换行)
{
.....
.....
}
....
.......
}
情况紧急。。。散人了先。不好意思。。。。



myy 2003-04-21
  • 打赏
  • 举报
回复
不逐行扫描,你如何"然后就把后面的所有文字读出,遇到换行...."

用fgets,做一个行号计数器,找到了,你直接把此行行号和内容输出出来就行了
小笨象 2003-04-21
  • 打赏
  • 举报
回复
对于每个文件来说,就必须逐行扫描,可以用fget取得每一行。
然后在取得的buffer中判断。
flyflyflylflyfly 2003-04-21
  • 打赏
  • 举报
回复
是逐个打开,不过真的要逐行扫描吗?
myy 2003-04-21
  • 打赏
  • 举报
回复
逐个文件打开,逐行扫描(xx电视机???)
flyflyflylflyfly 2003-04-21
  • 打赏
  • 举报
回复
好,我耐心等等吧,谢谢这位高手!
gdyt007 2003-04-21
  • 打赏
  • 举报
回复
這個是字符匹配的問題!
你等等!
我現在沒空幫你寫
有一個中英文問題
榜你up一下
很快就有高手來幫你的了!
耐心點
flyflyflylflyfly 2003-04-21
  • 打赏
  • 举报
回复
各位高手,响应一下吧!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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