ATOUTFOX
COMMUNAUTÉ FRANCOPHONE DES PROFESSIONNELS FOXPRO
Visual FoxPro : le développement durable

Forum AtoutFox : Re: Récupération d'un fichier structure CSV pour usage en DBF   

Sujet

rss Flux RSS des derniers messages

Vous devez vous identifier pour pouvoir poser une question ou répondre.

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 = LOWERALLTRIMLEFT( xx2, 10)) )
IF BETWEENASCLEFT(xx2,1) ),48,57)
xx2 = "Z"+xx2
ENDIF
IF !EMPTY(xx2)
SELECT nomchamp
LOCATE FOR ALLTRIM(a1)==ALLTRIM(xx2)
IF FOUND()
xx2 = CHRASC(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 = UPPERSUBSTR(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 MAXLEN(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
20 088 messages dans le forum • Liste complète des messages

Publicité

Les pubs en cours :


www.atoutfox.org - Site de la Communauté Francophone des Professionnels FoxPro - v3.4.0 - © 2004-2024.
Cette page est générée par un composant COM+ développé en Visual FoxPro 9.0-SP2-HF3