root / UFImpExp.pas @ 5
Historique | Voir | Annoter | Télécharger (45,36 ko)
1 | 3 | avalancogn | unit UFImpExp ;
|
---|---|---|---|
2 | |||
3 | interface
|
||
4 | |||
5 | uses
|
||
6 | Windows, Forms, Classes, Controls, Dialogs, StdCtrls, Buttons, UVariables; |
||
7 | |||
8 | type
|
||
9 | TFImpExp = class(TForm)
|
||
10 | LBMatiere: TListBox; |
||
11 | GBMatiere: TGroupBox; |
||
12 | GBAliment: TGroupBox; |
||
13 | LBAliment: TListBox; |
||
14 | GBFichier: TGroupBox; |
||
15 | LBFichier: TListBox; |
||
16 | SBExpMat: TSpeedButton; |
||
17 | SBImpMat: TSpeedButton; |
||
18 | SBExpAli: TSpeedButton; |
||
19 | SBImpAli: TSpeedButton; |
||
20 | EFichier: TEdit; |
||
21 | SBFichier: TSpeedButton; |
||
22 | SDFichier: TSaveDialog; |
||
23 | LTypeMat: TLabel; |
||
24 | CBTypeMat: TComboBox; |
||
25 | LTypeAli: TLabel; |
||
26 | CBTypeAli: TComboBox; |
||
27 | GBExpr: TGroupBox; |
||
28 | LFibres: TLabel; |
||
29 | LGal: TLabel; |
||
30 | LCompo: TLabel; |
||
31 | LAA: TLabel; |
||
32 | LAG: TLabel; |
||
33 | LMacro: TLabel; |
||
34 | LOligo: TLabel; |
||
35 | LTFibres: TLabel; |
||
36 | LTOligo: TLabel; |
||
37 | LTMacro: TLabel; |
||
38 | LTAG: TLabel; |
||
39 | LTAA: TLabel; |
||
40 | LdAA: TLabel; |
||
41 | LTCompo: TLabel; |
||
42 | LdCompo: TLabel; |
||
43 | LRap: TLabel; |
||
44 | LDig: TLabel; |
||
45 | procedure FormShow(Sender: TObject);
|
||
46 | procedure FormClose(Sender: TObject; var Action: TCloseAction); |
||
47 | procedure FormActivate(Sender: TObject);
|
||
48 | procedure FormDeactivate(Sender: TObject);
|
||
49 | procedure SBFichierClick(Sender: TObject);
|
||
50 | procedure SBExpMatClick(Sender: TObject);
|
||
51 | procedure SBImpMatClick(Sender: TObject);
|
||
52 | procedure SBExpAliClick(Sender: TObject);
|
||
53 | procedure SBImpAliClick(Sender: TObject);
|
||
54 | procedure CBTypeMatChange(Sender: TObject);
|
||
55 | procedure CBTypeAliChange(Sender: TObject);
|
||
56 | procedure FormCreate(Sender: TObject);
|
||
57 | private
|
||
58 | { D?clarations priv?es }
|
||
59 | ModifMat, ModifAli: Boolean; |
||
60 | F: TextFile; |
||
61 | ListCSV: TList; |
||
62 | Separator: String;
|
||
63 | procedure SaveMat;
|
||
64 | procedure SaveAli;
|
||
65 | function GetInteger(var I: Integer; var Ch: Char): Boolean; |
||
66 | function GetDouble(var D: Double; var Ch: Char): Boolean; |
||
67 | function GetString(var S: string; var Ch: Char): Boolean; |
||
68 | procedure FormatInToOut(const recIn: PRecCSV; var recOut: PRecCSV); |
||
69 | procedure FormatOutToIn(const recOut: PRecCSV; var recIn: PRecCSV); |
||
70 | procedure PutCSV(recIn: PRecCSV);
|
||
71 | public
|
||
72 | { D?clarations publiques }
|
||
73 | procedure DisplayConfig;
|
||
74 | end;
|
||
75 | |||
76 | var
|
||
77 | FImpExp: TFImpExp; |
||
78 | |||
79 | implementation
|
||
80 | |||
81 | uses
|
||
82 | SysUtils, gnugettext, UStrings, UInit, UUtil, UFindRec, UFConfig; |
||
83 | |||
84 | {$R *.dfm}
|
||
85 | |||
86 | { TFImpExp }
|
||
87 | |||
88 | procedure TFImpExp.FormCreate(Sender: TObject);
|
||
89 | begin
|
||
90 | if Screen.Fonts.IndexOf('Arial Unicode MS') <> -1 |
||
91 | then
|
||
92 | Font.Name := 'Arial Unicode MS';
|
||
93 | TranslateComponent(Self); |
||
94 | Constraints.MinWidth := 792 + (Width - ClientWidth);
|
||
95 | Width := Constraints.MinWidth; |
||
96 | Constraints.MinHeight := 416 + (Height - ClientHeight);
|
||
97 | Height := Constraints.MinHeight; |
||
98 | CBTypeMat.ItemIndex := 0;
|
||
99 | CBTypeAli.ItemIndex := 0;
|
||
100 | end;
|
||
101 | |||
102 | procedure TFImpExp.FormShow (Sender : TObject) ;
|
||
103 | begin
|
||
104 | ModifMat := FALSE ; |
||
105 | ModifAli := FALSE ; |
||
106 | ListCSV := TList.Create ; |
||
107 | Separator := ListSeparator; |
||
108 | // Ajustement du mode d'expression
|
||
109 | FConfig := TFConfig.Create(Self); // Cr?ation de la configuration
|
||
110 | DisplayConfig; // Affichage des libell?s
|
||
111 | FConfig.Release; // Lib?ration de la configuration
|
||
112 | end ;
|
||
113 | |||
114 | procedure TFImpExp.FormClose (Sender : TObject ; var Action : TCloseAction) ; |
||
115 | var
|
||
116 | i: Integer; |
||
117 | recIn: PRecCSV; |
||
118 | begin
|
||
119 | if ModifMat then SaveMat ; |
||
120 | if ModifAli then SaveAli ; |
||
121 | if ListCSV.Count > 0 |
||
122 | then
|
||
123 | for i := 0 to ListCSV.Count - 1 do |
||
124 | begin
|
||
125 | recIn := ListCSV[i]; |
||
126 | Dispose(recIn); |
||
127 | end;
|
||
128 | ListCSV.Free; |
||
129 | Action := caFree ; |
||
130 | NumWinImpExp := -1 ;
|
||
131 | end ;
|
||
132 | |||
133 | procedure TFImpExp.FormActivate (Sender : TObject) ;
|
||
134 | begin
|
||
135 | CBTypeMatChange (nil) ;
|
||
136 | CBTypeAliChange (nil) ;
|
||
137 | end ;
|
||
138 | |||
139 | procedure TFImpExp.FormDeactivate (Sender : TObject) ;
|
||
140 | begin
|
||
141 | if ModifMat then SaveMat ; |
||
142 | if ModifAli then SaveAli ; |
||
143 | end ;
|
||
144 | |||
145 | procedure TFImpExp.SaveMat ;
|
||
146 | begin
|
||
147 | ModifMat := FALSE ; |
||
148 | if MessageDlg (MsgSaveMat, mtConfirmation, [mbYes, mbNo], 0) = mrYes |
||
149 | then
|
||
150 | SaveMatiere |
||
151 | else
|
||
152 | LoadMatiere ; |
||
153 | end ;
|
||
154 | |||
155 | procedure TFImpExp.SaveAli ;
|
||
156 | begin
|
||
157 | ModifAli := FALSE ; |
||
158 | if MessageDlg (MsgSaveAli, mtConfirmation, [mbYes, mbNo], 0) = mrYes |
||
159 | then
|
||
160 | SaveAliment |
||
161 | else
|
||
162 | LoadAliment ; |
||
163 | end ;
|
||
164 | |||
165 | function TFImpExp.GetInteger (var I : Integer ; var Ch : Char) : Boolean ; |
||
166 | var
|
||
167 | S : string ;
|
||
168 | Fin : boolean ; |
||
169 | begin
|
||
170 | S := '' ;
|
||
171 | Read (F, Ch) ;
|
||
172 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
173 | while not Fin do |
||
174 | begin
|
||
175 | S := S + Ch ; |
||
176 | Read (F, Ch) ;
|
||
177 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
178 | end ;
|
||
179 | S := Trim (S) ; |
||
180 | result := TRUE ; |
||
181 | if Length (S) = 0 |
||
182 | then
|
||
183 | I := 0
|
||
184 | else
|
||
185 | try
|
||
186 | I := StrToInt (S) ; |
||
187 | except
|
||
188 | result := FALSE ; |
||
189 | end ;
|
||
190 | end ;
|
||
191 | |||
192 | function TFImpExp.GetDouble (var D : Double ; var Ch : Char) : Boolean ; |
||
193 | var
|
||
194 | S : string ;
|
||
195 | Fin : boolean ; |
||
196 | begin
|
||
197 | S := '' ;
|
||
198 | Read (F, Ch) ;
|
||
199 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
200 | while not Fin do |
||
201 | begin
|
||
202 | S := S + Ch ; |
||
203 | Read (F, Ch) ;
|
||
204 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
205 | end ;
|
||
206 | S := Trim (S) ; |
||
207 | result := TRUE ; |
||
208 | if Length (S) = 0 |
||
209 | then
|
||
210 | D := 0
|
||
211 | else
|
||
212 | try
|
||
213 | D := StrToFloat (S) ; |
||
214 | except
|
||
215 | result := FALSE ; |
||
216 | end ;
|
||
217 | end ;
|
||
218 | |||
219 | function TFImpExp.GetString (var S : string ; var Ch : Char) : Boolean ; |
||
220 | var
|
||
221 | Fin, Quoted : boolean ; |
||
222 | begin
|
||
223 | S := '' ;
|
||
224 | Read (F, Ch) ;
|
||
225 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
226 | Quoted := (Ch = '"') ;
|
||
227 | if Quoted
|
||
228 | then
|
||
229 | begin
|
||
230 | Read (F, Ch) ;
|
||
231 | Fin := (Ch = Chr (26)) ;
|
||
232 | while not Fin do |
||
233 | begin
|
||
234 | if (Ch = '"') |
||
235 | then
|
||
236 | begin
|
||
237 | Read (F, Ch) ;
|
||
238 | Fin := (Ch <> '"') ;
|
||
239 | Quoted := not ((Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26))) ; |
||
240 | end ;
|
||
241 | if not Fin |
||
242 | then
|
||
243 | begin
|
||
244 | S := S + Ch ; |
||
245 | Read (F, Ch) ;
|
||
246 | Fin := (Ch = Chr (26)) ;
|
||
247 | end ;
|
||
248 | end ;
|
||
249 | end
|
||
250 | else
|
||
251 | while not Fin do |
||
252 | begin
|
||
253 | S := S + Ch ; |
||
254 | Read (F, Ch) ;
|
||
255 | Fin := (Ch = Separator) or (Ch = Chr (13)) or (Ch = Chr (26)) ; |
||
256 | end ;
|
||
257 | result := not Quoted ;
|
||
258 | end ;
|
||
259 | |||
260 | procedure TFImpExp.FormatInToOut(const recIn: PRecCSV; var recOut: PRecCSV); |
||
261 | var
|
||
262 | i: Integer; |
||
263 | RapMS, RapTcompo, RapTAA, RapTAG, RapTMacro, RapTOligo, RapTFibres, RapDCompo, RapDAA: Double; |
||
264 | begin
|
||
265 | recOut.Nom := recIn.Nom; |
||
266 | recOut.Memo := recIn.Memo; |
||
267 | recOut.Typ := recIn.Typ; |
||
268 | if ConfTCompo = 0 |
||
269 | then // g/kg |
||
270 | recOut.CC.MS := recIn.CC.MS |
||
271 | else // % |
||
272 | recOut.CC.MS := recIn.CC.MS / 1000 * 100; |
||
273 | if ConfRap = 0 |
||
274 | then // sur frais |
||
275 | RapMS := recIn.CC.MS / 1000
|
||
276 | else // sur mati?re s?che |
||
277 | RapMS := 1;
|
||
278 | if ConfTCompo = 0 |
||
279 | then // g/kg |
||
280 | RapTCompo := RapMS |
||
281 | else // % |
||
282 | RapTCompo := 100 / 1000 * RapMS; |
||
283 | recOut.CC.MM := recIn.CC.MM * RapTCompo; |
||
284 | recOut.CC.MO := recIn.CC.MO * RapTCompo; |
||
285 | recOut.CC.Lip := recIn.CC.Lip * RapTCompo; |
||
286 | recOut.CC.MAT := recIn.CC.MAT * RapTCompo; |
||
287 | recOut.CC.Amidon := recIn.CC.Amidon * RapTCompo; |
||
288 | recOut.CC.Sucres := recIn.CC.Sucres * RapTCompo; |
||
289 | if ConfDig = 0 |
||
290 | then // CUD |
||
291 | RapDCompo := 1
|
||
292 | else // Teneur digestible |
||
293 | if ConfdCompo = 0 |
||
294 | then // g/kg |
||
295 | RapDCompo := 1 / 100 * RapMS |
||
296 | else // % |
||
297 | RapDCompo := 1 / 1000 * RapMS; |
||
298 | if ConfDig = 0 |
||
299 | then // CUD |
||
300 | begin
|
||
301 | recOut.CC.dMO_T := recIn.CC.dMO_T * RapDCompo; |
||
302 | recOut.CC.dMO_C := recIn.CC.dMO_C * RapDCompo; |
||
303 | recOut.CC.dLip_T := recIn.CC.dLip_T * RapDCompo; |
||
304 | recOut.CC.dLip_C := recIn.CC.dLip_C * RapDCompo; |
||
305 | recOut.CC.dMAT_T := recIn.CC.dMAT_T * RapDCompo; |
||
306 | recOut.CC.dMAT_C := recIn.CC.dMAT_C * RapDCompo; |
||
307 | end
|
||
308 | else // Teneur digestible |
||
309 | begin
|
||
310 | recOut.CC.dMO_T := recIn.CC.dMO_T * recIn.CC.MO * RapDCompo; |
||
311 | recOut.CC.dMO_C := recIn.CC.dMO_C * recIn.CC.MO * RapDCompo; |
||
312 | recOut.CC.dLip_T := recIn.CC.dLip_T * recIn.CC.Lip * RapDCompo; |
||
313 | recOut.CC.dLip_C := recIn.CC.dLip_C * recIn.CC.Lip * RapDCompo; |
||
314 | recOut.CC.dMAT_T := recIn.CC.dMAT_T * recIn.CC.MAT * RapDCompo; |
||
315 | recOut.CC.dMAT_C := recIn.CC.dMAT_C * recIn.CC.MAT * RapDCompo; |
||
316 | end;
|
||
317 | recOut.CC.EB := recIn.CC.EB * RapMS; |
||
318 | recOut.CC.ED_T := recIn.CC.ED_T * RapMS; |
||
319 | recOut.CC.ED_C := recIn.CC.ED_C * RapMS; |
||
320 | recOut.CC.EM_T := recIn.CC.EM_T * RapMS; |
||
321 | recOut.CC.EM_C := recIn.CC.EM_C * RapMS; |
||
322 | recOut.CC.EN_T := recIn.CC.EN_T * RapMS; |
||
323 | recOut.CC.EN_C := recIn.CC.EN_C * RapMS; |
||
324 | if ConfTMacro = 0 |
||
325 | then // g/kg |
||
326 | RapTMacro := RapMS |
||
327 | else // % |
||
328 | RapTMacro := 100 / 1000 * RapMS; |
||
329 | recOut.CC.Ca := recIn.CC.Ca * RapTMacro; |
||
330 | recOut.CC.P := recIn.CC.P * RapTMacro; |
||
331 | recOut.CC.Na := recIn.CC.Na * RapTMacro; |
||
332 | recOut.CC.K := recIn.CC.K * RapTMacro; |
||
333 | recOut.CC.Mg := recIn.CC.Mg * RapTMacro; |
||
334 | recOut.CC.Cl := recIn.CC.Cl * RapTMacro; |
||
335 | recOut.CC.S := recIn.CC.S * RapTMacro; |
||
336 | if ConfTOligo = 0 |
||
337 | then // mg/kg |
||
338 | RapTOligo := RapMS |
||
339 | else // % |
||
340 | RapTOligo := 100 / 1000000 * RapMS; |
||
341 | recOut.CC.Cu := recIn.CC.Cu * RapTOligo; |
||
342 | recOut.CC.Zn := recIn.CC.Zn * RapTOligo; |
||
343 | recOut.CC.Mn := recIn.CC.Mn * RapTOligo; |
||
344 | recOut.CC.Fe := recIn.CC.Fe * RapTOligo; |
||
345 | recOut.CC.Se := recIn.CC.Se * RapTOligo; |
||
346 | recOut.CC.Co := recIn.CC.Co * RapTOligo; |
||
347 | recOut.CC.Mb := recIn.CC.Mb * RapTOligo; |
||
348 | recOut.CC.I := recIn.CC.I * RapTOligo; |
||
349 | recOut.CC.PdigG := recIn.CC.PdigG * RapMS; |
||
350 | recOut.CC.PdigF := recIn.CC.PdigF * RapMS; |
||
351 | recOut.CC.Phytase := recIn.CC.Phytase; |
||
352 | recOut.CC.ActPhytE := recIn.CC.ActPhytE * RapMS; |
||
353 | recOut.CC.ActPhytM := recIn.CC.ActPhytM * RapMS; |
||
354 | recOut.CC.AGsLip := recIn.CC.AGsLip; |
||
355 | case ConfTAG of |
||
356 | 0 : // g/kg |
||
357 | RapTAG := 1000 / 100 * recIn.CC.AGsLip / 100 * recIn.CC.Lip / 1000 * RapMS; |
||
358 | 1 : // % |
||
359 | RapTAG := recIn.CC.AGsLip / 100 * recIn.CC.Lip / 1000 * RapMS; |
||
360 | else // % acides gras |
||
361 | RapTAG := 1;
|
||
362 | end;
|
||
363 | recOut.CC.C6C8C10 := recIn.CC.C6C8C10 * RapTAG; |
||
364 | recOut.CC.C12_0 := recIn.CC.C12_0 * RapTAG; |
||
365 | recOut.CC.C14_0 := recIn.CC.C14_0 * RapTAG; |
||
366 | recOut.CC.C16_0 := recIn.CC.C16_0 * RapTAG; |
||
367 | recOut.CC.C16_1 := recIn.CC.C16_1 * RapTAG; |
||
368 | recOut.CC.C18_0 := recIn.CC.C18_0 * RapTAG; |
||
369 | recOut.CC.C18_1 := recIn.CC.C18_1 * RapTAG; |
||
370 | recOut.CC.C18_2 := recIn.CC.C18_2 * RapTAG; |
||
371 | recOut.CC.C18_3 := recIn.CC.C18_3 * RapTAG; |
||
372 | recOut.CC.C18_4 := recIn.CC.C18_4 * RapTAG; |
||
373 | recOut.CC.C20_0 := recIn.CC.C20_0 * RapTAG; |
||
374 | recOut.CC.C20_1 := recIn.CC.C20_1 * RapTAG; |
||
375 | recOut.CC.C20_4 := recIn.CC.C20_4 * RapTAG; |
||
376 | recOut.CC.C20_5 := recIn.CC.C20_5 * RapTAG; |
||
377 | recOut.CC.C22_0 := recIn.CC.C22_0 * RapTAG; |
||
378 | recOut.CC.C22_1 := recIn.CC.C22_1 * RapTAG; |
||
379 | recOut.CC.C22_5 := recIn.CC.C22_5 * RapTAG; |
||
380 | recOut.CC.C22_6 := recIn.CC.C22_6 * RapTAG; |
||
381 | recOut.CC.C24_0 := recIn.CC.C24_0 * RapTAG; |
||
382 | if ConfTFibres = 0 |
||
383 | then // g/kg |
||
384 | RapTFibres := RapMS |
||
385 | else // % |
||
386 | RapTFibres := 100 / 1000 * RapMS; |
||
387 | recOut.CC.CB := recIn.CC.CB * RapTFibres; |
||
388 | if ConfDig = 0 |
||
389 | then // CUD |
||
390 | begin
|
||
391 | recOut.CC.dCB_T := recIn.CC.dCB_T * RapDCompo; |
||
392 | recOut.CC.dCB_C := recIn.CC.dCB_C * RapDCompo; |
||
393 | end
|
||
394 | else // Teneur digestible |
||
395 | begin
|
||
396 | recOut.CC.dCB_T := recIn.CC.dCB_T * recIn.CC.CB * RapDCompo; |
||
397 | recOut.CC.dCB_C := recIn.CC.dCB_C * recIn.CC.CB * RapDCompo; |
||
398 | end;
|
||
399 | recOut.CC.Residu := recIn.CC.Residu * RapTCompo; |
||
400 | if ConfDig = 0 |
||
401 | then // CUD |
||
402 | begin
|
||
403 | recOut.CC.dResidu_T := recIn.CC.dResidu_T * RapDCompo; |
||
404 | recOut.CC.dResidu_C := recIn.CC.dResidu_C * RapDCompo; |
||
405 | end
|
||
406 | else // Teneur digestible |
||
407 | begin
|
||
408 | recOut.CC.dResidu_T := recIn.CC.dResidu_T * recIn.CC.Residu * RapDCompo; |
||
409 | recOut.CC.dResidu_C := recIn.CC.dResidu_C * recIn.CC.Residu * RapDCompo; |
||
410 | end;
|
||
411 | recOut.CC.NDF := recIn.CC.NDF * RapTFibres; |
||
412 | recOut.CC.ADF := recIn.CC.ADF * RapTFibres; |
||
413 | recOut.CC.ADL := recIn.CC.ADL * RapTFibres; |
||
414 | recOut.CC.Parois := recIn.CC.Parois * RapTFibres; |
||
415 | case ConfTAA of |
||
416 | 1 : // % |
||
417 | RapTAA := 100 / 1000 * RapMS; |
||
418 | 2 : // % MAT |
||
419 | if recIn.CC.MAT = 0 |
||
420 | then
|
||
421 | RapTAA := 0
|
||
422 | else
|
||
423 | RapTAA := 100 / recIn.CC.MAT;
|
||
424 | else // g/kg |
||
425 | RapTAA := RapMS; |
||
426 | end;
|
||
427 | for i := 1 to 12 do |
||
428 | recOut.AAtotal[i] := recIn.AAtotal[i] * RapTAA; |
||
429 | if ConfDig = 0 |
||
430 | then // CUD |
||
431 | RapDAA := 1
|
||
432 | else // Teneur digestible |
||
433 | if ConfdAA = 0 |
||
434 | then // g/kg |
||
435 | RapDAA := 1 / 100 * RapMS |
||
436 | else // % |
||
437 | RapDAA := 1 / 1000 * RapMS; |
||
438 | for i := 0 to 12 do |
||
439 | if ConfDig = 0 |
||
440 | then // CUD |
||
441 | recOut.CUDAA[i] := recIn.CUDAA[i] * RapDAA |
||
442 | else // Teneur digestible |
||
443 | recOut.CUDAA[i] := recIn.CUDAA[i] * recIn.AAtotal[i] * RapDAA; |
||
444 | end;
|
||
445 | |||
446 | procedure TFImpExp.FormatOutToIn(const recOut: PRecCSV; var recIn: PRecCSV); |
||
447 | var
|
||
448 | i: Integer; |
||
449 | RapMS, RapTcompo, RapTAA, RapTAG, RapTMacro, RapTOligo, RapTFibres, RapDCompo, RapDAA: Double; |
||
450 | begin
|
||
451 | recIn.Nom := recOut.Nom; |
||
452 | recIn.Memo := recOut.Memo; |
||
453 | recIn.Typ := recOut.Typ; |
||
454 | if ConfTCompo = 0 |
||
455 | then // g/kg |
||
456 | recIn.CC.MS := recOut.CC.MS |
||
457 | else // % |
||
458 | recIn.CC.MS := recOut.CC.MS / 100 * 1000; |
||
459 | if ConfRap = 0 |
||
460 | then // sur frais |
||
461 | if recIn.CC.MS = 0 |
||
462 | then
|
||
463 | RapMS := 0
|
||
464 | else
|
||
465 | RapMS := 1000 / recIn.CC.MS
|
||
466 | else // sur mati?re s?che |
||
467 | RapMS := 1;
|
||
468 | if ConfTCompo = 0 |
||
469 | then // g/kg |
||
470 | RapTCompo := RapMS |
||
471 | else // % |
||
472 | RapTCompo := 1000 / 100 * RapMS; |
||
473 | recIn.CC.MM := recOut.CC.MM * RapTCompo; |
||
474 | recIn.CC.MO := recOut.CC.MO * RapTCompo; |
||
475 | recIn.CC.Lip := recOut.CC.Lip * RapTCompo; |
||
476 | recIn.CC.MAT := recOut.CC.MAT * RapTCompo; |
||
477 | recIn.CC.Amidon := recOut.CC.Amidon * RapTCompo; |
||
478 | recIn.CC.Sucres := recOut.CC.Sucres * RapTCompo; |
||
479 | if ConfDig = 0 |
||
480 | then // CUD |
||
481 | RapDCompo := 1
|
||
482 | else // Teneur digestible |
||
483 | if ConfdCompo = 0 |
||
484 | then // g/kg |
||
485 | RapDCompo := 100 * RapMS
|
||
486 | else // % |
||
487 | RapDCompo := 1000 * RapMS;
|
||
488 | if ConfDig = 0 |
||
489 | then // CUD |
||
490 | begin
|
||
491 | recIn.CC.dMO_T := recOut.CC.dMO_T * RapDCompo; |
||
492 | recIn.CC.dMO_C := recOut.CC.dMO_C * RapDCompo; |
||
493 | recIn.CC.dLip_T := recOut.CC.dLip_T * RapDCompo; |
||
494 | recIn.CC.dLip_C := recOut.CC.dLip_C * RapDCompo; |
||
495 | recIn.CC.dMAT_T := recOut.CC.dMAT_T * RapDCompo; |
||
496 | recIn.CC.dMAT_C := recOut.CC.dMAT_C * RapDCompo; |
||
497 | end
|
||
498 | else // Teneur digestible |
||
499 | begin
|
||
500 | if recIn.CC.MO = 0 |
||
501 | then
|
||
502 | begin
|
||
503 | recIn.CC.dMO_T := 0;
|
||
504 | recIn.CC.dMO_C := 0;
|
||
505 | end
|
||
506 | else
|
||
507 | begin
|
||
508 | recIn.CC.dMO_T := recOut.CC.dMO_T / recIn.CC.MO * RapDCompo; |
||
509 | recIn.CC.dMO_C := recOut.CC.dMO_C / recIn.CC.MO * RapDCompo; |
||
510 | end;
|
||
511 | if recIn.CC.Lip = 0 |
||
512 | then
|
||
513 | begin
|
||
514 | recIn.CC.dLip_T := 0;
|
||
515 | recIn.CC.dLip_C := 0;
|
||
516 | end
|
||
517 | else
|
||
518 | begin
|
||
519 | recIn.CC.dLip_T := recOut.CC.dLip_T / recIn.CC.Lip * RapDCompo; |
||
520 | recIn.CC.dLip_C := recOut.CC.dLip_C / recIn.CC.Lip * RapDCompo; |
||
521 | end;
|
||
522 | if recIn.CC.MAT = 0 |
||
523 | then
|
||
524 | begin
|
||
525 | recIn.CC.dMAT_T := 0;
|
||
526 | recIn.CC.dMAT_C := 0;
|
||
527 | end
|
||
528 | else
|
||
529 | begin
|
||
530 | recIn.CC.dMAT_T := recOut.CC.dMAT_T / recIn.CC.MAT * RapDCompo; |
||
531 | recIn.CC.dMAT_C := recOut.CC.dMAT_C / recIn.CC.MAT * RapDCompo; |
||
532 | end;
|
||
533 | end;
|
||
534 | recIn.CC.EB := recOut.CC.EB * RapMS; |
||
535 | recIn.CC.ED_T := recOut.CC.ED_T * RapMS; |
||
536 | recIn.CC.ED_C := recOut.CC.ED_C * RapMS; |
||
537 | recIn.CC.EM_T := recOut.CC.EM_T * RapMS; |
||
538 | recIn.CC.EM_C := recOut.CC.EM_C * RapMS; |
||
539 | recIn.CC.EN_T := recOut.CC.EN_T * RapMS; |
||
540 | recIn.CC.EN_C := recOut.CC.EN_C * RapMS; |
||
541 | if ConfTMacro = 0 |
||
542 | then // g/kg |
||
543 | RapTMacro := RapMS |
||
544 | else // % |
||
545 | RapTMacro := 1000 / 100 * RapMS; |
||
546 | recIn.CC.Ca := recOut.CC.Ca * RapTMacro; |
||
547 | recIn.CC.P := recOut.CC.P * RapTMacro; |
||
548 | recIn.CC.Na := recOut.CC.Na * RapTMacro; |
||
549 | recIn.CC.K := recOut.CC.K * RapTMacro; |
||
550 | recIn.CC.Mg := recOut.CC.Mg * RapTMacro; |
||
551 | recIn.CC.Cl := recOut.CC.Cl * RapTMacro; |
||
552 | recIn.CC.S := recOut.CC.S * RapTMacro; |
||
553 | if ConfTOligo = 0 |
||
554 | then // mg/kg |
||
555 | RapTOligo := RapMS |
||
556 | else // % |
||
557 | RapTOligo := 1000000 / 100 * RapMS; |
||
558 | recIn.CC.Cu := recOut.CC.Cu * RapTOligo; |
||
559 | recIn.CC.Zn := recOut.CC.Zn * RapTOligo; |
||
560 | recIn.CC.Mn := recOut.CC.Mn * RapTOligo; |
||
561 | recIn.CC.Fe := recOut.CC.Fe * RapTOligo; |
||
562 | recIn.CC.Se := recOut.CC.Se * RapTOligo; |
||
563 | recIn.CC.Co := recOut.CC.Co * RapTOligo; |
||
564 | recIn.CC.Mb := recOut.CC.Mb * RapTOligo; |
||
565 | recIn.CC.I := recOut.CC.I * RapTOligo; |
||
566 | recIn.CC.PdigG := recOut.CC.PdigG * RapMS; |
||
567 | recIn.CC.PdigF := recOut.CC.PdigF * RapMS; |
||
568 | recIn.CC.Phytase := recOut.CC.Phytase; |
||
569 | recIn.CC.ActPhytE := recOut.CC.ActPhytE * RapMS; |
||
570 | recIn.CC.ActPhytM := recOut.CC.ActPhytM * RapMS; |
||
571 | recIn.CC.AGsLip := recOut.CC.AGsLip; |
||
572 | case ConfTAG of |
||
573 | 0 : // g/kg |
||
574 | if (recIn.CC.AGsLip = 0) or (recIn.CC.Lip = 0) |
||
575 | then
|
||
576 | RapTAG := 0
|
||
577 | else
|
||
578 | RapTAG := 100 / 1000 / recIn.CC.AGsLip * 100 / recIn.CC.Lip * 1000 * RapMS; |
||
579 | 1 : // % |
||
580 | if (recIn.CC.AGsLip = 0) or (recIn.CC.Lip = 0) |
||
581 | then
|
||
582 | RapTAG := 0
|
||
583 | else
|
||
584 | RapTAG := 1 / recIn.CC.AGsLip * 100 / recIn.CC.Lip * 1000 * RapMS; |
||
585 | else // % acides gras |
||
586 | RapTAG := 1;
|
||
587 | end;
|
||
588 | recIn.CC.C6C8C10 := recOut.CC.C6C8C10 * RapTAG; |
||
589 | recIn.CC.C12_0 := recOut.CC.C12_0 * RapTAG; |
||
590 | recIn.CC.C14_0 := recOut.CC.C14_0 * RapTAG; |
||
591 | recIn.CC.C16_0 := recOut.CC.C16_0 * RapTAG; |
||
592 | recIn.CC.C16_1 := recOut.CC.C16_1 * RapTAG; |
||
593 | recIn.CC.C18_0 := recOut.CC.C18_0 * RapTAG; |
||
594 | recIn.CC.C18_1 := recOut.CC.C18_1 * RapTAG; |
||
595 | recIn.CC.C18_2 := recOut.CC.C18_2 * RapTAG; |
||
596 | recIn.CC.C18_3 := recOut.CC.C18_3 * RapTAG; |
||
597 | recIn.CC.C18_4 := recOut.CC.C18_4 * RapTAG; |
||
598 | recIn.CC.C20_0 := recOut.CC.C20_0 * RapTAG; |
||
599 | recIn.CC.C20_1 := recOut.CC.C20_1 * RapTAG; |
||
600 | recIn.CC.C20_4 := recOut.CC.C20_4 * RapTAG; |
||
601 | recIn.CC.C20_5 := recOut.CC.C20_5 * RapTAG; |
||
602 | recIn.CC.C22_0 := recOut.CC.C22_0 * RapTAG; |
||
603 | recIn.CC.C22_1 := recOut.CC.C22_1 * RapTAG; |
||
604 | recIn.CC.C22_5 := recOut.CC.C22_5 * RapTAG; |
||
605 | recIn.CC.C22_6 := recOut.CC.C22_6 * RapTAG; |
||
606 | recIn.CC.C24_0 := recOut.CC.C24_0 * RapTAG; |
||
607 | if ConfTFibres = 0 |
||
608 | then // g/kg |
||
609 | RapTFibres := RapMS |
||
610 | else // % |
||
611 | RapTFibres := 1000 / 100 * RapMS; |
||
612 | recIn.CC.CB := recOut.CC.CB * RapTFibres; |
||
613 | if ConfDig = 0 |
||
614 | then // CUD |
||
615 | begin
|
||
616 | recIn.CC.dCB_T := recOut.CC.dCB_T * RapDCompo; |
||
617 | recIn.CC.dCB_C := recOut.CC.dCB_C * RapDCompo; |
||
618 | end
|
||
619 | else // Teneur digestible |
||
620 | if recIn.CC.CB = 0 |
||
621 | then
|
||
622 | begin
|
||
623 | recIn.CC.dCB_T := 0;
|
||
624 | recIn.CC.dCB_C := 0;
|
||
625 | end
|
||
626 | else
|
||
627 | begin
|
||
628 | recIn.CC.dCB_T := recOut.CC.dCB_T / recIn.CC.CB * RapDCompo; |
||
629 | recIn.CC.dCB_C := recOut.CC.dCB_C / recIn.CC.CB * RapDCompo; |
||
630 | end;
|
||
631 | recIn.CC.Residu := recOut.CC.Residu * RapTCompo; |
||
632 | if ConfDig = 0 |
||
633 | then // CUD |
||
634 | begin
|
||
635 | recIn.CC.dResidu_T := recOut.CC.dResidu_T * RapDCompo; |
||
636 | recIn.CC.dResidu_C := recOut.CC.dResidu_C * RapDCompo; |
||
637 | end
|
||
638 | else // Teneur digestible |
||
639 | if recIn.CC.Residu = 0 |
||
640 | then
|
||
641 | begin
|
||
642 | recIn.CC.dResidu_T := 0;
|
||
643 | recIn.CC.dResidu_C := 0;
|
||
644 | end
|
||
645 | else
|
||
646 | begin
|
||
647 | recIn.CC.dResidu_T := recOut.CC.dResidu_T / recIn.CC.Residu * RapDCompo; |
||
648 | recIn.CC.dResidu_C := recOut.CC.dResidu_C / recIn.CC.Residu * RapDCompo; |
||
649 | end;
|
||
650 | recIn.CC.NDF := recOut.CC.NDF * RapTFibres; |
||
651 | recIn.CC.ADF := recOut.CC.ADF * RapTFibres; |
||
652 | recIn.CC.ADL := recOut.CC.ADL * RapTFibres; |
||
653 | recIn.CC.Parois := recOut.CC.Parois * RapTFibres; |
||
654 | case ConfTAA of |
||
655 | 1 : // % |
||
656 | RapTAA := 1000 / 100 * RapMS; |
||
657 | 2 : // % MAT |
||
658 | RapTAA := recIn.CC.MAT / 100;
|
||
659 | else // g/kg |
||
660 | RapTAA := RapMS; |
||
661 | end;
|
||
662 | recIn.AAtotal[0] := recIn.CC.MAT;
|
||
663 | for i := 1 to 12 do |
||
664 | recIn.AAtotal[i] := recOut.AAtotal[i] * RapTAA; |
||
665 | if ConfDig = 0 |
||
666 | then // CUD |
||
667 | RapDAA := 1
|
||
668 | else // Teneur digestible |
||
669 | if ConfdAA = 0 |
||
670 | then // g/kg |
||
671 | RapDAA := 100 * RapMS
|
||
672 | else // % |
||
673 | RapDAA := 1000 * RapMS;
|
||
674 | for i := 0 to 12 do |
||
675 | if ConfDig = 0 |
||
676 | then // CUD |
||
677 | recIn.CUDAA[i] := recOut.CUDAA[i] * RapDAA |
||
678 | else // Teneur digestible |
||
679 | if recIn.AAtotal[i] = 0 |
||
680 | then
|
||
681 | recIn.CUDAA[i] := 0
|
||
682 | else
|
||
683 | recIn.CUDAA[i] := recOut.CUDAA[i] / recIn.AAtotal[i] * RapDAA; |
||
684 | end;
|
||
685 | |||
686 | procedure TFImpExp.PutCSV(recIn: PRecCSV);
|
||
687 | var
|
||
688 | i: Integer; |
||
689 | recOut: PRecCSV; |
||
690 | begin
|
||
691 | New(recOut); |
||
692 | FormatInToOut(recIn, recOut); |
||
693 | Append(f); |
||
694 | with recOut^ do |
||
695 | begin
|
||
696 | Write(f, AnsiQuotedStr(Nom, '"')); |
||
697 | Write(f, Separator, AnsiQuotedStr(Memo, '"')); |
||
698 | Write(f, Separator, Format('%d', [Typ])); |
||
699 | // Composition ?l?mentaire
|
||
700 | if ConfTCompo = 0 |
||
701 | then // g/kg |
||
702 | begin
|
||
703 | Write(f, Separator, Format('%1.1f', [CC.MS])); |
||
704 | Write(f, Separator, Format('%1.1f', [CC.MM])); |
||
705 | Write(f, Separator, Format('%1.1f', [CC.MO])); |
||
706 | Write(f, Separator, Format('%1.1f', [CC.Lip])); |
||
707 | Write(f, Separator, Format('%1.1f', [CC.MAT])); |
||
708 | Write(f, Separator, Format('%1.1f', [CC.Amidon])); |
||
709 | Write(f, Separator, Format('%1.1f', [CC.Sucres])); |
||
710 | end
|
||
711 | else // % |
||
712 | begin
|
||
713 | Write(f, Separator, Format('%1.2f', [CC.MS])); |
||
714 | Write(f, Separator, Format('%1.2f', [CC.MM])); |
||
715 | Write(f, Separator, Format('%1.2f', [CC.MO])); |
||
716 | Write(f, Separator, Format('%1.2f', [CC.Lip])); |
||
717 | Write(f, Separator, Format('%1.2f', [CC.MAT])); |
||
718 | Write(f, Separator, Format('%1.2f', [CC.Amidon])); |
||
719 | Write(f, Separator, Format('%1.2f', [CC.Sucres])); |
||
720 | end;
|
||
721 | if (ConfDig = 0) |
||
722 | then // CUD |
||
723 | begin
|
||
724 | Write(f, Separator, Format('%1.1f', [CC.dMO_T])); |
||
725 | Write(f, Separator, Format('%1.1f', [CC.dMO_C])); |
||
726 | Write(f, Separator, Format('%1.1f', [CC.dLip_T])); |
||
727 | Write(f, Separator, Format('%1.1f', [CC.dLip_C])); |
||
728 | Write(f, Separator, Format('%1.1f', [CC.dMAT_T])); |
||
729 | Write(f, Separator, Format('%1.1f', [CC.dMAT_C])); |
||
730 | end
|
||
731 | else // Teneur digestible |
||
732 | if ConfdCompo = 0 |
||
733 | then // g/kg |
||
734 | begin
|
||
735 | Write(f, Separator, Format('%1.1f', [CC.dMO_T])); |
||
736 | Write(f, Separator, Format('%1.1f', [CC.dMO_C])); |
||
737 | Write(f, Separator, Format('%1.1f', [CC.dLip_T])); |
||
738 | Write(f, Separator, Format('%1.1f', [CC.dLip_C])); |
||
739 | Write(f, Separator, Format('%1.1f', [CC.dMAT_T])); |
||
740 | Write(f, Separator, Format('%1.1f', [CC.dMAT_C])); |
||
741 | end
|
||
742 | else // % |
||
743 | begin
|
||
744 | Write(f, Separator, Format('%1.2f', [CC.dMO_T])); |
||
745 | Write(f, Separator, Format('%1.2f', [CC.dMO_C])); |
||
746 | Write(f, Separator, Format('%1.2f', [CC.dLip_T])); |
||
747 | Write(f, Separator, Format('%1.2f', [CC.dLip_C])); |
||
748 | Write(f, Separator, Format('%1.2f', [CC.dMAT_T])); |
||
749 | Write(f, Separator, Format('%1.2f', [CC.dMAT_C])); |
||
750 | end;
|
||
751 | Write(f, Separator, Format('%1.2f', [CC.EB])); |
||
752 | Write(f, Separator, Format('%1.2f', [CC.ED_T])); |
||
753 | Write(f, Separator, Format('%1.2f', [CC.ED_C])); |
||
754 | Write(f, Separator, Format('%1.2f', [CC.EM_T])); |
||
755 | Write(f, Separator, Format('%1.2f', [CC.EM_C])); |
||
756 | Write(f, Separator, Format('%1.2f', [CC.EN_T])); |
||
757 | Write(f, Separator, Format('%1.2f', [CC.EN_C])); |
||
758 | // Min?raux
|
||
759 | if ConfTMacro = 0 |
||
760 | then // g/kg |
||
761 | begin
|
||
762 | Write(f, Separator, Format('%1.2f', [CC.Ca])); |
||
763 | Write(f, Separator, Format('%1.2f', [CC.P])); |
||
764 | Write(f, Separator, Format('%1.2f', [CC.Na])); |
||
765 | Write(f, Separator, Format('%1.2f', [CC.K])); |
||
766 | Write(f, Separator, Format('%1.2f', [CC.Mg])); |
||
767 | Write(f, Separator, Format('%1.2f', [CC.Cl])); |
||
768 | Write(f, Separator, Format('%1.2f', [CC.S])); |
||
769 | end
|
||
770 | else // % |
||
771 | begin
|
||
772 | Write(f, Separator, Format('%1.3f', [CC.Ca])); |
||
773 | Write(f, Separator, Format('%1.3f', [CC.P])); |
||
774 | Write(f, Separator, Format('%1.3f', [CC.Na])); |
||
775 | Write(f, Separator, Format('%1.3f', [CC.K])); |
||
776 | Write(f, Separator, Format('%1.3f', [CC.Mg])); |
||
777 | Write(f, Separator, Format('%1.3f', [CC.Cl])); |
||
778 | Write(f, Separator, Format('%1.3f', [CC.S])); |
||
779 | end;
|
||
780 | if ConfTOligo = 0 |
||
781 | then // mg/kg |
||
782 | begin
|
||
783 | Write(f, Separator, Format('%1.2f', [CC.Cu])); |
||
784 | Write(f, Separator, Format('%1.2f', [CC.Zn])); |
||
785 | Write(f, Separator, Format('%1.2f', [CC.Mn])); |
||
786 | Write(f, Separator, Format('%1.2f', [CC.Fe])); |
||
787 | Write(f, Separator, Format('%1.2f', [CC.Se])); |
||
788 | Write(f, Separator, Format('%1.2f', [CC.Co])); |
||
789 | Write(f, Separator, Format('%1.2f', [CC.Mb])); |
||
790 | Write(f, Separator, Format('%1.2f', [CC.I])); |
||
791 | end
|
||
792 | else // % |
||
793 | begin
|
||
794 | Write(f, Separator, Format('%1.6f', [CC.Cu])); |
||
795 | Write(f, Separator, Format('%1.6f', [CC.Zn])); |
||
796 | Write(f, Separator, Format('%1.6f', [CC.Mn])); |
||
797 | Write(f, Separator, Format('%1.6f', [CC.Fe])); |
||
798 | Write(f, Separator, Format('%1.6f', [CC.Se])); |
||
799 | Write(f, Separator, Format('%1.6f', [CC.Co])); |
||
800 | Write(f, Separator, Format('%1.6f', [CC.Mb])); |
||
801 | Write(f, Separator, Format('%1.6f', [CC.I])); |
||
802 | end;
|
||
803 | Write(f, Separator, Format('%1.2f', [CC.PdigG])); |
||
804 | Write(f, Separator, Format('%1.2f', [CC.PdigF])); |
||
805 | Write(f, Separator, Format('%1.1f', [CC.Phytase])); |
||
806 | Write(f, Separator, Format('%1.0f', [CC.ActPhytE])); |
||
807 | Write(f, Separator, Format('%1.0f', [CC.ActPhytM])); |
||
808 | // Acides gras
|
||
809 | case ConfTAG of |
||
810 | 0 : // g/kg |
||
811 | begin
|
||
812 | Write(f, Separator, Format('%1.2f', [CC.C6C8C10])); |
||
813 | Write(f, Separator, Format('%1.2f', [CC.C12_0])); |
||
814 | Write(f, Separator, Format('%1.2f', [CC.C14_0])); |
||
815 | Write(f, Separator, Format('%1.2f', [CC.C16_0])); |
||
816 | Write(f, Separator, Format('%1.2f', [CC.C16_1])); |
||
817 | Write(f, Separator, Format('%1.2f', [CC.C18_0])); |
||
818 | Write(f, Separator, Format('%1.2f', [CC.C18_1])); |
||
819 | Write(f, Separator, Format('%1.2f', [CC.C18_2])); |
||
820 | Write(f, Separator, Format('%1.2f', [CC.C18_3])); |
||
821 | Write(f, Separator, Format('%1.2f', [CC.C18_4])); |
||
822 | Write(f, Separator, Format('%1.2f', [CC.C20_0])); |
||
823 | Write(f, Separator, Format('%1.2f', [CC.C20_1])); |
||
824 | Write(f, Separator, Format('%1.2f', [CC.C20_4])); |
||
825 | Write(f, Separator, Format('%1.2f', [CC.C20_5])); |
||
826 | Write(f, Separator, Format('%1.2f', [CC.C22_0])); |
||
827 | Write(f, Separator, Format('%1.2f', [CC.C22_1])); |
||
828 | Write(f, Separator, Format('%1.2f', [CC.C22_5])); |
||
829 | Write(f, Separator, Format('%1.2f', [CC.C22_6])); |
||
830 | Write(f, Separator, Format('%1.2f', [CC.C24_0])); |
||
831 | end;
|
||
832 | 1 : // % |
||
833 | begin
|
||
834 | Write(f, Separator, Format('%1.3f', [CC.C6C8C10])); |
||
835 | Write(f, Separator, Format('%1.3f', [CC.C12_0])); |
||
836 | Write(f, Separator, Format('%1.3f', [CC.C14_0])); |
||
837 | Write(f, Separator, Format('%1.3f', [CC.C16_0])); |
||
838 | Write(f, Separator, Format('%1.3f', [CC.C16_1])); |
||
839 | Write(f, Separator, Format('%1.3f', [CC.C18_0])); |
||
840 | Write(f, Separator, Format('%1.3f', [CC.C18_1])); |
||
841 | Write(f, Separator, Format('%1.3f', [CC.C18_2])); |
||
842 | Write(f, Separator, Format('%1.3f', [CC.C18_3])); |
||
843 | Write(f, Separator, Format('%1.3f', [CC.C18_4])); |
||
844 | Write(f, Separator, Format('%1.3f', [CC.C20_0])); |
||
845 | Write(f, Separator, Format('%1.3f', [CC.C20_1])); |
||
846 | Write(f, Separator, Format('%1.3f', [CC.C20_4])); |
||
847 | Write(f, Separator, Format('%1.3f', [CC.C20_5])); |
||
848 | Write(f, Separator, Format('%1.3f', [CC.C22_0])); |
||
849 | Write(f, Separator, Format('%1.3f', [CC.C22_1])); |
||
850 | Write(f, Separator, Format('%1.3f', [CC.C22_5])); |
||
851 | Write(f, Separator, Format('%1.3f', [CC.C22_6])); |
||
852 | Write(f, Separator, Format('%1.3f', [CC.C24_0])); |
||
853 | end
|
||
854 | else // % acides gras |
||
855 | begin
|
||
856 | Write(f, Separator, Format('%1.1f', [CC.C6C8C10])); |
||
857 | Write(f, Separator, Format('%1.1f', [CC.C12_0])); |
||
858 | Write(f, Separator, Format('%1.1f', [CC.C14_0])); |
||
859 | Write(f, Separator, Format('%1.1f', [CC.C16_0])); |
||
860 | Write(f, Separator, Format('%1.1f', [CC.C16_1])); |
||
861 | Write(f, Separator, Format('%1.1f', [CC.C18_0])); |
||
862 | Write(f, Separator, Format('%1.1f', [CC.C18_1])); |
||
863 | Write(f, Separator, Format('%1.1f', [CC.C18_2])); |
||
864 | Write(f, Separator, Format('%1.1f', [CC.C18_3])); |
||
865 | Write(f, Separator, Format('%1.1f', [CC.C18_4])); |
||
866 | Write(f, Separator, Format('%1.1f', [CC.C20_0])); |
||
867 | Write(f, Separator, Format('%1.1f', [CC.C20_1])); |
||
868 | Write(f, Separator, Format('%1.1f', [CC.C20_4])); |
||
869 | Write(f, Separator, Format('%1.1f', [CC.C20_5])); |
||
870 | Write(f, Separator, Format('%1.1f', [CC.C22_0])); |
||
871 | Write(f, Separator, Format('%1.1f', [CC.C22_1])); |
||
872 | Write(f, Separator, Format('%1.1f', [CC.C22_5])); |
||
873 | Write(f, Separator, Format('%1.1f', [CC.C22_6])); |
||
874 | Write(f, Separator, Format('%1.1f', [CC.C24_0])); |
||
875 | end;
|
||
876 | end ;
|
||
877 | Write(f, Separator, Format('%1.1f', [CC.AGsLip])) ; |
||
878 | // Fibres
|
||
879 | if ConfTFibres = 0 |
||
880 | then // g/kg |
||
881 | Write(f, Separator, Format('%1.1f', [CC.CB])) |
||
882 | else // % |
||
883 | Write(f, Separator, Format('%1.2f', [CC.CB])); |
||
884 | if (ConfDig = 0) |
||
885 | then // CUD |
||
886 | begin
|
||
887 | Write(f, Separator, Format('%1.1f', [CC.dCB_T])); |
||
888 | Write(f, Separator, Format('%1.1f', [CC.dCB_C])); |
||
889 | end
|
||
890 | else // Teneur digestible |
||
891 | if ConfdCompo = 0 |
||
892 | then // g/kg |
||
893 | begin
|
||
894 | Write(f, Separator, Format('%1.1f', [CC.dCB_T])); |
||
895 | Write(f, Separator, Format('%1.1f', [CC.dCB_C])); |
||
896 | end
|
||
897 | else // % |
||
898 | begin
|
||
899 | Write(f, Separator, Format('%1.2f', [CC.dCB_T])); |
||
900 | Write(f, Separator, Format('%1.2f', [CC.dCB_C])); |
||
901 | end;
|
||
902 | if ConfTCompo = 0 |
||
903 | then // g/kg |
||
904 | Write(f, Separator, Format('%1.1f', [CC.Residu])) |
||
905 | else // % |
||
906 | Write(f, Separator, Format('%1.2f', [CC.Residu])); |
||
907 | if (ConfDig = 0) |
||
908 | then // CUD |
||
909 | begin
|
||
910 | Write(f, Separator, Format('%1.1f', [CC.dResidu_T])); |
||
911 | Write(f, Separator, Format('%1.1f', [CC.dResidu_C])); |
||
912 | end
|
||
913 | else // Teneur digestible |
||
914 | if ConfdCompo = 0 |
||
915 | then // g/kg |
||
916 | begin
|
||
917 | Write(f, Separator, Format('%1.1f', [CC.dResidu_T])); |
||
918 | Write(f, Separator, Format('%1.1f', [CC.dResidu_C])); |
||
919 | end
|
||
920 | else // % |
||
921 | begin
|
||
922 | Write(f, Separator, Format('%1.2f', [CC.dResidu_T])); |
||
923 | Write(f, Separator, Format('%1.2f', [CC.dResidu_C])); |
||
924 | end;
|
||
925 | if ConfTFibres = 0 |
||
926 | then // g/kg |
||
927 | begin
|
||
928 | Write(f, Separator, Format('%1.1f', [CC.NDF])); |
||
929 | Write(f, Separator, Format('%1.1f', [CC.ADF])); |
||
930 | Write(f, Separator, Format('%1.1f', [CC.ADL])); |
||
931 | Write(f, Separator, Format('%1.1f', [CC.Parois])); |
||
932 | end
|
||
933 | else // % |
||
934 | begin
|
||
935 | Write(f, Separator, Format('%1.2f', [CC.NDF])); |
||
936 | Write(f, Separator, Format('%1.2f', [CC.ADF])); |
||
937 | Write(f, Separator, Format('%1.2f', [CC.ADL])); |
||
938 | Write(f, Separator, Format('%1.2f', [CC.Parois])); |
||
939 | end;
|
||
940 | // Acides amin?s
|
||
941 | if ConfTAA = 1 |
||
942 | then // % |
||
943 | for i := 1 to 12 do |
||
944 | Write(f, Separator, Format('%1.3f', [AAtotal[i]])) |
||
945 | else // %MAT ou g/kg |
||
946 | for i := 1 to 12 do |
||
947 | Write(f, Separator, Format('%1.2f', [AAtotal[i]])); |
||
948 | if ConfDig = 0 |
||
949 | then // CUD |
||
950 | for i := 0 to 12 do |
||
951 | Write(f, Separator, Format('%1.1f', [CUDAA[i]])) |
||
952 | else // Teneur digestible |
||
953 | if ConfdAA = 0 |
||
954 | then // g/kg |
||
955 | for i := 0 to 12 do |
||
956 | Write(f, Separator, Format('%1.2f', [CUDAA[i]])) |
||
957 | else // % |
||
958 | for i := 0 to 12 do |
||
959 | Write(f, Separator, Format('%1.3f', [CUDAA[i]])); |
||
960 | WriteLn(f); |
||
961 | end;
|
||
962 | CloseFile(f); |
||
963 | Dispose(recOut); |
||
964 | end;
|
||
965 | |||
966 | procedure TFImpExp.DisplayConfig;
|
||
967 | begin
|
||
968 | LRap.Caption := FConfig.CBRap.Items[ConfRap]; |
||
969 | LDig.Caption := FConfig.CBDig.Items[ConfDig]; |
||
970 | LTCompo.Caption := FConfig.CBTCompo.Items[ConfTCompo]; |
||
971 | LdCompo.Caption := FConfig.CBdCompo.Items[ConfDCompo]; |
||
972 | LTAA.Caption := FConfig.CBTAA.Items[ConfTAA]; |
||
973 | LdAA.Caption := FConfig.CBdAA.Items[ConfDAA]; |
||
974 | LTAG.Caption := FConfig.CBTAG.Items[ConfTAG]; |
||
975 | LTMacro.Caption := FConfig.CBTMacro.Items[ConfTMacro]; |
||
976 | LTOligo.Caption := FConfig.CBTOligo.Items[ConfTOligo]; |
||
977 | LTFibres.Caption := FConfig.CBTFibres.Items[ConfTFibres]; |
||
978 | end;
|
||
979 | |||
980 | procedure TFImpExp.CBTypeMatChange (Sender : TObject) ;
|
||
981 | begin
|
||
982 | StringsMatiere (LBMatiere.Items, CBTypeMat.ItemIndex, FALSE, FALSE) ; |
||
983 | end ;
|
||
984 | |||
985 | procedure TFImpExp.CBTypeAliChange (Sender : TObject) ;
|
||
986 | begin
|
||
987 | StringsAliment (LBAliment.Items, CBTypeAli.ItemIndex, FALSE) ; |
||
988 | end ;
|
||
989 | |||
990 | procedure TFImpExp.SBFichierClick (Sender : TObject) ;
|
||
991 | var
|
||
992 | i, lig, col: Integer; |
||
993 | recOut, recIn: PRecCSV; |
||
994 | Titre: String;
|
||
995 | ok: Boolean; |
||
996 | s: string;
|
||
997 | v: Double; |
||
998 | sep: Char; |
||
999 | begin
|
||
1000 | SDFichier.InitialDir := GetCurrentDir; |
||
1001 | if not SDFichier.Execute |
||
1002 | then // Annulation |
||
1003 | Exit; |
||
1004 | // effacement de la liste avant chargement
|
||
1005 | LBFichier.Clear; |
||
1006 | if ListCSV.Count > 0 |
||
1007 | then
|
||
1008 | for i := 0 to ListCSV.Count - 1 do |
||
1009 | begin
|
||
1010 | recIn := ListCSV[i]; |
||
1011 | Dispose(recIn); |
||
1012 | end;
|
||
1013 | ListCSV.Clear; |
||
1014 | EFichier.Text := SDFichier.FileName; |
||
1015 | AssignFile(F, SDFichier.FileName); |
||
1016 | LBFichier.Clear; |
||
1017 | // Composition du titre (avec remplacement du ';' par ListSeparator)
|
||
1018 | Titre := StringReplace(StrTitreCSV1, ';', Separator, [rfReplaceAll])
|
||
1019 | + StringReplace(StrTitreCSV2, ';', Separator, [rfReplaceAll])
|
||
1020 | + StringReplace(StrTitreCSV3, ';', Separator, [rfReplaceAll])
|
||
1021 | + StringReplace(StrTitreCSV4, ';', Separator, [rfReplaceAll])
|
||
1022 | + StringReplace(StrTitreCSV5, ';', Separator, [rfReplaceAll])
|
||
1023 | + StringReplace(StrTitreCSV6, ';', Separator, [rfReplaceAll])
|
||
1024 | + StringReplace(StrTitreCSV7, ';', Separator, [rfReplaceAll]);
|
||
1025 | if not FileExists(SDFichier.FileName) |
||
1026 | then // Le fichier n'existe pas : cr?ation avec titre |
||
1027 | begin
|
||
1028 | Rewrite(F); |
||
1029 | Writeln(F, Titre); |
||
1030 | CloseFile(F); |
||
1031 | Exit; |
||
1032 | end;
|
||
1033 | Reset(F); |
||
1034 | if Eof(F)
|
||
1035 | then // Le fichier est vide : insertion du titre |
||
1036 | begin
|
||
1037 | Writeln(F, Titre); |
||
1038 | CloseFile(F); |
||
1039 | Exit; |
||
1040 | end;
|
||
1041 | Readln(F, s); // Lecture de la ligne de titre
|
||
1042 | if Eof(F)
|
||
1043 | then // Il n'y a pas d'enregistrement |
||
1044 | begin
|
||
1045 | CloseFile(F); |
||
1046 | Exit; |
||
1047 | end;
|
||
1048 | lig := 1;
|
||
1049 | col := 1;
|
||
1050 | New(recOut); |
||
1051 | with recOut^ do |
||
1052 | repeat
|
||
1053 | ok := TRUE; |
||
1054 | case col of |
||
1055 | 1: // Nom |
||
1056 | begin
|
||
1057 | ok := GetString(s, sep); |
||
1058 | if ok then Nom := Trim(s); |
||
1059 | end;
|
||
1060 | 2: // Commentaire |
||
1061 | begin
|
||
1062 | ok := GetString(s, sep); |
||
1063 | if ok then Memo := s; |
||
1064 | end;
|
||
1065 | 3: // Type |
||
1066 | ok := GetInteger(Typ, sep); |
||
1067 | 4..98: // Valeurs |
||
1068 | begin
|
||
1069 | ok := GetDouble(v, sep); |
||
1070 | if ok
|
||
1071 | then
|
||
1072 | case col of |
||
1073 | 4: CC.MS := v;
|
||
1074 | 5: CC.MM := v;
|
||
1075 | 6: CC.MO := v;
|
||
1076 | 7: CC.Lip := v;
|
||
1077 | 8: CC.MAT := v;
|
||
1078 | 9: CC.Amidon := v;
|
||
1079 | 10: CC.Sucres := v;
|
||
1080 | 11: CC.dMO_T := v;
|
||
1081 | 12: CC.dMO_C := v;
|
||
1082 | 13: CC.dLip_T := v;
|
||
1083 | 14: CC.dLip_C := v;
|
||
1084 | 15: CC.dMAT_T := v;
|
||
1085 | 16: CC.dMAT_C := v;
|
||
1086 | 17: CC.EB := v;
|
||
1087 | 18: CC.ED_T := v;
|
||
1088 | 19: CC.ED_C := v;
|
||
1089 | 20: CC.EM_T := v;
|
||
1090 | 21: CC.EM_C := v;
|
||
1091 | 22: CC.EN_T := v;
|
||
1092 | 23: CC.EN_C := v;
|
||
1093 | 24: CC.Ca := v;
|
||
1094 | 25: CC.P := v;
|
||
1095 | 26: CC.Na := v;
|
||
1096 | 27: CC.K := v;
|
||
1097 | 28: CC.Mg := v;
|
||
1098 | 29: CC.Cl := v;
|
||
1099 | 30: CC.S := v;
|
||
1100 | 31: CC.Cu := v;
|
||
1101 | 32: CC.Zn := v;
|
||
1102 | 33: CC.Mn := v;
|
||
1103 | 34: CC.Fe := v;
|
||
1104 | 35: CC.Se := v;
|
||
1105 | 36: CC.Co := v;
|
||
1106 | 37: CC.Mb := v;
|
||
1107 | 38: CC.I := v;
|
||
1108 | 39: CC.PdigG := v;
|
||
1109 | 40: CC.PdigF := v;
|
||
1110 | 41: CC.Phytase := v;
|
||
1111 | 42: CC.ActPhytE := v;
|
||
1112 | 43: CC.ActPhytM := v;
|
||
1113 | 44: CC.C6C8C10 := v;
|
||
1114 | 45: CC.C12_0 := v;
|
||
1115 | 46: CC.C14_0 := v;
|
||
1116 | 47: CC.C16_0 := v;
|
||
1117 | 48: CC.C16_1 := v;
|
||
1118 | 49: CC.C18_0 := v;
|
||
1119 | 50: CC.C18_1 := v;
|
||
1120 | 51: CC.C18_2 := v;
|
||
1121 | 52: CC.C18_3 := v;
|
||
1122 | 53: CC.C18_4 := v;
|
||
1123 | 54: CC.C20_0 := v;
|
||
1124 | 55: CC.C20_1 := v;
|
||
1125 | 56: CC.C20_4 := v;
|
||
1126 | 57: CC.C20_5 := v;
|
||
1127 | 58: CC.C22_0 := v;
|
||
1128 | 59: CC.C22_1 := v;
|
||
1129 | 60: CC.C22_5 := v;
|
||
1130 | 61: CC.C22_6 := v;
|
||
1131 | 62: CC.C24_0 := v;
|
||
1132 | 63: CC.AGsLip := v;
|
||
1133 | 64: CC.CB := v;
|
||
1134 | 65: CC.dCB_T := v;
|
||
1135 | 66: CC.dCB_C := v;
|
||
1136 | 67: CC.Residu := v;
|
||
1137 | 68: CC.dResidu_T := v;
|
||
1138 | 69: CC.dResidu_C := v;
|
||
1139 | 70: CC.NDF := v;
|
||
1140 | 71: CC.ADF := v;
|
||
1141 | 72: CC.ADL := v;
|
||
1142 | 73: CC.Parois := v;
|
||
1143 | 74..85: AAtotal[col - 73] := v; |
||
1144 | 86..98: CUDAA[col - 86] := v; |
||
1145 | end;
|
||
1146 | end;
|
||
1147 | end ;
|
||
1148 | if not ok then Break; |
||
1149 | if (col = 98) or ((col = 1) and (Length(Nom) = 0)) |
||
1150 | then // Dernier champs ou ligne vide |
||
1151 | ok := (sep = Chr(13)) or (sep = Chr(26)) |
||
1152 | else
|
||
1153 | ok := (sep = Separator); |
||
1154 | if not ok then Break; |
||
1155 | if sep = Chr(13) then Read(F, sep); // Chr(10) |
||
1156 | if col = 98 |
||
1157 | then // Passage ? la ligne suivante |
||
1158 | begin
|
||
1159 | New(recIn); |
||
1160 | FormatOutToIn(recOut, recIn); |
||
1161 | recIn.AAtotal[0] := recIn.CC.MAT;
|
||
1162 | ListCSV.Add(recIn); |
||
1163 | LBFichier.Items.Add(Nom); |
||
1164 | Dispose(recOut); |
||
1165 | Inc(lig); |
||
1166 | col := 1;
|
||
1167 | New(recOut); |
||
1168 | end
|
||
1169 | else
|
||
1170 | if (col > 1) or (Length(Nom) > 0) |
||
1171 | then // Passage au champs suivant |
||
1172 | Inc(col); |
||
1173 | until sep = Chr(26); // Eof(f) |
||
1174 | Dispose(recOut); |
||
1175 | CloseFile(F); |
||
1176 | if not ok |
||
1177 | then // erreur de lecture |
||
1178 | begin
|
||
1179 | MessageDlg(Format(MsgCSVError, [lig, col]), mtError, [mbOk], 0);
|
||
1180 | // effacement de la liste suite ? une erreur de lecture
|
||
1181 | LBFichier.Clear; |
||
1182 | if ListCSV.Count > 0 |
||
1183 | then
|
||
1184 | for i := 0 to ListCSV.Count - 1 do |
||
1185 | begin
|
||
1186 | recIn := ListCSV[i]; |
||
1187 | Dispose(recIn); |
||
1188 | end;
|
||
1189 | ListCSV.Clear; |
||
1190 | EFichier.Text := '';
|
||
1191 | end;
|
||
1192 | end;
|
||
1193 | |||
1194 | procedure TFImpExp.SBExpMatClick (Sender : TObject) ;
|
||
1195 | var
|
||
1196 | i, j : integer ; |
||
1197 | rec : PRecCSV ; |
||
1198 | begin
|
||
1199 | if EFichier.Text = '' |
||
1200 | then
|
||
1201 | begin
|
||
1202 | MessageDlg (MsgNoCSV, mtError, [mbOk], 0) ;
|
||
1203 | Exit ; |
||
1204 | end ;
|
||
1205 | if LBMatiere.Count = 0 |
||
1206 | then
|
||
1207 | begin
|
||
1208 | MessageDlg (MsgNoMat, mtError, [mbOk], 0) ;
|
||
1209 | Exit ; |
||
1210 | end ;
|
||
1211 | if LBMatiere.SelCount = 0 |
||
1212 | then
|
||
1213 | begin
|
||
1214 | MessageDlg (MsgNoMatSel, mtError, [mbOk], 0) ;
|
||
1215 | Exit ; |
||
1216 | end ;
|
||
1217 | for i := 0 to LBMatiere.Count - 1 do |
||
1218 | if LBMatiere.Selected[i]
|
||
1219 | then
|
||
1220 | begin
|
||
1221 | PMatiere := ListMatiere[FindIdxMatiere (LBMatiere.Items[i])] ; |
||
1222 | with PMatiere^ do |
||
1223 | begin
|
||
1224 | New (rec) ; |
||
1225 | rec.Nom := Nom ; |
||
1226 | rec.Memo := Memo ; |
||
1227 | rec.Typ := Typ ; |
||
1228 | rec.CC := CC ; |
||
1229 | for j := 0 to 12 do |
||
1230 | rec.AAtotal[j] := AAtotal[j] ; |
||
1231 | for j := 0 to 12 do |
||
1232 | rec.CUDAA[j] := CUDAA[j] ; |
||
1233 | ListCSV.Add (rec) ; |
||
1234 | PutCSV (rec) ; |
||
1235 | LBFichier.Items.Add (Nom) ; |
||
1236 | end ;
|
||
1237 | end ;
|
||
1238 | end ;
|
||
1239 | |||
1240 | procedure TFImpExp.SBImpMatClick (Sender : TObject) ;
|
||
1241 | var
|
||
1242 | i, j, n : integer ; |
||
1243 | ok : Boolean ; |
||
1244 | rec : PRecCSV ; |
||
1245 | begin
|
||
1246 | if EFichier.Text = '' |
||
1247 | then
|
||
1248 | begin
|
||
1249 | MessageDlg (MsgNoCSV, mtError, [mbOk], 0) ;
|
||
1250 | Exit ; |
||
1251 | end ;
|
||
1252 | if LBFichier.Count = 0 |
||
1253 | then
|
||
1254 | begin
|
||
1255 | MessageDlg (MsgNoImp, mtError, [mbOk], 0) ;
|
||
1256 | Exit ; |
||
1257 | end ;
|
||
1258 | if LBFichier.SelCount = 0 |
||
1259 | then
|
||
1260 | begin
|
||
1261 | MessageDlg (MsgNoImpSel, mtError, [mbOk], 0) ;
|
||
1262 | Exit ; |
||
1263 | end ;
|
||
1264 | n := 0 ;
|
||
1265 | for i := 0 to LBFichier.Count - 1 do |
||
1266 | if LBFichier.Selected[i]
|
||
1267 | then
|
||
1268 | begin
|
||
1269 | rec := ListCSV[i] ; |
||
1270 | repeat // V?rification du nom |
||
1271 | if Length (rec.Nom) > 35 |
||
1272 | then // Nom trop long |
||
1273 | begin
|
||
1274 | ok := FALSE ; |
||
1275 | MessageDlg (Format (MsgNameTooLarge, [35]), mtWarning, [mbOk], 0) ; |
||
1276 | rec.Nom := Copy (rec.Nom, 1, 35) ; |
||
1277 | end
|
||
1278 | else
|
||
1279 | begin
|
||
1280 | ok := TRUE ; |
||
1281 | j := 0 ;
|
||
1282 | while ok and (j < ListMatiere.Count) do |
||
1283 | begin
|
||
1284 | PMatiere := ListMatiere[j] ; |
||
1285 | if PMatiere.Nom = rec.Nom
|
||
1286 | then // Nom d?j? utilis? |
||
1287 | begin
|
||
1288 | ok := FALSE ; |
||
1289 | MessageDlg (MsgNameExists, mtWarning, [mbOk], 0) ;
|
||
1290 | end
|
||
1291 | else
|
||
1292 | Inc (j) ; |
||
1293 | end ;
|
||
1294 | end ;
|
||
1295 | if not ok |
||
1296 | then // Saisie du nom |
||
1297 | if not InputQuery (FImpExp.Caption, MsgName, rec.Nom) |
||
1298 | then // Annulation |
||
1299 | begin
|
||
1300 | ok := TRUE ; |
||
1301 | LBFichier.Selected[i] := FALSE ; |
||
1302 | end ;
|
||
1303 | until ok ;
|
||
1304 | if LBFichier.Selected[i]
|
||
1305 | then
|
||
1306 | begin
|
||
1307 | repeat // Recherche du premier num?ro libre |
||
1308 | Inc (n) ; |
||
1309 | ok := TRUE ; |
||
1310 | j := 0 ;
|
||
1311 | while ok and (j < ListMatiere.Count) do |
||
1312 | begin
|
||
1313 | PMatiere := ListMatiere[j] ; |
||
1314 | if PMatiere.Num = n
|
||
1315 | then
|
||
1316 | ok := FALSE |
||
1317 | else
|
||
1318 | Inc (j) ; |
||
1319 | end ;
|
||
1320 | until ok ;
|
||
1321 | ModifMat := TRUE ; |
||
1322 | New (PMatiere) ; |
||
1323 | with PMatiere^ do |
||
1324 | begin
|
||
1325 | Num := n ; |
||
1326 | Nom := rec.Nom ; |
||
1327 | Memo := rec.Memo ; |
||
1328 | if rec.Typ < 10 |
||
1329 | then // Mati?re premi?re |
||
1330 | Typ := rec.Typ |
||
1331 | else // Aliment |
||
1332 | begin
|
||
1333 | MessageDlg (Format (MsgAli2Mat, [Nom]), mtWarning, [mbOk], 0) ;
|
||
1334 | Typ := 0 ;
|
||
1335 | end ;
|
||
1336 | CC := rec.CC ; |
||
1337 | for j := 0 to 12 do |
||
1338 | AAtotal[j] := rec.AAtotal[j] ; |
||
1339 | for j := 0 to 12 do |
||
1340 | CUDAA[j] := rec.CUDAA[j] ; |
||
1341 | end ;
|
||
1342 | ListMatiere.Add (PMatiere) ; |
||
1343 | if (CBTypeMat.ItemIndex = 0) or (PMatiere.Typ = CBTypeMat.ItemIndex) |
||
1344 | then
|
||
1345 | LBMatiere.Items.Add (PMatiere.Nom) ; |
||
1346 | end ;
|
||
1347 | end ;
|
||
1348 | end ;
|
||
1349 | |||
1350 | procedure TFImpExp.SBExpAliClick (Sender : TObject) ;
|
||
1351 | var
|
||
1352 | i, j : integer ; |
||
1353 | rec : PRecCSV ; |
||
1354 | begin
|
||
1355 | if EFichier.Text = '' |
||
1356 | then
|
||
1357 | begin
|
||
1358 | MessageDlg (MsgNoCSV, mtError, [mbOk], 0) ;
|
||
1359 | Exit ; |
||
1360 | end ;
|
||
1361 | if LBAliment.Count = 0 |
||
1362 | then
|
||
1363 | begin
|
||
1364 | MessageDlg (MsgNoAli, mtError, [mbOk], 0) ;
|
||
1365 | Exit ; |
||
1366 | end ;
|
||
1367 | if LBAliment.SelCount = 0 |
||
1368 | then
|
||
1369 | begin
|
||
1370 | MessageDlg (MsgNoAliSel, mtError, [mbOk], 0) ;
|
||
1371 | Exit ; |
||
1372 | end ;
|
||
1373 | for i := 0 to LBAliment.Count - 1 do |
||
1374 | if LBAliment.Selected[i]
|
||
1375 | then
|
||
1376 | begin
|
||
1377 | PAliment := ListAliment[FindIdxAliment (LBAliment.Items[i])] ; |
||
1378 | with PAliment^ do |
||
1379 | begin
|
||
1380 | New (rec) ; |
||
1381 | rec.Nom := Nom ; |
||
1382 | rec.Memo := Memo ; |
||
1383 | rec.Typ := Typ * (Presentation + 1) + 10 ; |
||
1384 | rec.CC := CC ; |
||
1385 | for j := 0 to 12 do |
||
1386 | rec.AAtotal[j] := AAtotal[j] ; |
||
1387 | for j := 0 to 12 do |
||
1388 | rec.CUDAA[j] := CUDAA[j] ; |
||
1389 | ListCSV.Add (rec) ; |
||
1390 | PutCSV (rec) ; |
||
1391 | LBFichier.Items.Add (Nom) ; |
||
1392 | end ;
|
||
1393 | end ;
|
||
1394 | end ;
|
||
1395 | |||
1396 | procedure TFImpExp.SBImpAliClick (Sender : TObject) ;
|
||
1397 | var
|
||
1398 | i, j, k, n : integer ; |
||
1399 | ok : Boolean ; |
||
1400 | rec : PRecCSV ; |
||
1401 | begin
|
||
1402 | if EFichier.Text = '' |
||
1403 | then
|
||
1404 | begin
|
||
1405 | MessageDlg (MsgNoCSV, mtError, [mbOk], 0) ;
|
||
1406 | Exit ; |
||
1407 | end ;
|
||
1408 | if LBFichier.Count = 0 |
||
1409 | then
|
||
1410 | begin
|
||
1411 | MessageDlg (MsgNoImp, mtError, [mbOk], 0) ;
|
||
1412 | Exit ; |
||
1413 | end ;
|
||
1414 | if LBFichier.SelCount = 0 |
||
1415 | then
|
||
1416 | begin
|
||
1417 | MessageDlg (MsgNoImpSel, mtError, [mbOk], 0) ;
|
||
1418 | Exit ; |
||
1419 | end ;
|
||
1420 | n := 0 ;
|
||
1421 | for i := 0 to LBFichier.Count - 1 do |
||
1422 | if LBFichier.Selected[i]
|
||
1423 | then
|
||
1424 | begin
|
||
1425 | rec := ListCSV[i] ; |
||
1426 | repeat // V?rification du nom |
||
1427 | if Length (rec.Nom) > 35 |
||
1428 | then // Nom trop long |
||
1429 | begin
|
||
1430 | ok := FALSE ; |
||
1431 | MessageDlg (Format (MsgNameTooLarge, [35]), mtWarning, [mbOk], 0) ; |
||
1432 | rec.Nom := Copy (rec.Nom, 1, 35) ; |
||
1433 | end
|
||
1434 | else
|
||
1435 | begin
|
||
1436 | ok := TRUE ; |
||
1437 | j := 0 ;
|
||
1438 | while ok and (j < ListAliment.Count) do |
||
1439 | begin
|
||
1440 | PAliment := ListAliment[j] ; |
||
1441 | if PAliment.Nom = rec.Nom
|
||
1442 | then // Nom d?j? utilis? |
||
1443 | begin
|
||
1444 | ok := FALSE ; |
||
1445 | MessageDlg (MsgNameExists, mtWarning, [mbOk], 0) ;
|
||
1446 | end
|
||
1447 | else
|
||
1448 | Inc (j) ; |
||
1449 | end ;
|
||
1450 | end ;
|
||
1451 | if not ok |
||
1452 | then // Saisie du nom |
||
1453 | if not InputQuery (FImpExp.Caption, MsgName, rec.Nom) |
||
1454 | then // Annulation |
||
1455 | begin
|
||
1456 | ok := TRUE ; |
||
1457 | LBFichier.Selected[i] := FALSE ; |
||
1458 | end ;
|
||
1459 | until ok ;
|
||
1460 | if LBFichier.Selected[i]
|
||
1461 | then
|
||
1462 | begin
|
||
1463 | repeat // Recherche du premier num?ro libre |
||
1464 | Inc (n) ; |
||
1465 | ok := TRUE ; |
||
1466 | j := 0 ;
|
||
1467 | while ok and (j < ListAliment.Count) do |
||
1468 | begin
|
||
1469 | PAliment := ListAliment[j] ; |
||
1470 | if PAliment.Num = n
|
||
1471 | then
|
||
1472 | ok := FALSE |
||
1473 | else
|
||
1474 | Inc (j) ; |
||
1475 | end ;
|
||
1476 | until ok ;
|
||
1477 | ModifAli := TRUE ; |
||
1478 | New (PAliment) ; |
||
1479 | with PAliment^ do |
||
1480 | begin
|
||
1481 | Num := n ; |
||
1482 | Nom := rec.Nom ; |
||
1483 | Memo := rec.Memo ; |
||
1484 | if rec.Typ < 10 |
||
1485 | then // Mati?re premi?re |
||
1486 | begin
|
||
1487 | MessageDlg (Format (MsgMat2Ali, [Nom]), mtWarning, [mbOk], 0) ;
|
||
1488 | Typ := 0 ;
|
||
1489 | Presentation := 0 ;
|
||
1490 | end
|
||
1491 | else // Aliment |
||
1492 | begin
|
||
1493 | Typ := (rec.Typ - 10) mod 3 ; |
||
1494 | Presentation := (rec.Typ - 10) div 3 ; |
||
1495 | end ;
|
||
1496 | Prix := 0 ;
|
||
1497 | MP.NbMat := 0 ;
|
||
1498 | for k := 0 to MAX_MP do |
||
1499 | begin
|
||
1500 | MP.NumMat[k] := 0 ;
|
||
1501 | MP.MS[k] := 0 ;
|
||
1502 | MP.Qte[k] := 0 ;
|
||
1503 | end ;
|
||
1504 | CC := rec.CC ; |
||
1505 | for j := 0 to 12 do |
||
1506 | AAtotal[j] := rec.AAtotal[j] ; |
||
1507 | for j := 0 to 12 do |
||
1508 | CUDAA[j] := rec.CUDAA[j] ; |
||
1509 | end ;
|
||
1510 | ListAliment.Add (PAliment) ; |
||
1511 | if (CBTypeAli.ItemIndex = 0) or (PAliment.Typ = CBTypeAli.ItemIndex) |
||
1512 | then
|
||
1513 | LBAliment.Items.Add (PAliment.Nom) ; |
||
1514 | end ;
|
||
1515 | end ;
|
||
1516 | end ;
|
||
1517 | |||
1518 | end. |