我們經常用另一個「好」字符替換文件中不需要的字符。替換文件中的字符(更快的方法)
接口爲:
procedure cleanfileASCII2(vfilename: string; vgood: integer; voutfilename: string);
要使用我們可以稱之爲一個空間, cleanfileASCII2(original.txt,32,cleaned.txt)
的問題是,這種替換所有非desirables需要相當長的時間。有沒有 更好的方式來做到這一點?
procedure cleanfileASCII2(vfilename: string; vgood: integer; voutfilename:
string);
var
F1, F2: file of char;
Ch: Char;
tempfilename: string;
i,n,dex: integer;
begin
//original
AssignFile(F1, vfilename);
Reset(F1);
//outputfile
AssignFile(F2,voutfilename);
Rewrite(F2);
while not Eof(F1) do
begin
Read(F1, Ch);
//
n:=ord(ch);
if ((n<32)or(n>127))and (not(n in [10,13])) then
begin // bad char
if vgood<> -1 then
begin
ch:=chr(vgood);
Write(F2, Ch);
end
end
else //good char
Write(F2, Ch);
end;
CloseFile(F2);
CloseFile(F1);
end;
如果你更換`不是`CharInSet`(P^<>#10)和(P^<>#13)`你將有一個更快的循環。 CharInSet是內聯的,但不會改變任何內容。它使編譯器無法生成最佳代碼。 – 2009-05-28 15:51:19
或[#10,#13]中的'not P ^',這也是非常快的。 – 2009-05-28 20:04:49