VB脚本InStr返回稍后的字符串实例

时间:2016-02-02 17:06:58

标签: vbscript

我有一个脚本可以找到PDF文档中的页数。在某些情况下,它发现这是错误的,我正在看它并发现一些令人费解的事情:InStr没有返回我的字符串的第一个实例,而是一个在中间。这是一些代码:

    Set TempFile = fso.OpenTextFile(sFileName, 1)
    lNumPages = 0
    sLine = TempFile.ReadAll
    Temp = InStr(sLine, "/Count ")
    'Strip out the number of pages
    lNumPages = CLng(Mid(sLine, Temp + 7, InStr(Temp + 1, sLine, "/") - Temp - 7))

使用文本编辑器(本例中为Textpad)当我搜索“/ Count”时,我可以在文件中看到以下内容:

515 0 obj
<<
/Count 13
/Kids [ 516 0 R 520 0 R 525 0 R 528 0 R
532 0 R 535 0 R 539 0 R ]
/Type /Pages
>>
endobj

516 0 obj
<<
/Count 2
/Kids [ 517 0 R ]
/Parent 515 0 R
/Type /Pages
>>
endobj

517 0 obj
<<
/Count 2
/Kids [ 518 0 R 519 0 R ]
/Parent 516 0 R
/Type /Pages
>>
endobj

522 0 obj
<<
/Count 1
/Kids [ 53 0 R ]
/Parent 521 0 R
/Type /Pages
>>
endobj

523 0 obj
<<
/Count 1
/Kids [ 97 0 R ]
/Parent 521 0 R
/Type /Pages
>>
endobj

524 0 obj
<<
/Count 1
/Kids [ 136 0 R ]
/Parent 521 0 R
/Type /Pages
>>
endobj

525 0 obj
<<
/Count 1
/Kids [ 526 0 R ]
/Parent 515 0 R
/Type /Pages
>>
endobj

等等。问题是Temp = InStr(sLine, "/Count ")行将Temp设置为522对象后面的/ Count位置,而不是第一个实例,即所有文本编辑器找到的515对象。

我甚至进行了十六进制比较,并发现它们都是相同的,具有以下字符:43 6F 75 6E 74 20 31 33

什么可能导致InStr找到既不是第一个也不是最后一个的字符串?

该文件约为532k,但是在InStr中找到的第一个字符位于532,584位置,因此如果它有任何不同,也不会非常接近524,288。

0 个答案:

没有答案