Bonjour à toutes et à tous,
Ca faisait longtemps.
J'utilise cette déclaration :
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 Type PFileStrucQDA_Cpt = ^TFileStrucQDA_Cpt; TFileStrucQDA_Cpt = packed record private __INT_TYPE : array[0..0] of AnsiChar; // 1 (alphanumérique) private __INT_COMPTE : array[0..7] of AnsiChar; // 8 private __INT_LIB : array[0..29] of AnsiChar; // 30 private __INT_CLEALPHA : array[0..6] of AnsiChar; // 7 private __INT_DEBNm1 : array[0..12] of AnsiChar; // 13 private __INT_CRENm1 : array[0..12] of AnsiChar; // 13 private __INT_DEBNm2 : array[0..12] of AnsiChar; // 13 private __INT_CRENm2 : array[0..12] of AnsiChar; // 13 private __INT_CPTCOLLEC : array[0..7] of AnsiChar; // 8 private __INT_ADR1 : array[0..29] of AnsiChar; // 30 private __INT_ADR2 : array[0..29] of AnsiChar; // 30 private __INT_ADRVille : array[0..29] of AnsiChar; // 30 private __INT_Tel : array[0..19] of AnsiChar; // 20 private __INT_Flag : array[0..0] of AnsiChar; // 1 private __INT_TypeCPT : array[0..0] of AnsiChar; // 1 private __INT_CPTCentral : array[0..0] of AnsiChar; // 1 private __INT_DomBancaire: array[0..29] of AnsiChar; // 30 private __INT_RIB : array[0..29] of AnsiChar; // 30 private __INT_ModReg : array[0..1] of AnsiChar; // 2 private __INT_NbJrsEch : array[0..1] of AnsiChar; // 2 private __INT_TermEch : array[0..1] of AnsiChar; // 2 private __INT_DepCalcEch : array[0..1] of AnsiChar; // 2 private __INT_CodeTVA : array[0..1] of AnsiChar; // 2 private __INT_CptCtPartie: array[0..7] of AnsiChar; // 8 private __INT_NbJrsEchs : array[0..2] of AnsiChar; // 3 private __INT_FlagTVA : array[0..0] of AnsiChar; // 1 private __INT_Fax : array[0..19] of AnsiChar; // 20 private __INT_ModReg4Pos : array[0..3] of AnsiChar; // 4 private __INT_Groupe4 : array[0..7] of AnsiChar; // 8 private __INT_Siret : array[0..13] of AnsiChar; // 14 private __INT_EditM2 : array[0..0] of AnsiChar; // 1 private __INT_Profession : array[0..29] of AnsiChar; // 30 private __INT_Pays : array[0..49] of AnsiChar; // 50 private __INT_JNLTreso : array[0..2] of AnsiChar; // 3 private __INT_PersMoral : array[0..0] of AnsiChar; // 1 private __INT_BonAPayer : array[0..0] of AnsiChar; // 1 private __INT_DEF : array[0..14] of AnsiChar; // 15 private __FinLigne : array[0..1] of AnsiChar; // 2 end;
et celle-ci
Ces deux déclarations me servent à lire un fichier text qui peut contenir ces 2 longueurs, pour y arriver aujourd'hui je découpe le fichier en 2, de la sorte :
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 Type PFileStrucQDA_Jnx = ^TFileStrucQDA_Jnx; TFileStrucQDA_Jnx = packed record private __INT_TYPE : array[0..0] of AnsiChar; // 1 (alphanumérique) private __INT_COMPTE : array[0..7] of AnsiChar; // 8 private __INT_JNL2c : array[0..1] of AnsiChar; // 2 private __INT_FOLIO : array[0..2] of AnsiChar; // 3 private __INT_DATE : array[0..5] of AnsiChar; // 6 private __INT_CODELIB : array[0..0] of AnsiChar; // 1 private __INT_LIBLibre : array[0..19] of AnsiChar; // 20 private __INT_SENS : array[0..0] of AnsiChar; // 1 private __INT_MTSIGNE : array[0..12] of AnsiChar; // 13 private __INT_CPTCTPARTIE: array[0..7] of AnsiChar; // 8 private __INT_DATEECH : array[0..5] of AnsiChar; // 6 private __INT_CODELETTR : array[0..1] of AnsiChar; // 2 private __INT_CODESTATS : array[0..2] of AnsiChar; // 3 private __INT_NUMPIECE5c : array[0..4] of AnsiChar; // 5 private __INT_CODEAFF : array[0..9] of AnsiChar; // 10 private __INT_QUANTITE1 : array[0..9] of AnsiChar; // 10 private __INT_NUMPIECE8c : array[0..7] of AnsiChar; // 8 private __INT_DEVISE : array[0..2] of AnsiChar; // 3 private __INT_JNL3c : array[0..2] of AnsiChar; // 3 private __INT_FLAGTVA : array[0..0] of AnsiChar; // 1 private __INT_CODETVA : array[0..0] of AnsiChar; // 1 private __INT_METHTVA : array[0..0] of AnsiChar; // 1 private __INT_LIBECRITURE: array[0..29] of AnsiChar; // 30 private __INT_CODETVA2c : array[0..1] of AnsiChar; // 2 private __INT_NUMPIECE10c: array[0..9] of AnsiChar; // 10 private __INT_RESERVE : array[0..9] of AnsiChar; // 10 private __INT_MTDEVISE : array[0..12] of AnsiChar; // 13 private __INT_PIECEJOINTE: array[0..11] of AnsiChar; // 12 private __INT_QUANTITE2 : array[0..9] of AnsiChar; // 10 private __INT_NUMUNIQ : array[0..9] of AnsiChar; // 10 private __INT_CodeOP : array[0..3] of AnsiChar; // 4 private __INT_DATASYST : array[0..13] of AnsiChar; // 14 private __FinLigne : array[0..1] of AnsiChar; // 2 end;
et ensuite j'utilise mes structures sur l'un et l'autre fichier avec FView
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 procedure QDAFileCesure(Fichier: TStringList; Chemin: String); Var i,j : integer; FileCpt, FileEcr: TStringList; // Permet de découper le fichier en 2 autres Begin FileCpt := TStringList.Create; FileEcr := TStringList.Create; Try for i := 0 to Fichier.Count - 1 do begin With TStringList.Create do begin try LoadFromFile(Fichier[i]); for j := 0 to Count - 1 do begin if LeftStr(Strings[j],1) = 'C' then FileCpt.Add(Strings[j]) else begin if LeftStr(Strings[j],1) = 'M' then FileEcr.Add(Strings[j]) end; End; finally Free; end; end; end; FileCpt.SaveToFile(Chemin+'QDAFileCpt.tmp'); FileEcr.SaveToFile(Chemin+'QDAFileEcr.tmp'); Finally FileCpt.Free; FileEcr.Free; End; End;
Je sais que si la première ligne de mon fichier, le caractère 1 est un 'C' c'est la strucutre TFileStrucQDA_Cpt, mais si c'est un 'M' c'est la structure TFileStrucQDA_Jnx.
PS (pour les puristes) : je souhaite conserver if .... = 'C' et if .... = 'M' (dans le futur je pourrais avoir d'autre lettre et dans ce cas je ferais un case indexStr
Existe-til un moyen de jumelée ces 2 structures ? où Comment éviter de découper mon fichier en 2 ?
Merci.
Partager