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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
| procedure TForm1.Button1Click(Sender: TObject);
const
cp1 = 'CAP DU NAVIRE'; cp2 = 'ANGLE DE BARRE BD'; cp3 = 'ANGLE DE BARRE TD';
cp4 = 'PAS DEMANDES TD'; cp5 = 'PAS OBTENUS TD'; cp6 = 'PAS DEMANDES BD';
cp7 = 'PAS OBTENUS BD';
var
S, Sc, Reste: string;
i, poCas1, poCas2, poDeg, poBAR, poRPM, poKW: integer;
pocp1, pocp2, pocp3, pocp4, pocp5, pocp6, pocp7: integer;
SL: tStringList;
procedure ReduireEspacesA1(var S: string);
// Réduit les répétitions d'espaces à un seul
var po: integer;
begin
po := pos(#32#32, S);
while po > 0 do begin Delete(S, po, 1); po := pos(#32#32, S); end;
end;
begin
SL := tStringList.Create;
SL.Sorted := True; // Liste triée pour tenter de regrouper de lignes qui se ressemblent
SL.Duplicates := dupAccept;
Sc := '';
RE1.Lines.LoadFromFile(RepAppli + 'Journal périodique Orig.txt');
for i := 0 to RE1.Lines.count - 1 do begin
//S := trim(RE1.Lines[i]);
S := RE1.Lines[i];
Sc := Sc + S; // Accumulation dans Sc de tout ce qui concerne le même enregistrement
ReduireEspacesA1(sc);
poCas1 := 0;
poBAR := pos(#32 + 'BAR', Sc); if (poBAR > 0) and (pos('BARRE', Sc) < 0) then poCas1 := poBAR;
poRPM := pos(#32 + 'RPM', Sc); if (poRPM > 0) then poCas1 := poRPM;
poCas2 := 0;
poDeg := pos(#32 + '°C', Sc); if (poDeg > 0) then poCas2 := poDeg;
poKW := pos(#32 + 'KW', Sc); if (poKW > 0) then poCas2 := poKW;
pocp1 := pos(cp1, Sc); pocp2 := pos(cp2, Sc); pocp3 := pos(cp3, Sc); pocp4 := pos(cp4, Sc);
pocp5 := pos(cp5, Sc); pocp6 := pos(cp6, Sc); pocp7 := pos(cp7, Sc);
if poCas1 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 1
Reste := Copy(sc, poCas1 + 4, MaxInt);
sc := Copy(sc, 1, poCas1 + 3);
ReduireEspacesA1(sc);
SL.Add(Sc); // on récupère Sc dans la stringList
sc := Reste;
end else
if poCas2 > 0 then begin // Fin de ce qui concerne le même enregistrement Cas 2
Reste := Copy(sc, poCas2 + 3, MaxInt);
sc := Copy(sc, 1, poCas2 + 2);
ReduireEspacesA1(sc);
SL.Add(Sc); // on récupère Sc dans la stringList
sc := Reste;
end else
if pocp1 > 0 then begin // 2-06-3-01 CAP DU NAVIRE OK 88.3
Reste := Copy(sc, pocp1 + length(cp1) + 8, MaxInt);
sc := Copy(sc, 1, pocp1 + length(cp1) + 7);
SL.Add(Sc); sc := Reste;
end else
if pocp2 > 0 then begin // 2-06-3-02 ANGLE DE BARRE BD OK -3.8
Reste := Copy(sc, pocp2 + length(cp2) + 8, MaxInt);
sc := Copy(sc, 1, pocp2 + length(cp2) + 7);
SL.Add(Sc); sc := Reste;
end else
if pocp3 > 0 then begin // 2-06-3-03 ANGLE DE BARRE TD OK 0.3
Reste := Copy(sc, pocp3 + length(cp3) + 7, MaxInt);
sc := Copy(sc, 1, pocp3 + length(cp3) + 6);
SL.Add(Sc); sc := Reste;
end else
if pocp4 > 0 then begin // 2-06-3-04 PAS DEMANDES TD OK 6.7
Reste := Copy(sc, pocp4 + length(cp4) + 7, MaxInt);
sc := Copy(sc, 1, pocp4 + length(cp4) + 6);
SL.Add(Sc); sc := Reste;
end else
if pocp5 > 0 then begin // 2-06-3-05 PAS OBTENUS TD OK 7.5
Reste := Copy(sc, pocp5 + length(cp5) + 7, MaxInt);
sc := Copy(sc, 1, pocp5 + length(cp5) + 6);
SL.Add(Sc); sc := Reste;
end else
if pocp6 > 0 then begin // 2-06-3-06 PAS DEMANDES BD OK 7.3
Reste := Copy(sc, pocp6 + length(cp6) + 7, MaxInt);
sc := Copy(sc, 1, pocp6 + length(cp6) + 6);
SL.Add(Sc); sc := Reste;
end else
if pocp7 > 0 then begin // 2-06-3-07 PAS OBTENUS BD OK 8.1
Reste := Copy(sc, pocp7 + length(cp7) + 7, MaxInt);
sc := Copy(sc, 1, pocp7 + length(cp7) + 6);
SL.Add(Sc); sc := Reste;
end
end;
SL.SaveToFile(repAppli + 'Journal_Classé.txt');
RE1.Lines.Assign(SL); // on affiche le résultat dans le même RichEdit
SL.Free;
end; |