Voir le flux RSS

Roland Chastain

Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières

Noter ce billet
par , 24/09/2015 à 21h40 (479 Affichages)
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.

Voici le code du programme basé sur FLRE :

Code DELPHI : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
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) then
  begin
    WriteLn(Format('%d ms', [watch.ElapsedMilliseconds]));
 
    for i := 0 to Length(strings) - 1 do
    begin
      //writer.Write(string(strings[i, 0]) + #13#10);
      for j := 1 to Length(strings[i]) - 1 do
        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.
Miniatures attachées Fichiers attachés

Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Viadeo Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Twitter Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Google Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Facebook Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Digg Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Delicious Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog MySpace Envoyer le billet « Une nouvelle bibliothèque en Pascal pour l'utilisation des expressions régulières » dans le blog Yahoo

Mis à jour 25/09/2015 à 09h21 par Roland Chastain

Catégories
Sans catégorie

Commentaires