devham
Messages postés15Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 6 mars 2007
-
24 avril 2006 à 02:00
devham
Messages postés15Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 6 mars 2007
-
11 mai 2006 à 14:27
salut,
je developpe en VB.net , mais cette fois je suis obligé à faire une appliquation en VFP, l'objectif de cette appliquation c'est de verifier la structure de quatre fichiers en format .dbf .
la premiere étape c'est de comparer les champs de la column bac au fichier1.dbf, avec l'entete du fichier2.dbf :
fichier1.dbf =
x column1 x column2 x bac x column3 x
x a x b x nom x a1 x
x b x b1 x prenom x a2 x
x c x b2 x numero x a3 x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fichier2.dbf =
x nom x prenom x numero x
x x x x
x x x x
x x x x
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Comment faire pour verifier la structure de ces deux fichiers(tables) ?
merci. apres cette étape j V vous donnez la deuxieme étape.
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 20132 6 mai 2006 à 18:25
select matable
CLEAR
USE ? ALIAS maTable && Va chercher ta table
select matable
nCount = AFIELDS(MESCHAMPS,'MATABLE')
? nCount && Combien de champs on a.
select matable
scan
for i = 1 to nCount
?"Champs: "+ FIELD(i,ALIAS(),0)+ " Valeur :" +TRANSFORM(evaluate(field[i])) && De donne la value du champs
endfor
endscan
Ceci va te donner le nom du champ et la valeur du champs.
devham
Messages postés15Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 6 mars 2007 24 avril 2006 à 22:47
Merci, Merci, ca me donne de la force pour chercher et travailler mieux sur ce projet, je te promet, je trouverais la solution, et je vous lacherais le code.
devham
Messages postés15Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 6 mars 2007 26 avril 2006 à 03:15
j'ai posé le problem et maitenant je pose la solution , LOL
ce code est la solution :
close all
clear
*on selectionne le premier fichier gen
select 0
use "C:\FICHIERS\fichier1.dbf" alias gen
*on met les champs du colonne qui nous interesse dans un vecteur
i=1
declare vgen(100)
do while not eof()
*bac est l'alias du colonne que j'utilise
vgen(i)= alltr (gen.bac)
i=i+1
skip
enddo
nbrLigne = i
select 0
use "C:\FICHIERS\fichier2.dbf" alias dbff
nbrColumn = fcount()
*la commande afields()
*pour transformer notre tableau au vecteur deux dimensions
afields(dbff)
for i=1 to nbrColumn
if vgen(1) = dbff(i,1)
*c'est juste pour marquer le point de départ de comparaison
*parceque le bon truc, qu'on ne sais jamais notre point de depart
?'La premiere ligne du colonne BAC dans le fichier GEN du controle est : ' + dbff(i,1)
debutCompar = i
i=nbrColumn
endif
next
*une boucle pous parcourir les deux vecteur
*et comparaison en meme temps
j=1
m = debutCompar
nbrErreur = 0
do while j <> nbrLigne
if vgen(j) == dbff(m,1)
j=j+1
else
?'Erreur entre la Colonne '+dbff(m,1)+' et la Ligne '+vgen(j)
j=j+1
nbrErreur = nbrErreur + 1
endif
m = m+1
enddo
*nbrErreur est un compteur d'erreurs
if nbrErreur = 0
etat = .T.
else
etat = .F.
endif
if etat = .T.
?'La structure de de votre fichier est correcte'
else
?'Il existe'+str(nbrErreur)+' Erreur dans votre fichier '
endif
REMARQUE : la fonction afields() rend le fichier dbf ou (le tableau) sous forme d'un vecteur en deux dimensions, qu'on peut parcourir,
ca ve dire que l'emplacement de la colonne bac dans notre fichier1.dbf devien fichier1(3,1), biensur apres de faire afields(fichier1).
Merci bien, monsieur Mike Gagnon .
et Merci de m'alérter s'il y a une information ou expression, incorrecte,
"ne me donne pa du poissons, mais aprend moi comment le pecher"
Vous n’avez pas trouvé la réponse que vous recherchez ?
Mike Gagnon
Messages postés381Date d'inscriptionvendredi 15 octobre 2004StatutMembreDernière intervention24 octobre 20132 26 avril 2006 à 11:18
Ok, parfait. Maintenant que tu as compris le concept et en Foxpro en plus, voici comment moi j'aurais fais. Le principe est les meme que le tien, mais quelques raccourcis.
use "C:\FICHIERS\fichier1.dbf" ALIAS gen exclusive IN 0
INDEX ON BAC TAG BAC
** On crée un index sur le champ bac pour faire notre recherche
use "C:\FICHIERS\fichier2.dbf" alias dbff SHARED AGAIN IN 0
SELECT dbff
nCount = AFIELDS(leschamps,'dbff') && Compte les champs
FOR i = 1 TO nCount
SELECT gen
IF SEEK(leschamps[i,1]) && On cherche le nom du champs la premiere table
** On a trouvé le champs
ELSE
** les champs n'existe pas
endif
ENDFOR
devham
Messages postés15Date d'inscriptionlundi 24 avril 2006StatutMembreDernière intervention 6 mars 2007 11 mai 2006 à 14:27
Voici mon code :
CLOSE TABLES
CLEAR
SELECT 0
USE "c:\fichiers\control\monop1.gen" ALIAS monGen
genCount=AFIELDS(monGen)
i=1
DECLARE vecLgrille(3,500)
DO WHILE NOT EOF()
vecLgrille(1,i)= ALLTRIM(monGen.get)
vecLgrille(2,i)= ALLTRIM(monGen.Lgrille)
i=i+1
skip
ENDDO
SELECT 0
USE "c:\fichiers\control\monop1.dbf" ALIAS monDbf
nCount= AFIELDS(monDbf)
*?nCount
i=1
DO WHILE i<>nCount
IF ALLTRIM(vecLgrille(1,1))==ALLTRIM(monDbf(i,1))
debutCompar=i
i=nCount
ELSE
i=i+1
ENDIF
ENDDO
*?debutCompar
*LEN(ALLTRIM(TRANSFORM(evaluate(field[i]))))
SCAN
i=debutCompar
j=1
compErr=0
DO WHILE i<>genCount
*?mapof(i,1)
*?"Champs: "+FIELD(i)+" Valeur :"+TRANSFORM(evaluate(field[i]))+" Longueur "+STR(LEN(ALLTRIM(TRANSFORM(evaluate(field[i]))))) && De donne la value du champs
*?TRANSFORM(evaluate(field[i]))
*?ALLTRIM(STR(LEN(TRANSFORM(evaluate(field[i])))))
*?vecLgrille(2,j)
IF vecLgrille(2,j) < ALLTRIM(STR(LEN(TRANSFORM(evaluate(field[i])))))
?"Erreur"
?ALLTRIM(STR(LEN(TRANSFORM(evaluate(field[i])))))+' '+FIELD(i)
?vecLgrille(2,j)+' '+vecLgrille(1,j)
j=j+1
i=i+1
compErr=compErr+1
ELSE
j=j+1
i=i+1
ENDIF
ENDDO
ENDSCAN
IF compErr==0
?'bien'
ELSE
?ALLTRIM(STR(compErr))+' Erreur'
ENDIF