Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 复制部分EDL,计算持续时间,但循环失败_Loops_Vbscript_Timecodes - Fatal编程技术网

Loops 复制部分EDL,计算持续时间,但循环失败

Loops 复制部分EDL,计算持续时间,但循环失败,loops,vbscript,timecodes,Loops,Vbscript,Timecodes,我有一个简单格式化的文本文件(编辑决策列表),其中有一行数字,后跟一行属性(名称等)。 对于每个匹配,我试图从名称字符串中创建一个列表,后跟持续时间(时间戳之间的差异) 导致: 12-科技性感-D Cebert-FFP170 Dur:00.38 到目前为止,我已经 为用户在桌面上定义源文件建立了一种方法 定义了一种对源时间戳进行排序的方法(按相应名称行之前的时间戳) 发现前2个时间戳之间存在差异 但我的循环似乎不起作用。我至少希望看到每个匹配的时间戳行的持续时间列表 到目前为止的脚本: Opti

我有一个简单格式化的文本文件(编辑决策列表),其中有一行数字,后跟一行属性(名称等)。 对于每个匹配,我试图从名称字符串中创建一个列表,后跟持续时间(时间戳之间的差异)

导致:

12-科技性感-D Cebert-FFP170 Dur:00.38

到目前为止,我已经

  • 为用户在桌面上定义源文件建立了一种方法
  • 定义了一种对源时间戳进行排序的方法(按相应名称行之前的时间戳)
  • 发现前2个时间戳之间存在差异
  • 但我的循环似乎不起作用。我至少希望看到每个匹配的时间戳行的持续时间列表

    到目前为止的脚本:

    Option Explicit
    'change system location to Germany, to simulate 24hour clock *no AM PM time
    SetLocale "de-de"
    
    Dim fso, oFile, y, re, prev, line, matches, time
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    'get user to open file name
    y = InputBox("name of file to save")
    
    'next line opens a file with that name 
    Set oFile = fso.OpenTextFile(y&".edl")
    
    Do Until oFile.AtEndOfStream
        line = oFile.ReadLine
        'At this point the variable prev either is empty (during the first loop
        'cycle) or holds the content of the previous line.
        If Left(line, 21) = "*  FROM CLIP NAME:   " Then
            'Define search terms for each timecode element *this is not a result yet
            Dim re1
            re1 =".*?"  'Non-greedy match on filler
            Dim re2
            re2 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)"  'HourMinuteSec 1
            Dim re3
            re3 =".*?"  'Non-greedy match on filler
            Dim re4
            re4 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)"    'HourMinuteSec 2
            Dim re5
            re5 =".*?"  'Non-greedy match on filler
            Dim re6
            re6 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)"    'HourMinuteSec 3
            Dim re7
            re7 =".*?"  'Non-greedy match on filler
            Dim re8
            re8 ="((?:(?:[0-1][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\s?(?:am|AM|pm|PM))?)"    'HourMinuteSec 4
    
            'add timecode search terms to a search pattern
            Dim r
            Set r = New RegExp
            r.Pattern = re1+re2+re3+re4+re5+re6+re7+re8
            r.IgnoreCase = True
    
            Dim m, timeDur, ts, Timeofday
            Set m = r.Execute(line)
            'loop through timecodes to find duration between first 2 entries
            If m.Item(0).SubMatches.Count > 0 Then
                Dim time1
                time1 = m.Item(0).SubMatches.Item(0)
                Dim time2
                time2 = m.Item(0).SubMatches.Item(1)
                Dim time3
                time3 = m.Item(0).SubMatches.Item(2)
                Dim time4
                time4 = m.Item(0).SubMatches.Item(3)
    
                'find duration/difference between first 2 times, in seconds
                timeDur=datediff("s", time1, time2)
                'format result to a serial time format eg. 00:00:00
                ts = TimeSerial(0, 0, timeDur)
                'print duration result, will need to append track info and repeat. Then save to file
                MsgBox (ts)
            End If
            MsgBox (ts)
        End If
    Loop
    
    源文件:

    * COMMENT: CREATED BY GRASS VALLEY FOR EDIUS (CMX-3600) 001 0000 A C 00:00:04:23 00:00:42:04 00:00:00:00 00:00:37:06 * FROM CLIP NAME: 12 - Tech Sexy - D Cebert - FFP170 002 0000 A C 00:00:20:01 00:00:31:23 00:01:29:24 00:01:41:21 * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 003 0000 A C 00:00:31:23 00:00:31:23 00:01:41:21 00:01:41:21 M2 0000 025.0 00:00:31:23 003 0000 A D 025 00:00:31:09 00:00:54:12 00:01:41:21 00:02:04:24 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 * TO CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 M2 0000 025.0 00:00:31:09 004 0000 A2 C 00:01:15:08 00:01:31:24 00:01:48:04 00:02:04:20 * FROM CLIP NAME: 12 - Environs A - T Juckes, S Kidd - SCDV354 005 0000 A2 C 00:00:11:12 00:00:30:05 00:02:06:24 00:02:25:17 * FROM CLIP NAME: 13 - Contagion (Main) - J Woodall - SFT164 006 0000 A2 C 00:00:06:13 00:00:56:09 00:02:27:04 00:03:17:00 * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 007 0000 A2 C 00:00:56:09 00:00:56:09 00:03:17:00 00:03:17:00 M2 0000 025.0 00:00:56:09 007 0000 A2 D 025 00:00:55:08 00:01:54:03 00:03:17:00 00:04:15:20 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 * TO CLIP NAME: 03 - Web Of Deceit (Main) - J Woodall - SFT164 M2 0000 025.0 00:00:55:08 008 0000 A2 C 00:01:15:08 00:01:37:12 00:05:04:10 00:05:26:14 * FROM CLIP NAME: 12 - Environs A - T Juckes, S Kidd - SCDV354 009 0000 A2 C 00:00:00:00 00:00:26:19 00:06:00:08 00:06:27:02 * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 010 0000 A2 C 00:00:25:08 00:01:13:03 00:06:39:16 00:07:27:11 * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 011 0000 A2 C 00:01:13:03 00:01:13:03 00:07:27:11 00:07:27:11 M2 0000 025.0 00:01:13:03 011 0000 A2 D 025 00:01:48:22 00:02:04:09 00:07:27:11 00:07:42:23 * EFFECT NAME: CROSS DISSOLVE * FROM CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 * TO CLIP NAME: 38 - Signs Of Pollution - W Plass - SCDV354 M2 0000 025.0 00:01:48:22 *注释:由GRASS VALLEY为EDIUS(CMX-3600)创建 001 0000 A C 00:00:04:23 00:00:42:04 00:00:00:00:00:37:06 *来自剪辑名称:12-科技性感-D Cebert-FFP170 002 0000 A C 00:00:20:01 00:00:31:23 00:01:29:24 00:01:41:21 *来自剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 003 0000 A C 00:00:31:23 00:00:31:23 00:01:41:21 00:01:41:21 M2 0000 025.0 00:00:31:23 003 0000 A D 025 00:00:31:09 00:00:54:12 00:01:41:21 00:02:04:24 *效果名称:交叉溶解 *来自剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 *剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 M2 0000 025.0 00:00:31:09 004 0000 A2 C 00:01:15:08 00:01:31:24 00:01:48:04 00:02:04:20 *来自剪辑名称:12-Environs A-T Juckes,S Kidd-SCDV354 005 0000 A2 C 00:00:11:12 00:00:30:05 00:02:06:24 00:02:25:17 *来自剪辑名称:13-传染病(主)-J Woodall-SFT164 0060000 A2 C 00:00:06:13 00:00:56:09 00:02:27:04 00:03:17:00 *来自剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 007 0000 A2 C 00:00:56:09 00:00:56:09 00:03:17:00:03:17:00 M2 0000 025.0 00:00:56:09 007 0000 A2 D 025 00:00:55:08 00:01:54:03 00:03:17:00:04:15:20 *效果名称:交叉溶解 *来自剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 *剪辑名称:03-欺骗之网(主)-J Woodall-SFT164 M2 0000 025.0 00:00:55:08 0080000 A2 C 00:01:15:08 00:01:37:12 00:05:04:10 00:05:26:14 *来自剪辑名称:12-Environs A-T Juckes,S Kidd-SCDV354 0090000 A2 C 00:00:00:00:00:26:19 00:06:00:08 00:06:27:02 *来自剪辑名称:38-污染迹象-W Plass-SCDV354 010 0000 A2 C 00:00:25:08 00:01:13:03 00:06:39:16 00:07:27:11 *来自剪辑名称:38-污染迹象-W Plass-SCDV354 0110000 A2 C 00:01:13:03 00:01:13:03 00:07:27:11 00:07:27:11 M2 0000 025.0 00:01:13:03 0110000 A2 D 025 00:01:48:22 00:02:04:09 00:07:27:11 00:07:42:23 *效果名称:交叉溶解 *来自剪辑名称:38-污染迹象-W Plass-SCDV354 *剪辑名称:38-污染迹象-W Plass-SCDV354 M2 0000 025.0 00:01:48:22
    我们输入数据的格式似乎与您在上一个问题中最初发布的格式有点不同,因此,您需要使用剪辑名称中的
    Left(line,21)=“*”
    ,而不是
    Left(line,19)=“*”
    。另外,请重新阅读我对你的另一个问题的回答。您希望将正则表达式应用于前一行,而不是当前读取的行。同样,前面的一些行不包含时间戳,所以您需要处理它,否则您的代码将出错。我只是得到一个空的MsgBox,在这个代码和另一个问题页面上。循环似乎不会生成任何匹配项,我也无法将它们作为任何类型的字符串返回。请一步接一步地执行。首先调整
    If
    条件,如我在上面的评论中所述。将
    WScript.Echo行
    语句放在
    If
    下面的行中,您将看到它显示了这些行。然后,不在这些行上执行正则表达式,而是在它们前面的行上执行正则表达式。为此,您需要我在上一个答案中概述的代码。哦,好的。谢谢你的耐心。我真的很感激。