用换行符替换字符的 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.
我使用一个名为 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.