数组条件

时间:2013-10-24 15:53:19

标签: foxpro visual-foxpro

有没有办法让我按照文件的日期限制我的数组?我想要驱动器中的所有文件,但只有当文件上的日期是>最后存储的导入日期时间。当我在" asterisk.asterisk"上构建数组时这需要太长时间。有什么想法吗?

fsLAST = ''
USE CMEMAILS IN 0 
SELECT CMEMAILS 
SET ORDER TO DTSTAMP    && DTSTAMP
GO BOTTOM
fsLAST = CMEMAILS.DTSTAMP
local array MyFiles[1,5]
        nFilesFound = ADIR( MyFiles, ALLTRIM(cmcontrol.cpath) + '*.*')

    for i = 1 to nFilesFound
        SELECT cmemails
    DO CASE
    CASE DATETIME(YEAR(MyFiles[ i, 3]), MONTH(MyFiles[ i, 3]), DAY(MyFiles[ i, 3]), VAL(LEFT(MyFiles[ i, 4], 2)), VAL(SUBS(MyFiles[ i, 4], 4, 2)), VAL(SUBS(MyFiles[ i, 4],7,2))) > fsLAST
            insert into cmemails (cprimary, csubject, ddate, dtime, cattribs, dtstamp) values ;
            (generateGuid(26), MyFiles[ i, 1], MyFiles[ i, 3], MyFiles[ i, 4], MyFiles[ i, 5],DATETIME(YEAR(MyFiles[ i, 3]), MONTH(MyFiles[ i, 3]), DAY(MyFiles[ i, 3]), VAL(LEFT(MyFiles[ i, 4], 2)), VAL(SUBS(MyFiles[ i, 4], 4, 2)), VAL(SUBS(MyFiles[ i, 4],7,2))) )
    ENDCASE
endfor

1 个答案:

答案 0 :(得分:1)

因为数组的元素3为日期而4为时间,所以你可以这样做..

for i = ...
   ltFileTime = CTOT( DTOC( MyFiles[1,3] ) + " " + MyFiles[1,4] )
   if ltFileTime > fsLast
     */ do your insert...

   endif 
endfor

你可能需要确保

SET CENTURY ON

确保正确的日期/时间转换。

您还可以使用 ltFileTime 代替DATETIME(年,月,日等)以提高可读性...