:: Visual Foxpro, Foxpro for DOS
COPY TO неверно экспортирует в csv
DSergeevich
Автор

Сообщений: 4
Дата регистрации: 30.11.2017
Приветствую всех.
Есть dbf, делаю
COPY TO mydoc.csv DELIMITED WITH CHARACTER ','
Получаю csv
"20210000094","МУП "Центр проектирования, градостроительства"","2211380000000014","0300006846","За оказанные услуги согл.реестра №237 от 27.10.2017г. ст.111070","111070"

Обращаю внимание на поле "МУП "Центр проектирования, градостроительства"" это некорректно.
Кавычки должны экранироваться и должно получиться так: "МУП ""Центр проектирования, градостроительства"""

Как решить эту проблему? прошу не пинать, ранее с фоксом дело не имел., гугл обшарил, но решения не нашел.

СПАСИБО!
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
DSergeevich
должно получиться так: "МУП ""Центр проектирования, градостроительства"""
А кто сказал, что так корректно?
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
...Кончилось тем, что сделал строки не в COPY ...CSV, а врукопашную:

Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
DSergeevich
Автор

Сообщений: 4
Дата регистрации: 30.11.2017
Ну оно должно экранироваться. Даже эксель откроет некорректно, а если кавычки за экранировать то все ок. Или в экселе попробуйте сделать экспорт в csv, он кавычки экранирует.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Использовать другой разделитель - не встречающийся в данных (скажем тильду, или решётку или "крышку" ^). Либо предварительно готовить данные, удваивая кавычки, или заменяя их - скажем двойную на одинарную (если не требуется соблюдать "буквальное" содержимое - человеку зачастую по барабану какая именно кавычка применяется в тексте). Либо выводить в csv не через COPY TO - например FOPEN/FPUTS/FCLOSE, или SET ALTERNATE и команды вывода текста (прогоняя поля через функцию экранирующую кавычки и "заворачивающую" их как положено)... Масса самых разных вариантов.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
DSergeevich
Ну оно должно экранироваться.
Эта команда появилась в фоксе задолго до того как был принят RFC (стандарт) по которому кавычки должны были удваиваться в csv файле - во времена разброда и шатания, когда под csv понималось всё что угодно каких угодно "видов" - включая разделение "полей" при помощи ; - как оно есть даже в современном экселе... Поэтому в его реализации это не предусмотрено. Но формировать текстовый файл можно кучей самых разных способов НЕ используя COPY TO - потому не вижу проблемы закодировать так как это нужно


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
DSergeevich
Автор

Сообщений: 4
Дата регистрации: 30.11.2017
Ну это все понятно что можно, но т.к я в фоксе нуб, то прошу поделиться чем то готовым, если таковое имеется.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Chemberzhy

Сообщений: 13142
Откуда: Измаил
Дата регистрации: 28.04.2009
Например, так:
LOCAL nar, ctab, mac_
mac_='select'
ctab=ALIAS()
nar=AFIELDS(ara)
FOR n=1 TO nar
mac_ = mac_ +IIF(n=1," ",",")+;
IIF(ara(n,2)="C","CHRTRAN("+ara(n,1)+",'"+'"'+"',"+'"'+"'"+'")',ara(n,1))
ENDFOR
mac_ = mac_ + " from " + ctab +" into cursor csv_"
&mac_
COPY TO mydoc.csv DELIMITED WITH CHARACTER ','
USE IN csv_
SELECT (ctab)
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Перминов Игорь

Сообщений: 1591
Откуда: Красная Орловка
Дата регистрации: 16.09.2001
DSergeevich
Ну это все понятно что можно, но т.к я в фоксе нуб, то прошу поделиться чем то готовым, если таковое имеется.
* Пример
COPY TO "D:\1\agency.list";
FIELDS agencyname,agencyshortname,agencyinn,agencykpp,agencyorgn,agencyismain DELIMITED WITH _ WITH CHARACTER ';'


------------------
Без коментариев..
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
DSergeevich
Автор

Сообщений: 4
Дата регистрации: 30.11.2017
Всем огромное спасибо! Буду пробовать.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
У себя для аналогичной цели делал вот такую функцию:
Можно довернуть под свои нужды...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Каратаев
m.lcRetStr = STRTRAN(m.lcRetStr,"|","/")
m.lcRetStr = STRTRAN(m.lcRetStr,"\","/")
m.lcRetStr = STRTRAN(m.lcRetStr,"."," ")

Танковая колонна таких односимвольных STRTRAN() вполне заменяется одним грузовичком в виде CHRTRAN()
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Foxtrot

Сообщений: 3408
Откуда: Куда:
Дата регистрации: 25.04.2003
а regexp уже отменили? видима точно отменили


------------------
Мойте ноги, моя ноги вы моете и руки
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Foxtrot
а regexp уже отменили? видима точно отменили
Не отменили, а не успели ввести.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
Приколисты, блин... ;)
Ну вот мне так было удобнее по той простой причине, что несколько раз наборы символов менялись и не факт, что не поменяются ещё. Или не добавятся... В таком виде, как сейчас мне просто нагляднее и быстрее правки внести. Только и всего. Кому-то удобнее в одной строке порядки блоков разбирать, а мне вот так. Да и топикстартеру, судя по всему, легче вот этот код понять, чем вникнуть в тот же regexp...


------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Удобство сопровождения - это, конечно, важно.
Но кто знает, насколько многомегабайтные строки обрабатываются этой функцией, сколько раз и в каком режиме?
Скорость обработки может быть не менее важной.
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
1) strtran заметно медленнее chrtran заменяющего символы 1-на-1
2) для "наглядности" можно было друг под другом параметры прописать, или вообще в переменных или константах (тоже выравненных друг под другом) их описать:
lcRetStr = CHRTRAN(m.lcRetStr, ;
"|\.", ;
"// ")
3) регулярки это в принципе неплохо, но в фоксе нет встроенных - потому "не фонтан". Ну и да, там таки изучать нужно

P.S. Наверное для целей "очистки ввода" и нужна такая массивная конструкция, а для целей просто заменить двойные кавычки на, к примеру, одинарные, так много букв не требуется


------------------
WBR, Igor




Исправлено 1 раз(а). Последнее : Igor Korolyov, 07.12.17 22:16
Ratings: 0 negative/0 positive
Re: COPY TO неверно экспортирует в csv
Каратаев

Сообщений: 3977
Откуда: Алматы
Дата регистрации: 04.12.2001
akvvohinc
Скорость обработки может быть не менее важной.
Ну тут не поспорю... Исправлю, конечно, чего уж...
Igor Korolyov
можно было друг под другом параметры прописать
Спасибо, Игорь, воспользуюсь этим советом. Так действительно лучше.

------------------
Никогда не бывает настолько плохо, чтобы не могло быть еще хуже.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 26 (Гостей: 26)

© 2000-2024 Fox Club 
Яндекс.Метрика