用换行符替换字符的 dBase 命令

dBase command to replace a character with a newline

我使用一个名为 PastPerfect 的 museum/archival 软件程序。该程序有一个 "Global Update" 搜索和替换功能,但功能有限,还有一个 "Command Window",您可以从显示 "will accept commands in the dBase language" 的屏幕访问它以对我的记录进行全局更改。

我有一些记录是从另一个来源导入到 PastPerfect 的,这些记录的格式是这样的,当一个字段有多个条目时,它使用竖线作为分隔符,(例如,主题词备注字段因为一本书可能包含 "New Hampshire--History|Washington, Mount (N.H.)--History"),当多个条目应该用回车符 return 分隔时。 (备注字段应为:

新罕布什尔州--历史

华盛顿山 (N.H.)--历史

所以我需要做一个全局更新,用马车替换所有竖线 return。使用 Microsoft Words 查找和替换功能很容易做到这一点,但是 PastPerfect 全局更新菜单不允许我用任何特殊字符替换。

那么有没有 dBase 函数可以让我在字段中搜索“|”符号并将其替换为 newline/carriage return 字符。我一直在谷歌搜索,但找不到任何东西让我开始我的生活。看起来好像 REPLACE 函数替换了整个字段(而不是仅仅搜索字符串)。

或者,如果有人知道用于处理 DBF 文件的程序确实具有足够强大的查找和替换功能,能够用换行符替换,我可以将这些记录导出为 dBase 格式并重新导入他们。我已经测试了一些程序,但到目前为止我发现的所有程序都只有简单的查找和替换功能。

比方说,我们想要将字母 (a) 更改为 "c",无论 "a" 的位置如何。

试试下面的代码:

{nn="a"}

{USE your_table}

{GO top}

   {DO whil NOT EOF()}

  { aa=LEN(ALLTRIM(field_name))}

 {  aa1=ALLTRIM(field_name)}

{   new_value=""}

 {  FOR ii=1 TO aa}

 {  v=SUBSTR(aa1,ii,1)}

 {  IF v=nn}

{   v="c"}

  { ENDIF}

 {  new_value=new_value+v}

 {  ENDFOR}

 {  REPLACE field_name WITH new_value}

  { SKIP}

 {  ENDDO}

 {  close data}

如果 "Command Windows" 在 VFP 中,您应该可以轻松开始。我不知道 table 的名称,也不知道实际的列,但它应该像...

一样简单
update YourTable;
   set YourColumn = strtran( YourColumn, "|", chr(13)+chr(10))

并且具有管道字符的每一行都将转换为 cr/lf... 即使它是一个或多个实例。您可能需要提供更多关于 table 的信息,请告诉我,我会进行调整。

至于使用 REPLACE 命令,它也适用于 STRTRAN() 调用。

USE YourTable
REPLACE ALL YourColumn WITH strtran( YourColumn, "|", chr(13)+chr(10))

这也将更新所有行。如果没有管道“|”字符,备注字段将保留 as-is/unchanged.