谁能帮我改改这个函数?!成功后再送300分!!!!!!!!!(50分)

  • 主题发起人 主题发起人 vivee
  • 开始时间 开始时间
V

vivee

Unregistered / Unconfirmed
GUEST, unregistred user!
我找到一个函数,功能是找到文件中“指定字符串”的位置。
function ScanFile(const FileName: string;
const forString: string;
caseSensitive: Boolean): Longint;
const
BufferSize = $8001; { 32K+1 bytes }
var
pBuf, pEnd, pScan, pPos: PChar;
filesize: LongInt;
bytesRemaining: LongInt;
bytesToRead: Integer;
F: file;
SearchFor: PChar;
oldMode: Word;
begin
{假设失败}
Result := -1;
if (Length(forString) = 0) or (Length(FileName) = 0) then Exit;
SearchFor := nil;
pBuf := nil;
{使用二进制方式打开文件, 1 字节记录 }
AssignFile(F, FileName);
oldMode := FileMode;
FileMode := 0; {只读访问 }
Reset(F, 1);
FileMode := oldMode;
try {分配内存缓冲}
SearchFor := StrAlloc(Length(forString) + 1);
StrPCopy(SearchFor, forString);
if not caseSensitive then {转换成大写}
AnsiUpper(SearchFor);
GetMem(pBuf, BufferSize);
filesize := System.Filesize(F);
bytesRemaining := filesize;
pPos := nil;
while bytesRemaining > 0 do
begin
if bytesRemaining >= BufferSize then
bytesToRead := Pred(BufferSize)
else
bytesToRead := bytesRemaining;
{ read a buffer full and zero-terminate the buffer }
BlockRead(F, pBuf^, bytesToRead, bytesToRead);
pEnd := @pBuf[bytesToRead];
pEnd^ := #0;
pScan := pBuf;
while pScan < pEnd do
begin
if not caseSensitive then {转换为大写}
AnsiUpper(pScan);
pPos := StrPos(pScan, SearchFor); {搜索子串 }
if pPos <> nil then
begin { Found it! }
Result := FileSize - bytesRemaining +
Longint(pPos) - Longint(pBuf);
Break;
end;
pScan := StrEnd(pScan);
Inc(pScan);
end;
if pPos <> nil then Break;
bytesRemaining := bytesRemaining - bytesToRead;
if bytesRemaining > 0 then
begin
Seek(F, FilePos(F) - Length(forString));
bytesRemaining := bytesRemaining + Length(forString);
end;
end;
finally
CloseFile(F);
if SearchFor <> nil then StrDispose(SearchFor);
if pBuf <> nil then FreeMem(pBuf, BufferSize);
end;
end;
我想改动这个函数,使它能够从文件中搜索“特征字符串”(比如email地址)的内容。
谁能帮我完成,成功后我再奉送300!!
 
那你用此函数指定搜索@,然后判断@前后的内容是否构成合法的email地址
 
全文扫帚一遍,找出含有@, . 的字符串,这个扫帚方法可以参考Classes.TParser

自己写一个也不是很难。。。
 
你的意思是不是想实现统配符类似的功能?
 
SEVN,通配符功能?怎么实现的?
 
我就是不会写才会问的,各位大富翁帮帮忙吧!!
 
为什么没有人看看?!
 
谁来帮我?!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
487
import
I
I
回复
0
查看
686
import
I
I
回复
0
查看
678
import
I
后退
顶部