我正试图找到一种方法来增强脚本的可靠性。它已经可以工作,但可以在导入的文本文件中使用简单的额外空间来抛弃它。
所以我想把我的脚本改成Readline,如果我能找到办法做的事情:
.txt文件中的文本示例:
FLIGHTS OVER TUSKY PLEASE FILE:
AT OR WEST OF A LINE RBV..LLUND..BAYYS..PUT..DIRECT
FLIGHTS OVER EBONY PLEASE FILE:
AT OR WEST OF A LINE RBV..LLUND..BAYYS..PUT..DIRECT
我知道以下内容不起作用,但如果有一个简单的修改,这将是好的。
set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("C:\Downloads\software\putty.exe -load "testing")
set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile("C:\Users\AW\Desktop\Entries1.txt")
strLine = objFile.ReadAll
If InStr(strLine1, "OVER TUSKY PLEASE") and InStr(strLine2, "BAYYS..PUT..DIRECT") Then
trans307="TUSKY"
ind306="4"
我现在使用的是什么: 我用notepad ++编辑文本文件到FIND&将“\ n”替换为“”,将“\ r”替换为“”,然后将其全部替换为一个文本字符串,并在该字符串中搜索字符串。
If InStr(strLine, "FLIGHTS OVER TUSKY PLEASE FILE: AT OR WEST OF A LINE ..RBV..LLUND..BAYYS..PUT..DIRECT") _
or InStr(strLine, "FLIGHTS OVER TUSKY PLEASE FILE: AT OR WEST OF A LINE RBV..LLUND..BAYYS..PUT...DIRECT") Then
trans308C="TUSKY"
ind308C="4"
问题:如果文本文件的创建者在此行中的任何位置放置了另一个空格“在线路的RB或西部RBV..LLUND..BAYYS..PUT..DIRECT”脚本将无法识别该字符串。在上面的例子中,我不得不创建另一个或带有额外空格或几个点的InStr(strLine,“”)语句。
更新: 我会尝试类似的事情:
set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile("C:\Users\AW\Desktop\Entries1.txt")
strLine1 = objFile.Readline(1)
strLine2 = objFile.Readline(2)
If InStr(strLine1, "FLIGHTS OVER TUSKY") and InStr(strLine2, "RBV..LLUND..BAYYS..PUT..DIRECT") Then
trans1="TUSKY"
ind1="4"
并查看我是否可以一次读取2行,然后遍历文本文件。
答案 0 :(得分:1)
如果你害怕正则表达式并寻找替代品,你可以创建一个笨重的函数来添加到你的脚本中。根据您的样本,似乎fullstops通常也不会用于正常目的,并且往往代表空格。 (我建议改用Regex!)
使用这些假设,你可以创建一个像这样的笨重的函数,它寻找fullstops,并将它们转换为空格,删除额外的空格。显然,这很大程度上依赖于你的输入源文件不会改变太多 - 你真的应该正在使用正则表达式正确地处理这些东西。
您可以使用以下功能测试基本预期结果。 例如,假设您在firLine中设置了一行文本,其中包含多个空格或fullstops,该函数将识别出这一点:
firLine = "THIS.IS.A.TEST..YOU...SEE MULTIPLE SPACES"
if instr(sanitize(firLine),"THIS IS A TEST YOU SEE MULTIPLE SPACES") then
wscript.echo "Found it"
End If
以下是您可以在脚本末尾粘贴的笨重函数:
Function sanitize(srStr)
Dim preSanitize, srC, spaceMarker
preSanitize = ""
for srC = 1 to len(srStr)
if mid(srStr, srC, 1) = "." then
preSanitize = preSanitize & " "
else
preSanitize = preSanitize & mid(srStr, srC, 1)
End If
spaceMarker = false
sanitize = ""
for srC = 1 to len(preSanitize)
If mid(preSanitize, srC, 1) = " " then
if spaceMarker = false then
sanitize = sanitize & mid(preSanitize, srC, 1)
spaceMarker = true
End If
else
sanitize = sanitize & mid(preSanitize, srC, 1)
spaceMarker = false
End If
Next
End Function
答案 1 :(得分:0)
InStr()是检查字符串是否包含固定/文字字符串的好工具。要允许变体,您应该使用正则表达式(请参阅this或that)。
但是,首先,您应该按照您的规范进行操作。用简单的单词和一些样本描述您认为(不)匹配的内容。
例如:一个包含“FLIGHTS”,“OVER”和“TUSKY”字样的字符串,其间至少有一个空格是匹配 - “飞越TUSKY”,“飞越TUSKY”; “在托斯卡纳上空飞行”是一次“近乎未命中” - 那么“飞越TUSKY”会怎样?
答案 2 :(得分:0)
好消息!我终于想出了如何做到这一点。
以下是“Entries1.txt”
的摘录 BRADD KANNI的飞行请文件:
威盛J174.RIFLE..ACK..DIRECT
或RBV.J62.ACK..DIRECT
飞往KANNI WHALE的飞行请查询:
VIA J174.RIFLE..ACK..DIRECT或
飞机上的飞行请文件:“
ETC,ETC
set WshShell = WScript.CreateObject("WScript.Shell")
set objFSO = CreateObject("Scripting.FileSystemObject")
set objFile = objFSO.OpenTextFile("C:\Users\AW\Desktop\Entries1.txt")
Do until objFile.AtEndOfStream
firLine = objFile.ReadLine
If InStr(firLine, "FLIGHTS OVER KANNI WHALE PLEASE") Then
secLine = objFile.ReadLine
If InStr(secLine, "J174.RIFLE..ACK..DIRECT") Then
'I'm going to change the below once I piece it all together.
WScript.Echo "works"
Else WScript.Echo "Not found"
'cut, paste and modify all my "IF" statements below
End If
End If
loop