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

Vbscript VB脚本InStr返回字符串的后续实例,vbscript,Vbscript,我有一个脚本,可以找到PDF文档中的页数。在某些情况下,它发现错误,我正在看它,发现一些令人费解的东西:ISTR不返回我的字符串的第一个实例,但是中间的一个。下面是一些代码: Set TempFile = fso.OpenTextFile(sFileName, 1) lNumPages = 0 sLine = TempFile.ReadAll Temp = InStr(sLine, "/Count ") 'Strip out the number of p

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

    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
>
endobj
516 0 obj
>
endobj
517 0 obj
>
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
5220 obj
>
endobj
5230 obj
>
endobj
524 0 obj
>
endobj
5250 obj
>
endobj
还有更多。问题在于
Temp=InStr(sLine,“/Count”)
行将Temp设置为522对象后面的/Count位置,而不是所有文本编辑器都会找到的第一个实例515对象

我甚至做了一个十六进制比较,发现它们都是相同的,有以下字符:436f756e7420333

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


该文件大约为532k,但InStr找到的第一个字符位于532584位置,因此也不太接近524288,如果这会产生任何影响的话。

如果输出
sLine
,会发生什么?看起来像你期望的那样吗?您是否尝试过为
仪表指定起始位置
Temp=InStr(0,sLine,“/Count”)
sLine的开头确实与文本编辑器中文件的开头匹配,这正是我所期望的。我没有尝试指定起始位置,因为我不知道起始位置可能在哪里,而且我总是希望第一次出现。编辑:我想你必须使用Shift来获得新行。我用你的示例文本和
Temp=16
lNumPages=13
运行了这个。这似乎是正确的。谢谢您的尝试。不过,我不能切实地包含整个文件,实际样本之前已经有500多个文件。它从以下内容开始:%PDF-1.5 544 0 obj>endobj xref 544 89如果它不是敏感数据,可以将其放在pastebin上
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