Nous remplaçons souvent les caractères non désirables dans un fichier avec un autre caractère "bon".remplacer les caractères dans un fichier (méthode plus rapide)
L'interface est:
procedure cleanfileASCII2(vfilename: string; vgood: integer; voutfilename: string);
Pour remplacer tous les non-desirables avec un espace que nous pourrions appeler, cleanfileASCII2 (original.txt, 32, cleaned.txt)
Le problème est que cette prend un temps assez long. Y at-il une meilleure façon de le faire que le montre?
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;
Et si vous remplacez le '' non CharInSet' par (P^<> # 10) et (P^<> # 13) 'vous aurez une boucle beaucoup plus rapide. CharInSet est en ligne mais cela ne change rien. Cela rend le compilateur incapable de générer du code optimal. –
Ou 'pas P^dans [# 10, # 13]', ce qui est aussi beaucoup plus rapide. –