我正在尝试将带有备注字段的Visual FoxPro表导出到.CSV文件。备注字段中似乎嵌入了不可打印的字符,导致导出的值被截断(即,只有在不可打印字符导出之前备忘录字段的部分)。
有没有人看过类似的东西,或者知道如何/为什么/在Visual FoxPro备忘录字段中嵌入了不可打印的字符?
答案 0 :(得分:2)
VFP中的备注和文本字段可以存储任何字符,包括字符0.用户可能在备忘录字段中存储了二进制信息。
如果你使用VFP的复制命令,那么它会为你创建一个CSV,分隔符和一些其他类型。但是,复制到不会导出memo,general或blob等字段。文本文件不是导出数据的最佳介质,并且包含备注字段时使用的CSV文件可能不会被所有数据库导入。
如果您告诉我们更多细节,您如何做和目的,我们可能会有更好的建议。即:XML可能是一个更好的基于文本的导出。或者,与目标数据库建立连接或从目标数据库进行连接可能要好得多,并且在没有任何基于文本的文件之间进行传输。
答案 1 :(得分:1)
由于我之前没有为测试目的而做过,所以我刚刚创建了一个简单的VFP表。
CREATE TABLE C:\Temp\temp (Fld1 C(1), Note M)
APPEND BLANK
REPLACE Fld1 WITH '!',;
Note WITH "Now is the time to come to the aid of your country"
COPY TO C:\Temp\Temp.csv CSV
该命令确实创建了CSV文件,但未包含NOTE字段(备注字段)及其内容。
您可以先尝试对所需的表格进行SQL查询,然后再转换'将备注字段内容转换为字符串,然后在尝试导出到CSV文件之前删除任何不需要的字符。
例如,类似于:
CREATE TABLE C:\Temp\temp (Fld1 C(1), Note M)
APPEND BLANK
REPLACE Fld1 WITH '!', Note WITH "Now is the time to come to the aid of your country"
* --- Use SQL Query to Gather Table Data & 'Convert' Memo Data To String ---
SELECT Fld1,;
PADR(ALLTRIM(LEFT(Note,120)),120) AS NoteStr;
FROM Temp;
INTO CURSOR ForExport READWRITE
* --- Remove Unwanted Characters From NoteStr ---
* --- Start By Making List of Everything To KEEP ---
cAlphaNumeric = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 ,-'" && and whatever else you want to KEEP
SELECT ForExport
SCAN
cNoteStr = ForExport.NoteStr
* --- Get List of Un-Wanted Characters ---
cNotWanted = CHRTRAN(cNoteStr, cAlphaNumeric, "") && Get Everything NOT In cAlphNumeric List
* --- Remove Those Un-Wanted Characters ---
cToKeep = CHRTRAN(cNoteStr, cNotWanted, "")
* --- 'Write' Back Resultant String Into NoteStr Field ---
REPLACE NoteStr WITH cToKeep
ENDSCAN
* --- Now Export To CSV File ---
COPY TO C:\Temp\Temp.csv CSV