Benjamin Rosseaux (dont le nom est français, mais qui est allemand) annonçait il y a quelques jours dans le forum Lazarus anglophone la parution de Fast Light Regular Expressions, une bibliothèque en Pascal Objet pour les compilateurs Free Pascal et Delphi.
Cette bibliothèque m'a fait forte impression, notamment à cause de sa rapidité. Le F de FLRE n'est pas un vain mot !
Je vous propose à titre d'exemple un programme, ou plutôt deux, qui font la même chose, l'un utilisant FLRE, l'autre l'unité RegularExpressions livrée avec Delphi. Les deux programmes lisent un fichier texte de trois mille lignes, contenant le chemin de toutes les DLL du répertoire C:\Windows\System32 de mon ordinateur. Chaque chemin est décomposé en trois parties, puis recomposé et enregistré dans un nouveau fichier qui pourra être comparé au premier.
program TestFLRE;
{$I DIRECTIVES}uses
SysUtils,
Classes,
IOUtils,
Diagnostics,
FLRE in'..\..\src\FLRE.pas',
FLREUnicode in'..\..\src\FLREUnicode.pas';
const
PATTERN = '([A-Z]:\\)(.+)(\.\w+)';
var
expr: TFLRE;
strings: TFLREMultiStrings;
writer: TStreamWriter;
watch: TStopWatch;
i, j: integer;
s: string;
begin
s := TFile.ReadAllText('1.txt');
expr := TFLRE.Create(PATTERN, []);
writer := TFile.CreateText('2.txt');
watch := TStopWatch.StartNew;
if expr.ExtractAll(RawByteString(s), strings)thenbegin
WriteLn(Format('%d ms', [watch.ElapsedMilliseconds]));
for i := 0to Length(strings) - 1dobegin//writer.Write(string(strings[i, 0]) + #13#10);for j := 1to Length(strings[i]) - 1do
writer.Write(string(strings[i, j]));
writer.WriteLine;
end;
end;
writer.Close;
SetLength(strings, 0);
expr.Free;
WriteLn('Terminé !');
ReadLn;
end.
La différence entre les temps d'exécution des deux programmes est étonnante : environ 4 secondes pour l'unité RegularExpressions, contre 50 millisecondes à peu près pour FLRE !
Vous trouverez un lien pour télécharger la bibliothèque Fast Light Regular Expressions sur cette page : FLRE.
Si vous le souhaitez, vous pouvez télécharger les sources des programmes dont il a été question dans ce billet.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité,
merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.