我使用FINDSTR功能来过滤的文本文件,但它failling上扩展ASCII字符。 我尝试过使用CharToOEM函数,但我仍然有像'à'这样的字符,FINDSTR似乎没有识别。德尔福函数将字符串转换为DOS格式
我想使用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无法找到文件... 编辑:这是2007年德尔福
编辑:我想用像循环:不幸的是,我找不到这样的“strContains”函数(它可能会很慢)。搜索字符串是没有什么复杂的,这是一帮十六进制值:“C2 | 1AF | B8 | ...”
最后编辑: 有时候最好还是回到基本:) 我刚刚更换所有的扩展字符由下划线通过测试字符值:
for I := 1 to length(lASCFileNameFull) do begin
if integer(lASCFileNameFull[i])>127 then
lASCFileNameFull[i]:='_';
end;
我希望有人会用这一天:) 感谢您的帮助, 格拉姆
您需要添加'Si.cb:=中SizeOf(TStartupInfo);'你的代码,否则整个'的CreateProcess()调用'可能会失败。检查结果代码! – mghie 2009-09-22 14:31:17
增加了行:) – gramm 2009-09-22 15:05:51