#2
csyx2024-05-28 19:11
|
这段代码用来将某个文件夹转换成.dbf表;当把代码拷贝到.prg程序中却执行不了。请教各位高手如何在程序中实现其功能?谢谢!
*ThisForm.wjtran && 这是表单中自定义过程
LPARAMETERS tcFolder && 将调用程序传入的数据,赋值给局部内存变量和数组。prg不能用。
LOCAL ARRAY laFiles[1] && 创建的数组laFiles,[1]表示一组。
LOCAL lcFileName,ii && 缺少这一步,会漏掉许多内容。
m.tcFolder=ADDBS(m.tcFolder) && 向路径表达式添加一个反斜杠;没有这条,子目录出不来。
IF ADIR(m.laFiles,m.tcFolder + '*.*','ARD',1) < 3 && 若是文件长度小于3个字节,则不计算;少了D,不能进入子目录。
RETURN .F.
ENDIF
ASORT(m.laFiles,3,-1,1) && 按第3列排序数组,最后一位数大于0为降序排序。
FOR m.ii=1 TO ALEN(m.laFiles,1) && LAN(数组名,数组属性),0[返回数组元素数目],1[返回数组的行数],2[返回数组的列数]。
m.lcFileName=m.laFiles[m.ii,1] && m.laFiles是 . ;缺少这一步,后面进行不下去
DO CASE
CASE '.'==m.lcFileName Or '..'==m.lcFileName && 设此可避免直接进入OTHERWISE,出现死循环
CASE AT('D',m.laFiles[m.ii,5]) > 0 && 该位置若是D,则表明这是一个目录,执行下一行命令。
ThisForm.wjtran(m.tcFolder + m.lcFileName) && listfiles与m.tcFolder都是目录的路径,m.lcFileName则是子目录名称
OTHERWISE
lafilesdt1=DTOC(m.lafiles[m.ii,3]) && 字符型日期
lafilesdt2=m.lafiles[m.ii,4] && m.lafiles[m.ii,4]是文件的时间值
m.lafiles[m.ii,2]=CTOT([&lafilesdt1 &lafilesdt2]) && 字符日期时间
Npath=SUBSTR(m.tcFolder,pathlong+1) && Npath是子目录+孙目录
Npath=SUBSTR(Npath,1,LEN(Npath)-1)
Npath=Npath+'\'
INSERT INTO files1 VALUES (m.lafiles[m.ii,1],m.tcFolder,m.lafiles[m.ii,2]) && 将数据录入到表中;此处不能用listfiles代替m.tcFolder
ENDCASE
ENDFOR