Remplir des champs non renseignés dans un fichier texte

cs_manudel Messages postés 63 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 7 mars 2005 - 17 mai 2002 à 11:11
cs_manudel Messages postés 63 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 7 mars 2005 - 18 mai 2002 à 12:06
je vous donne un exemple de fichier texte que j'utilise.

TR27A10100009D2CC500000000000008800001
TR 13649780000008800001
TR 00000050000008800001
TR27A10100009D2CE100000000000000100002
TR27A10100009D2CF200000000000000100002
TR 00000100000000100002
TR27A10100009D2BF500000000000000100002

Les champs sont de longueur fixe.
Je récupère avec cette fonction les valeurs des champs :

function TfmMain.GetChamp(Source : String; Champ : Integer) : String;
var i, idx : Integer;
const sf : array[1..6] of Integer = (2,16,7,6,2,5);
begin
idx := 0;
for i := 1 to (Champ-1) do idx := idx + sf[i];
Result := Copy(Source, idx+1, sf[Champ]);
end;

Ces champs sont d'un certain type, comment faire pour remplir les champs textes non
renseignés par des espaces, et les champs numériques non renseignés par des 0 ?

5 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mai 2002 à 10:15
Un solution simple et efficace consiste à s'assurer que la chaine source contient au moins des espaces :
Au lieu de :
Result := Copy(Source, idx+1, sf[Champ]);

on peut mettre :
Result := Copy(Source+' ', idx+1, sf[Champ]);

Pour être plus fin, il faudrait ajouter autant d'espaces que la valeur retournée par sf[champ].

May Delphi be with you.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mai 2002 à 10:17
Et d'une, je n'ai répondu qu'à la première question.
Et de deux, le forum ne laisse apparaître qu'un espace là où j'en ai mis une bonne dizaine !

May Delphi be with you.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mai 2002 à 10:26
Suite...
Dans le cas d'un champ numérique non renseigné, la fonction retourne donc des espaces.
Pour convertir ces espaces en une valeur nulle (0), j'utiliserais :
StrToIntDef(GetChamp(Source, Champ), 0);
Ainsi, on est sûr de récupérer une valeur numérique.

May Delphi be with you.
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
18 mai 2002 à 10:44
Cà y est, je viens de retrouver la fonction dans SysUtils :
Au lieu de :
Result := Copy(Source, idx+1, sf[Champ]);

on peut mettre :
Result := Copy(Source+StringOfChar(#32, sf[Champ]), idx+1, sf[Champ]);

Là, on est sûr d'obtenir une chaîne de longueur voulue.

May Delphi be with you.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_manudel Messages postés 63 Date d'inscription lundi 29 avril 2002 Statut Membre Dernière intervention 7 mars 2005
18 mai 2002 à 12:06
Merci pour tes réponses, je vais mettre en application !
0
Rejoignez-nous