条条大路通罗马。现在分析一下我的代码与sdta版主的代码的异同:
1. 在让用户指定列数时,我使用了inputbox()函数,该函数的返回值是字符型,因此对返回结果进行了类型转换:nCols = int(val(c))。并且当用户输入无效列数时,直接退出。
sdta版主使用了input命令,该命令可直接输入一个数值,无需转换,并且当用户输入无效值时,系统会提示继续输入,直到输入一个有效值为止。
优缺点:inputbox()函数打开的是一个标准的widnows对话框,界面美观,但返回值需要转换。input命令是VFP兼容以前DOS版本的老命令,界面不美观,但是其返回值本身就是数值型的,无需转换。
2. 我们的代码都是根据列数建立一个游标。
我的代码是先建立一个仅包含一个字段的游标,然后再使用“alter table add”逐个添加其他字段。
sdta版主的代码是生成一个建立游标的字符串,然后再用宏替换执行该语句,从而一次性创建该游标。
3. 在将原表数据转换到目标表时,我使用了嵌套的两个循环,第一个循环用于添加空记录,第二个循环用于更新字段内容。
sdta使用了一个循环,在循环体内将字段内容先暂存到数组,待到达一定记录数时再将数组内容添加到新表。
个人意见:两层循环比较好理解,不易出错;单个循环更简练,但需要对计数变量做精准控制,对编程水平有更高的要求。
4. 再对两个汉字姓名的处理上,我使用了stuff()函数,在第一个汉字后面直接插入2个空格。sdta使用了“取前2个字符+2个空格+后2个字符”的方式。