删除字符串的一部分,并使用vbscript将其余部分复制回文件

删除字符串的一部分,并使用vbscript将其余部分复制回文件,vbscript,Vbscript,我想从文件中的每个字符串中删除不需要的文本。 输入字符串如下所示 username^time stamp^don't need this printed on printer name more useless info pages printed:some number username timestamp printername some number 我想删除所有其他内容,但保留用户名、时间戳、打印机名称和一些数字。然后将每一行写入一个文件,以便输出如下所示 username^t

我想从文件中的每个字符串中删除不需要的文本。 输入字符串如下所示

username^time stamp^don't need this printed on printer name more useless info pages printed:some number 
username  timestamp printername some number 
我想删除所有其他内容,但保留用户名、时间戳、打印机名称和一些数字。然后将每一行写入一个文件,以便输出如下所示

username^time stamp^don't need this printed on printer name more useless info pages printed:some number 
username  timestamp printername some number 
这就是我正在使用的代码

Set fs = CreateObject("Scripting.FileSystemObject")
sf = "C:\test.txt"
Set f = fs.OpenTextFile(sf, 1) ''1=for reading
s = f.ReadAll
segments = Split(s,"^",-1)
s= segments(1,)
f.Close
Set f = fs.OpenTextFile(sf, 2) ''2=ForWriting
f.Write s
f.Close
代码:

输出:

kurt^01:02:03^some junk^nec p7^nix^123
kurt^01:02:03^nec p7^123
代码:

输出:

kurt^01:02:03^some junk^nec p7^nix^123
kurt^01:02:03^nec p7^123

总会有人问“为什么不使用正则表达式?”。这就是那个时刻

试试这个:

Dim re, s, match, matches

s = "Chuck Norris^12-12-2012^don't need this printed on HAL9000 more useless info pages printed:42  "

Set re = new regexp
re.pattern = "(.*)\^(.*)\^.*printed on (\w+).*pages printed:(\d+).*"
re.Global = True

Set matches = re.Execute(s)
Set match = matches(0)

msgbox "username=" & match.submatches(0)
msgbox "time stamp=" & match.submatches(1)
msgbox "printer=" & match.submatches(2)
msgbox "pages printed=" & match.submatches(3)

整洁,嗯?我敢打赌,您一定会明白如何在现有代码中实现它。

总会有人问“为什么不使用正则表达式?”。这就是那个时刻

试试这个:

Dim re, s, match, matches

s = "Chuck Norris^12-12-2012^don't need this printed on HAL9000 more useless info pages printed:42  "

Set re = new regexp
re.pattern = "(.*)\^(.*)\^.*printed on (\w+).*pages printed:(\d+).*"
re.Global = True

Set matches = re.Execute(s)
Set match = matches(0)

msgbox "username=" & match.submatches(0)
msgbox "time stamp=" & match.submatches(1)
msgbox "printer=" & match.submatches(2)
msgbox "pages printed=" & match.submatches(3)

整洁,嗯?我敢打赌,您会找到如何在现有代码中实现它。

我不理解您的输入格式。是否所有字段(必要或不必要)都用^分隔?如果没有,如何从…中剪切打印机名称。。。打印机名称…这看起来更好吗用户名^time^(其他任意垃圾)^printer name^(其他任意垃圾)^页面计数所以我需要所有东西,但(其他任意垃圾)我不了解您的输入格式。是否所有字段(必要或不必要)都用^分隔?如果没有,如何从…中剪切打印机名称。。。打印机名称…这看起来更好吗用户名^time^(其他任意垃圾)^printer name^(其他任意垃圾)^页面计数所以我需要脚本工作的(其他任意垃圾)以外的所有内容。但是有一个问题,我需要在一个大约有100000行的文件上预成型脚本。我很难用一个循环把它读两行。一旦我让它工作起来,我想它需要很长时间才能生效。您可以
拆分
vbNewLine
字符上的
f.ReadAll
,并对数组中的每个项目使用regexp。或者您可以对作为TextStream打开的文件使用
ts.ReadLine
,并逐行
处理它,直到ts.AtEndOfStream
。代码可以工作,但模式似乎无法处理真实数据真实数据看起来像以下fl1 ^domainname\username ^20120206162216.000000-300^文档239, outbind://106-000000005315FCEA423BD111B0BA00609773F8F60700F5439 由用户名^拥有,通过端口npi702932.something.something.com打印在打印机上\u HPCOLOR3600N大小(字节):1711164;打印页面:4您能否想出一种新的模式来覆盖此数据集,再次感谢。regexp将是
*\^(\w*\\\w*)\^([\d\.\-]*)\^.*打印在(\w+).*打印页面:.*(\d+).
,但它可以更优化。请自己学习正则表达式语法。在互联网上有多个网站,你可以在那里找到它们,并最终找到它们。除此之外:你真的应该在你的要求上更加精确。你给我们的字符串不是很清楚,而且在最后的评论中,它仍然不清楚你真正想要的是什么,这导致了包括你在内的所有人的额外工作。脚本工作正常。但是有一个问题,我需要在一个大约有100000行的文件上预成型脚本。我很难用一个循环把它读两行。一旦我让它工作起来,我想它需要很长时间才能生效。您可以
拆分
vbNewLine
字符上的
f.ReadAll
,并对数组中的每个项目使用regexp。或者您可以对作为TextStream打开的文件使用
ts.ReadLine
,并逐行
处理它,直到ts.AtEndOfStream
。代码可以工作,但模式似乎无法处理真实数据真实数据看起来像以下fl1 ^domainname\username ^20120206162216.000000-300^文档239, outbind://106-000000005315FCEA423BD111B0BA00609773F8F60700F5439 由用户名^拥有,通过端口npi702932.something.something.com打印在打印机上\u HPCOLOR3600N大小(字节):1711164;打印页面:4您能否想出一种新的模式来覆盖此数据集,再次感谢。regexp将是
*\^(\w*\\\w*)\^([\d\.\-]*)\^.*打印在(\w+).*打印页面:.*(\d+).
,但它可以更优化。请自己学习正则表达式语法。在互联网上有多个网站,你可以在那里找到它们,并最终找到它们。除此之外:你真的应该在你的要求上更加精确。你给我们的字符串不是很清楚,而且在最后的评论中,它仍然不清楚你真正想要的是什么,这导致每个人都需要额外的工作,包括你。