Bonjour,
avec beaucoup d'essais infructueux, vu mes faibles connaissances en expressions régulières, voici quelque chose qui semble fonctionner avec les lignes dans Memo1 et les résultats de la recherche dans Memo2
Il reste à épurer le résultat lorsqu'il comporte une lettre au début ou à la fin quand il y a 14 caractères.
Code : 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 {=======================================================================} procedure TForm1.Btn_ExpRegClick(Sender: TObject); var Expr : TPerlRegex ; i : integer ; Trouve : Boolean ; MaLigne : String ; Mes13Chiffres: string ; RegEx : String ; begin memo2.Clear; // Chargement des lignes de memo1 Memo1.Clear ; Memo1.lines.add('0 - Ta12gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('1 - Ta12gadaTsoinTsoin5710364579451005TrucMu795che' ); Memo1.lines.add('2 - a12gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('3 - Ta12gadaTsoinTsoin5710364579TrucMu795che' ); Memo1.lines.add('4 - a12gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('5 - Ta12gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('61234567891234gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('7123456789123gadaTsoinTsoin5710364579451TrucMu795che' ); Memo1.lines.add('8 - a1234567891234' ); Memo1.lines.add('9 - a12345678912345678914579451TrucMu795che' ); Memo1.lines.add('10 - aerte61234567891234' ); Memo1.lines.add('11 - retey7123456789123' ); Memo1.lines.add('12234567891234' ); Memo1.lines.add('1323456789123' ); // Recherche des codebars avec PerlRegEx RegEx := '^\d{13}(\D)|(^\d{13}$)|(\D\d{13})$|\D\d{13}\D' ; For i := 0 To Memo1.Lines.Count -1 Do Begin Expr := TPerlRegex.Create; Expr.Subject := utf8string(Memo1.Lines[i]) ; Expr.RegEx := RegEx ; Trouve := expr.Match ; If Trouve Then Begin Mes13Chiffres := Expr.MatchedText ; memo2.Lines.Add('Ligne '+ IntToStr(i)+ ' - ' + Mes13Chiffres ); End ; Expr.Free; End ; end; {=======================================================================}
Peut être faudrait il sortir le Create et le Free de la boucle ?
A+
Charly
Partager