lun. 07 mars 2016, 12h01
Guy BONEMME
atoutfox.public.association
Re: Récupération d'un fichier structure CSV pour usage en DBF
foxlover a exposé le 05/03/2016 :
> bonjour guy
>
> ci-joint un code que j'utilise souvent pour récupérer des données en csv et
> créer une table foxpro
>
nbcolonnes = VAL( INPUTBOX("NBRE DE COLONNES : ",""," 30") )
CREATE CURSOR BASENT ( aa1 C(250), aa2 C(250), aa3 C(254))
FOR i = 4 TO nbcolonnes
xx="AA" + ALLTRIM(STR(i))
ALTER TABLE basent ADD COLUMN &xx c(250)
ENDFOR
gcTable=GETFILE('CSV', "Choix d'un fichier CSV:", 'Rechercher', 1, "Recherche
d'un fichier CSV") IF !EMPTY(gcTable) AND FILE(gcTable)
*** choix du format du fichier source : par defaut csv délimité par ;
*APPEND FROM ? TYPE XLS
*APPEND FROM ? TYPE csv
* APPEND FROM ? DELIMITED WITH TAB && pour texte avec champ tabulé
*APPEND FROM ? DELIMITED WITH CHARACTER ","
APPEND FROM (gcTable) DELIMITED WITH CHARACTER ";"
DELETE FOR EMPTY(aa1)
CREATE CURSOR nomchamp (a1 c(10))
SELECT BASENT
GO top
FOR i = 1 TO nbcolonnes
xx1 = "aa"+ALLTRIM(STR(i))
xx2 = STRTRAN(&xx1," ","" )
xx2 = STRTRAN( xx2, ".", "")
xx2 = STRTRAN( xx2, "(", "")
xx2 = STRTRAN( xx2, ")", "")
xx2 = LOWER( ALLTRIM( LEFT( xx2, 10)) )
IF BETWEEN( ASC( LEFT(xx2,1) ),48,57)
xx2 = "Z"+xx2
ENDIF
IF !EMPTY(xx2)
SELECT nomchamp
LOCATE FOR ALLTRIM(a1)==ALLTRIM(xx2)
IF FOUND()
xx2 = CHR( ASC(LEFT(a1,1))+1 ) + xx2
ENDIF
APPEND BLANK
REPLACE a1 WITH xx2
TRY
SELECT BASENT
ALTER TABLE BASENT RENAME &xx1 to &xx2
CATCH
ENDTRY
ELSE
SELECT BASENT
ALTER TABLE BASENT DROP COLUMN &xx1
ENDIF
ENDFOR
USE IN nomchamp
SELECT BASENT
1
DELETE
GO TOP
DO colonne_numerique && plus bas pour passer des col en numeriques
DO colonne_taille && pour cadrer la taille des colonnes
MESSAGEBOX(" Traitement terminé ! ")
GO TOP
BROWSE
COPY TO c:\temp\avirer
return
**************************************************************************************************
PROCEDURE COLONNE_NUMERIQUE
**************************************************************************************************
zz=",POIDS,MINICDE,PA,PV0,PVTTC,PMPA,DERPACH,STOCK,SOLDE,escom,remise,acompte,totalrem,totregle,totht,tva,totttc,brutht,nbcol,qte,;
pvbrut,pubrut,pvnet,valtva,nombre,remcli,monpor,monpor1,monpor2,tvapor,tvapor0,TOTAL,valeur,debit,credit,tarif,marge,tpf11,tpf12,"
zz=zz+"pcb,tva1,tva2,remlig,perte,"
FOR i=1 TO 100
zz1 = AT(",",zz,i )+1
xx1 = UPPER( SUBSTR(zz, zz1,AT(",",zz,i+1) - zz1) )
IF EMPTY(xx1)
EXIT
ELSE
IF FSIZE(xx1)>0
REPLACE &xx1 WITH STRTRAN(&xx1, " ","") all
ALTER TABLE BASENT ALTER COLUMN &xx1 N(12,4)
ENDIF
ENDIF
ENDFOR
**************************************************************************************************
PROCEDURE COLONNE_TAILLE
**************************************************************************************************
FOR ii=1 TO Fcount()
xx2 = FIELD(ii) && nom du champ
xx3 = TYPE(FIELD(ii)) && type du cchamp
xx4 = FSIZE('&xx2') && taille champ
IF xx3 = "C"
CALCULATE MAX( LEN(ALLTRIM(&xx2)) ) TO xx
xx = IIF(xx=0, 10, xx)
ALTER TABLE basent alter COLUMN &xx2 &xx3 (xx)
ENDIF
ENDFOR
ENDPROC
>
> christian.
Merci Christian
Je teste à l'occasion, mon pb est actuellement règlé via excel
--
Guy BONEMME
Atoutfox
BEfox
Permalink : http://www.atoutfox.org/nntp.asp?ID=0000017437