Bonjour !
Merci pour votre aide, mais comme souvent, on me demande plus : je dois faire des statistiques sur la sortie;
ainsi il me faudrait ajouter $0D$0A à la fin de chaque ligne des 13 signes OMR,
et j'en suis incapable, car je ne comprends pas tout le code
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 procedure TForm1.Button1Click(Sender: TObject); type TReadMode = (rmSearch, rmRead); const StartString :array [0..5] of byte = ($2b, $d3, $04, $d2, $01, $c5); EndString :byte = $5A; var msIN :TMemoryStream; msOut :TMemoryStream; StringIndex :integer; i :Int64; b :byte; Mode :TReadMode; begin msIN := TMemoryStream.Create; msOUT := TMemoryStream.Create; try msIN.LoadFromFile('c:\temp\qtra06.txt'); msIN.Position := 0; //Index dans la chaîne de départ StringIndex := 0; //Mode "Recherche" Mode := rmSearch; for i := 0 to msIN.Size -1 do begin //Lecture byte par byte msIN.ReadBuffer(b, 1); case Mode of rmSearch: //Recherche de la chaîne de départ if b = StartString[StringIndex] then begin //Tous les bytes testés -> Mode "Lecture" if StringIndex = High(StartString) then Mode := rmRead else inc(StringIndex); end else StringIndex := 0; rmRead: //Repasse en mode "Recherche" si caractère de fin trouvé //Sinon écriture dans le flux de sortie if b <> EndString then msOUT.WriteBuffer(b, 1) else begin Mode := rmSearch; StringIndex := 0; end; end; end; msOUT.SaveToFile('c:\temp\qtra06_OUT.txt'); finally msIN.Free; msOUT.Free; end; end;
Merci de me dépanner et salutations
Partager