Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Bonjour à tous,
Voici mon problème. J'ai une table de données que je charge à partir d'un qvd et qui peut se présenter sous la forme suivante :
Event Code_précédent Code_actuel
123 1010101010101 1101010001010
124 0001010101010 1100101010100
125 1011001011001 1100101011010
126 1001010100001 1000111111100
127 1110011010110 1010100101010
Ce que je dois faire c'est comparer les valeurs des champs "Code_précédent" et "Code_actuel" et ajouter un champ Flag qui est à 0 ou 1 selon mon critère de comparaison.
Le problème c'est que la comparaison consiste à vérifier si les bits à 1 dans Code_précédent sont toujours à 1 dans Code_actuel.
Pour cela j'ai utilisé un ensemble d'instruction composé de bouches For et de If, et j'arrive bien à obtenir le résultat escompté.
Mais je ne vois pas du tout comment faire pour stocker ce résultat dans un nouveau champ. Faut-il utiliser une instruction STORE dans la boucle For? Utiliser plutôt une macro? Où placer cette procédure de comparaison?
Merci d'avance pour votre aide.
Cordialement,
un ideè
load *, WildMatch(C2, replace(C1, 0, '?')) as Result;
LOAD text(C1) as C1, text(C2) as C2 INLINE [
Event, C1, C2
123, 1010101010101, 1101010001010
124, 0001010101010, 1100101010100
125, 1011001011001, 1100101011010
126, 1001010100001, 1000111111100
127, 1110011010110, 1010100101010
200, 1110011010110, 1110011010110
201,1,1
202,10,11
203,10,00
204,10,01
205,10,10
];
Pour ajouter un chanp, il suffit d'appliquer une fonction sur un champ puis as xxx
LOAD x, y, z, if (x<z, 1, 0) as Flag
FROM/Resident xxxxx;
Je ne vois pas quelle fonction native permettrait de vérifier que les 1 sont toujours à la même place. Sauf à créer cette fonction dans VB. Dans ce cas, créer la fonction avec 2 paramètres, et l'appeler au cours du load.
Dans VB
Fuunction MaFonction(Param1, Param2) (aucun type)
XXXX
MaFonction = 1 (ou 0)
End Function
Et dans le load
LOAD xxxxxx, MaFonction(Code_Precedent, Code_Actuel) as Flag
FROM/Resident XXXx
Et ensuite STORE cette table si vous souhaitez la mettre dans un QVD pour réemploi ultérieur.
Fabrice
un ideè
load *, WildMatch(C2, replace(C1, 0, '?')) as Result;
LOAD text(C1) as C1, text(C2) as C2 INLINE [
Event, C1, C2
123, 1010101010101, 1101010001010
124, 0001010101010, 1100101010100
125, 1011001011001, 1100101011010
126, 1001010100001, 1000111111100
127, 1110011010110, 1010100101010
200, 1110011010110, 1110011010110
201,1,1
202,10,11
203,10,00
204,10,01
205,10,10
];
Excellent Massimo !!
Fabrice
Bonjour à tous et merci pour vos réponses.
La solution de Massimo marche parfaitement.