巧用SUBSTR()和REPLACE恢复库内错位数据 武汉 蔡致 1992-07-31 用DBASEⅢ建立的数据库,数据内容按记录、字段的先后顺序依次陆续存放,各字段之间无分隔符,两记录之间,有一空格作为分隔符。因此,使错位记录有一定的规律性,即从错位记录开始到各错位记录均在同一字段、同一字符处出现错位的内容。在恢复时,首先消除错位记录开始部分所存在的隐含字符,其次,将错位记录按字段所需长度,用SUBSTR函数依次取出,当涉及到第2条错位记录时,应将指针定位到第2条记录上,并继续用SUBSTR取出,使之能够还原,然后,用REPLACE命令进行替换,并使之循环运行,即可恢复库内所有错位数据。 程序清单; @O,O CLEAR USE opsysdbf STORE“” TO ziduan1,ziduan gg=949 DO WHILE gg<954 @10,10 SAY“NO:” ?? gg GO gg namel=SUBSTR (字段n,25,24) name2=SUBSTR(字段n,49,60) nameN=SUBSTR(字段n,8,21)+字段n nameNN=SUBSTR(字段n,1,24) gg=gg+1 ziduanl=字段1:……ziduan=字段N go gg REPLACE 字段1 WITH namel, 字段2:WITH name2…… REPLACE 字段N WITH nameN,字段N WITH nameNN REPLACE:字段N WITH ziduan1,字段N WITH ziduan STORE “” TO ziduan1,ziduan gg=gg+1 ENDDO CLOSE DATABASES RETURN 注意:1) 如果企图用REPLACE命令填充一个记录的数据时,首先应将该记录置空,否则无法使数据填入; 2)在用SUBSTR函数取子字符串时,字符串的起始位置和长度一定要计算准确,否则会出现新的错位记录;3)循环时请将最后一错位记录保留,否则会将正常记录也置空。