Visual FoxPro备注字段中的不可打印字符

时间:2016-04-08 20:25:03

标签: visual-foxpro

我正在尝试将带有备注字段的Visual FoxPro表导出到.CSV文件。备注字段中似乎嵌入了不可打印的字符,导致导出的值被截断(即,只有在不可打印字符导出之前备忘录字段的部分)。

有没有人看过类似的东西,或者知道如何/为什么/在Visual FoxPro备忘录字段中嵌入了不可打印的字符?

2 个答案:

答案 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