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
| type
TStruc_Common = packed record
Type : array[1..3] of Char;
Ref : array[1..11] of char;
end;
TStruc_NO = packed record
Qty : array[1..5] of Char;
Des : array[1..50] of Char;
Autre : array[1..20] of Char;
Encore : array[1..20] of Char;
end;
TStruct_OR = packed record
Motif : array[1..150] of Char;
Mais : array[1..20] of Char;
Pourquoi : array[1..20] of Char;
end;
TStruct_END = packed record
Marque : array[1..2] of Char;
end;
Var
fichier : file; // fichier simple
ligne_Common : TStruct_Common;
ligne_NO : TStruct_NO;
ligne_OR :TStruct_OR ;
ligne_END :TStruct_END ;
AmtTransferred: Integer;
begin
AssignFile(fichier, FileName);
Reset(fichier, 1); // pour la lecture byte par byte ...
while not Eof(fichier) do
begin
// Lecture de l'Entête de Ligne contenant le Type de ligne et la référence
BlockRead(fichier, ligne_Common, SizeOf(ligne_Common), AmtTransferred);
if AmtTransferred <> SizeOf(ligne_Common) then
Abort;
ShowMessage(Ligne_NO.Ref);
if trim(ligne_Common.Type) = 'NO' then
begin
BlockRead(Fichier, Ligne_NO, SizeOf(Ligne_NO), AmtTransferred);
if AmtTransferred <> SizeOf(ligne_NO) then
Abort;
ShowMessage(Ligne_NO.Qty);
ShowMessage(Ligne_NO.Des);
ShowMessage(Ligne_NO.Autre);
ShowMessage(Ligne_NO.Encore);
end
else
begin
BlockRead(Fichier, Ligne_OR, SizeOf(Ligne_OR), AmtTransferred);
if AmtTransferred <> SizeOf(ligne_NO) then
Abort;
ShowMessage(Ligne_NO.Motif);
ShowMessage(Ligne_NO.Mais);
ShowMessage(Ligne_NO.Pourquoi);
end;
// on peut supposer un CR LF à la fin de chaque ligne, il ne faut pas les oublier
BlockRead(fichier, ligne_END, SizeOf(Ligne_END), AmtTransferred);
if AmtTransferred <> SizeOf(ligne_END) then
Abort;
end;
end; |
Partager