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.

sam. 05 mars 2016, 11h24
foxlover
France France

atoutfox.public.association

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

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.


Permalink : http://www.atoutfox.org/nntp.asp?ID=0000017420
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