2012-06-28 8 views
1

Dans foxpro visuel, j'ai un curseur qui est le résultat d'une requête SQL, quand j'exporter le contenu de ce curseur sur un fichier csv en utilisant l'instruction:comment exporter un curseur foxpro vers un fichier CSV?

COPY TO "c:\test.csv" type DELIMITED 

toutes les données sont foiré, je fais ne spécifiez pas de délimiteur donc, en gros, foxpro prend la valeur par défaut, qui est chaque colonne de ce curseur. arc quand je lance la même commande dans un fichier xls, puis le convertir en un fichier csv ... il fonctionne très bien:

 COPY TO "c:\test.xls" type XL5 

quelqu'un a eu un tel problème, l'une utilisant encore foxpro et de faire des choses comme ceux?

+0

De quelle manière la sortie est-elle "foirée"? Pouvez-vous poster un échantillon? Quelle est la structure du curseur? – LAK

+0

merci pour votre réponse, les dates sont vides, toutes les valeurs numériques à 0 (sauf certains ... pourquoi je ne sais pas) et aussi sauter des enregistrements (quelques fois). donc je pense qu'il y a des bugs qui n'ont pas été corrigés dans cette version (7 ancienne version) et dont on ne peut rien faire, sauf si vous avez une solution magique qui va me sauver la vie :) – user1327073

+0

Odd. Je n'ai pas la version 7 à essayer, seulement VFP 9 SP2, et ça marche très bien pour moi. – LAK

Répondre

1

Personnellement, je n'ai jamais aimé les convertisseurs DBF en CSV intégrés. Ils semblaient toujours faire des choses que je ne voulais pas qu'ils fassent. Alors j'ai juste écrit le mien. Voici un code pour vous aider à démarrer.

LOCAL lnFields 

SELECT DBF 
lnFieldCount = AFIELDS(laFields) 
lnHandle = FOPEN("filename.csv", 1) 
ASSERT lnHandle > 0 MESSAGE "Unable to create CSV file" 

SCAN 
    lcRow = "" 
    FOR lnFields = 1 TO lnFieldCount 
    IF INLIST(laFields[lnFields,2], 'C', 'M') 
      lcRow = lcRow + IIF(EMPTY(lcRow), "", ",") + '"' + ; 
          STRTRAN(EVALUATE(laFields[lnFields,1]),'"', '""') + '"' 
     ELSE 
      lcRow = lcRow + IIF(EMPTY(lcRow), "", ",") + ; 
          TRANSFORM(EVALUATE(laFields[lnFields,1])) 
     ENDIF 
    ENDFOR 

    FWRITE(lnHandle, lcRow) 
ENDSCAN 
FCLOSE(lnHandle) 
4

Avez-vous essayé d'utiliser TYPE CSV dans la commande COPY TO?

+0

merci, CSV et DELIMITED donnent le même résultat. aussi juste se demander si le temps d'exécution fait une différence? lors du débogage (F8) ou simplement en exécutant la requête seule et en exécutant la commande COPY à travers la fenêtre de commande ... les résultats sont complètement différents de quand tout le programme est en cours, le programme est "très simple": ... – user1327073

+0

Il est très étrange que vous obteniez des résultats différents lorsque vous parcourez le code ou que vous l'exécutez sans interruption. Avez-vous essayé d'utiliser un BROWSE juste avant la COPY TO pour exactement ce que sont les données sources? Hmm, en fait, cette idée me fait me demander s'il y a un problème de zone de travail; c'est-à-dire, êtes-vous sûr que la zone de travail correcte est sélectionnée avant d'émettre COPY TO. –

Questions connexes