【问题标题】:VBscript to search fileVBscript 搜索文件
【发布时间】:2014-01-07 21:23:56
【问题描述】:

目前,我有一个批处理文件无法处理的大文本文件来搜索行。如果该文本文件中的行数不长,则下面的代码可以搜索值“9200.... 9300”。 甚至问题还在于这段代码返回的值与 9200 在同一行中......我只想将值 9200 范围裁剪为 9300

但每当我将它用于大型文本文件(500MB)时,它都会给出奇怪的字符。我想我需要 VBScript 才能找到这个数字,我会在一条消息中显示它。

代码是

for /f "usebackq delims=* tokens=5" %i in (`findstr "9201.. 9200.." data.mud`) do @echo %I

谢谢。

【问题讨论】:

  • 你能举一个输入和期望输出的例子吗?另外,你得到的“奇怪的角色”是什么?输入文件可能是 Unicode 编码的还是二进制的?
  • 感谢 Ansgar 的回复。它是 Unicode 拉丁字符。如果您看到 Data.mud 不是文本文件,但可以在记事本中打开。尝试编写一个脚本来搜索 9200 到 9200 的范围。如果 for /f "usebackq delims=* tokens=5" %i in (findstr "9201.. 9200.." data.mud) 执行 @echo
  • 现在我更加困惑了。该文件是 Unicode(文本)文件吗?或者它不是文本文件(即二进制文件)? “9201 到 9200 的范围”是什么意思?您是否希望脚本输出两个字符串“9201”和“9200”之间的所有内容?如果是这样,9201 是否总是在 9200 之前?
  • 对不起 Ansgar,它是一个文本文件。它的范围在 9201 到 920150 之间。脚本应该在这些数字之间找到一个数字范围并将其输出。谢谢
  • 那么,对于两个数字 9201 和 9500,您希望输出是 data.mud 中介于 9201 和 9500 之间的任何数字吗?

标签: vbscript


【解决方案1】:

试试这样的:

Set fso = CreateObject("Scripting.FileSystemObject")

Set re = New RegExp
re.Pattern = "\d+"
re.Global  = True

filename = "C:\path\to\data.mud"
lb = 9200
ub = 920150

Set f = fso.OpenTextFile(filename)
Do Until f.AtEndOfStream
  For Each m In re.Execute(f.ReadLine)
    n = CLng(m.Value)
    If n >= lb And n <= ub Then WScript.StdOut.WriteLine n
  Next
Loop
f.Close

你需要用cscript.exe运行这个脚本:

cscript //NoLogo C:\path\to\your.vbs

【讨论】:

  • 它给出错误句柄是有效的第 12 行字符 33 代码:80070006 源(空)。这是这一行: If n >= lb And n
  • @moshaye3 - 使用 cscript.exe 而不是 wscript.exe。
  • 非常感谢埃克哈德。它使用 cscript 工作。
  • 是的,我的意思是cscript。固定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-26
  • 1970-01-01
相关资源
最近更新 更多