我正在使用 FINDSTR 函数来过滤文本文件,但它在扩展 ASCII 字符上失败了。我尝试使用 CharToOEM 函数,但仍然有诸如“à”之类的字符,FINDSTR 似乎无法识别这些字符。
我想使用 FINDSTR,因为我使用的文本文件有 100MB 大,所以我需要一些快速的东西。是否存在一个函数,它重命名字符串,使它们没有“奇怪”的字符?
代码是:
CharToOEM(PChar(lASCFileNameFull),PChar(lASCFileNameFull));
renameFile(Format('%s.bak',[lASCFileNameFullBak]),Format('%s.bak',[lASCFileNameFull]));
Si.dwFlags:=STARTF_USESHOWWINDOW;
Si.wShowWindow:=SW_SHOWNORMAL;
SetFileApisToOEM;
CreateProcess(nil,pchar(Format('cmd.exe /K echo on && echo Processing filter...&& findstr "%s" %s.bak > %s',[commandString,lASCFileNameFull,lASCFileNameFull])),nil,nil,True,
0,nil,nil,Si,Pi);
WaitForSingleObject(pi.hProcess,INFINITE);
SetFileApisToANSI;
太糟糕了,FINDSTR 找不到文件...编辑:这是 Delphi 2007。
编辑:我想过使用像这样的循环:
while(!eof) do begin
readLN(mySrcFile, currentLine);
if strContains(currentLine, searchSyntax) then
writeLN(destFile,currentLine);
end;
不幸的是,我找不到这样的“strContains”函数(而且它可能会很慢)。搜索字符串并不复杂,它是一堆 HEX 值:“C2 | 1AF | B8 | ...”
最终编辑:有时最好回到基础:) 我只是通过测试字符值来用下划线替换所有扩展字符:
for I := 1 to length(lASCFileNameFull) do begin
if integer(lASCFileNameFull[i])>127 then
lASCFileNameFull[i]:='_';
end;
我希望有一天有人会使用它 :) 感谢您的帮助,Gramm