la commande "COPY TO fichier.txt TYPE SDF" différences fpw26 et vfp
# 0000000133
ajouté le 08/01/2005 00:22:53 et modifié le 04/01/2014
consulté 11097 fois
Niveau
initié
mais si vous utilisez encore du fpw2.6 et des fichiers d'export ASCII,
alors voilà :
la commande :
COPY TO fichier.txt TYPE SDF
génére un fichier texte,
en foxpro 2.6 le fichier contient à la fin, en plus, un chr(26) alors qu'en VFP il n'y est pas...
cela peut être génant voir blocant dans des échanges type EDI;
je propose la solution suivante :
Code source :
clearall closeall settalkoff setsafetyoff clear
createtable fichier (test c(10)) appendblank replace test with"1234567890" copyto fichier.txt typesdf use
* le fichier ascii devrait contenir le 10 octets du champs + cr (13) + lf (10) * en vfp 9 : le fichier fait 12 octets * en vfp 7 : le fichier fait 12 octets * en vfp 6 : le fichier fait 12 octets * en fpw 2.6 : le fichier fait 13 octets sur disque ! : il y a un chr(26) en +
? SuppChr26("fichier.txt") && true en fpw26 et False en vfp7... return
function SuppChr26 parameters p_file private v_f, v_r, v_l, v_c
v_r = .F. ifFile(p_file)
v_f = Fopen(p_file, 2) if v_f>=0
v_l=Fseek(v_f, -1, 2) && -1 octets depuis 2=feof(), retourne la position
v_c = Fread(v_f, 1) ifAsc(v_c)=26 ifFchsize(v_f, v_l) >=0
v_r = .T. endif endif
=Fclose(v_f) endif endif return v_r
Commentaires
le 04/01/2014, JpG a écrit : Salut Francis, Et bien si, tu as bien fais... Lors de la reprise d'un programme en Fox 2.6 pour mettre en place les prélèvements SEPA, j'ai été piégé par ce CHR(26) en fin de fichier... Juste un petit truc à corriger pour le test : create table fichier (test c(10)) et non c(1).
Merci à toi. Jp GRANGER
le 04/01/2014, Francis Faure a écrit : Ok JP modifié. (ce n'était qu'un exemple datant de 2005 ^^)
Salut Francis,
Et bien si, tu as bien fais... Lors de la reprise d'un programme en Fox 2.6 pour mettre en place les prélèvements SEPA, j'ai été piégé par ce CHR(26) en fin de fichier...
Juste un petit truc à corriger pour le test :
create table fichier (test c(10)) et non c(1).
Merci à toi.
Jp GRANGER