2012-06-28 92 views
1

在Visual FoxPro,我有一個光標它是一個SQL查詢的結果,當我使用聲明光標的內容導出爲CSV文件:如何將foxpro光標導出爲CSV文件?

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

所有數據都被弄亂了,我做的不pecify任何分隔符,所以基本上foxpro採用默認,這是該遊標的每一列。弓當我運行相同的命令,以XLS文件,然後將其轉換爲CSV文件......它工作得很好:

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

任何人有過這樣的問題,任何一個仍然使用FoxPro和做的東西像那些?

+0

以什麼方式輸出「搞砸」?你可以發佈樣本嗎?遊標的結構是什麼? – LAK

+0

感謝您的回答,日期是空白的,所有數值都爲0(除了某些...爲什麼我不知道)以及跳過記錄(有時)。所以我認爲在這個版本(7舊版本)中沒有修復一些bug,除非你有一個可以拯救我的生命的魔法解決方案,否則我們無法做任何事情:) – user1327073

+0

奇怪。我沒有試用版本7,只有VFP 9 SP2,它對我來說工作正常。 – LAK

回答

1

就我個人而言,我從來不喜歡內置的DBF到CSV轉換器。他們似乎總是做我不希望他們做的事情。所以我只寫了我自己的。這是一些讓你開始的代碼。

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

您是否嘗試在COPY TO命令中使用TYPE CSV?

+0

謝謝,CSV和DELIMITED給出了相同的結果。也只是想知道執行時間是否有所作爲?當調試(F8)或僅執行查詢並通過命令窗口執行COPY命令時......結果與整個程序運行時完全不同,程序「非常簡單」:抓取數據進程並複製... – user1327073

+0

在單步執行代碼或不間斷運行時,您會得到不同的結果,這很奇怪。您是否在COPY TO之前嘗試過使用BROWSE來準確識別源數據是什麼?嗯,其實,這個想法讓我懷疑是否有工作領域問題;也就是說,在發出「複製到」之前,您確定選擇了正確的工作區域嗎? –