【【【【DELPHI里面除了POS就没有别的查找字串的函数吗?解决方案

【【【【DELPHI里面除了POS就没有别的查找字串的函数吗?????
现在在程序下面有一个aaa.txt   里面的内容是   abc   abcd   11   111  

他们之间是有空格的!!,我想用一个代码来实现读取aaa.txt里面的内容,【精确】查找aaa.txt   里面有没有某些字符串,!!!

例如我想知道aaa.txt里有没有   ab   这个字符串,用POS返回来的消息会说他有(因为aaa.txt里面有abc   这个字符,


我知道在delphi   里面的POS能查找字符串,但是只能是模糊地查找,

  而我想精确的查找,有方法吗?各位不吝赐教几句话啊,!!!

------解决方案--------------------
你可以使用TStringList的Delimiter和DelimitedText属性
DelimitedText是指定一个字符串,Delimiter是指定一个分割的字符,比如:

sl.Delimiter := ', ';
sl.DelimitedText := 'a,bb,ccc,dddd ';

然后可以用TStringList的IndexOf来判断是否存在某个字符串
------解决方案--------------------
不明白楼主的精确是怎么定义的?
Pos函数可并不支持模糊查询哦, 在 'abc abcd 111 111 '中用Pos寻找 'ab '返回能找到这个完全正常啊。
如果楼主的意思是想整词匹配(Whole Words Only)的话,你可以先用Pos寻找,然后判断找到的内容后面的一个字符,如果这个字符是空格或标点符号或者后面无字符,则说明符合整词匹配。
------解决方案--------------------
给个整词匹配查找的例子:

uses Strutils;

function Pos_WholeWordsOnly(sFind, sData: String; iStart: Integer = 1): Integer;
var
iPos : Integer;
AChar: Char;
begin
Result := 0;
repeat
iPos := PosEx(sFind, sData, iStart);
if iPos > 0 then
begin
iStart := iPos + Length(sFind);
if iStart > = Length(sData) then
begin
Result := iPos;
break;
end
else begin
AChar := sData[iStart];
if not ((AChar > = 'A ') and (AChar <= 'Z ')) and
not ((AChar > = 'a ') and (AChar <= 'z ')) then
begin
Result := iPos;
break;
end;
end;
end;
until iPos <= 0;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage (IntToStr(Pos_WholeWordsOnly( 'ab ', 'abc abcd 111 ')));
ShowMessage (IntToStr(Pos_WholeWordsOnly( 'ab ', 'abc ab cd 111 ')));
end;

------解决方案--------------------
PosEx函数
------解决方案--------------------
楼主对POS函数的理解是错误的。

另:要实现特殊的功能,如果某函数不够用,完全可以自己写函数。
------解决方案--------------------
刚才写了一个字符串函数,(也不知是不是Delphi已提供这种功能的函数,如提供,那一定比我写得好得好 ^_^ ):

function MyPos_1(const SubStr, S : string) : integer;//返回子串个数
var
I : integer;
begin
Result := 0;
for I := 1 to Length(S)-Length(SubStr)+1 do
if CompareMem(@S[I], @SubStr[1], Length(SubStr)) then
Result := Result + 1;
end;

procedure TForm1.Button1Click(Sender: TObject);// 测试
begin
ShowMessage(Format( '字串 "abc123abc123abc "中共有%d个子串 "abc " ',[MyPos_1( 'abc ', 'abc123abc123abc ')]));
end;
------解决方案--------------------
再比如我又给你写了一个:(模糊查询的)我的代码可能不是高效的,但应该可以用。

function MyPos_2(const SubStr, S : string) : integer; //模糊查询,返回子串个数,一个?代表一个模糊字符
procedure ChangeStr(const Sub : string; var SS : string);
var I : integer;
begin
for I := 1 to Length(Sub) do
if Sub[I]= '? ' then SS[I] := '? ';
end;
var
I : integer;
sTemp : string;
begin
Result := 0;
for I := 1 to Length(S)-Length(SubStr)+1 do
begin
sTemp := Copy(S, I, Length(SubStr));