2012-06-28 3 views
1

В Visual FoxPro, у меня есть курсор, который является результатом SQL запроса, когда я экспортировать содержимое этого курсора в файл CSV с помощью оператора:Как экспортировать курсор foxpro в файл CSV?

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

все данные перепутались, я не использовать какой-либо разделитель, поэтому в основном foxpro принимает значение по умолчанию, которое представляет собой каждый столбец в этом курсоре. лук, когда я запустить ту же команду в файл XLS, а затем преобразовать его в файл CSV ... она работает очень хорошо:

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

кто имеет такую ​​проблему, любой один до сих пор используют и делать FoxPro такие вещи, как те?

+0

Каким образом выход «перепутался»? Можете ли вы опубликовать образец? Какова структура курсора? – LAK

+0

спасибо за ваш ответ, даты пустые, все числовые значения равны 0 (кроме некоторых ... почему я не знаю), а также пропуская записи (несколько раз). поэтому я думаю, что в этой версии (7 старой версии) исправлены некоторые ошибки, и о которых мы ничего не можем сделать, если у вас нет волшебного решения, которое спасет мою жизнь :) – 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

Вы пытались использовать TYPE CSV в команде COPY TO?

+0

спасибо, CSV и DELIMITED дают тот же результат. также просто интересно, если время выполнения имеет значение? при отладке (F8) или просто выполнении запроса в одиночку и выполнении команды COPY через командное окно ... результаты полностью отличаются от того, когда вся программа запущена, вы просто «просты»: захватите данные и скопируйте их ... – user1327073

+0

То, что вы получаете разные результаты при переходе через код или без его прерывания, очень странно. Вы пробовали использовать ПРОСМОТР непосредственно перед КОПИРОВАНИЕМ, чтобы точно указать исходные данные? Хм, на самом деле, эта идея заставляет меня задаться вопросом, есть ли проблема в рабочей области; то есть вы уверены, что правильная рабочая область выбрана до выпуска COPY TO. –

Смежные вопросы