#1
|
|||
|
|||
Need to skip the first line when reading back a text file
First a disclaimer...I'm using SecureCRT 3.4....yes I know it's 2008, but I've just always used it so please forgive me.
![]() I'm cobbling together a VBS script to automate some route work, and part of it is starting a local text file, cat'ing a file on a unix server, stopping the file, logging into a device and spitting it back out from the local copy. Here's the relevant bit: crt.Session.Log True crt.Screen.Send "cat /home/djudd/tmp/" & router_name & "_4.txt" & vbCr crt.Screen.WaitForString "$" crt.Session.Log False Then I'm just using the text book example for reading back a locally created text file: Const ForReading = 1 Const ForWriting = 2 Dim fso, file, str Set fso = CreateObject("Scripting.FileSystemObject") ' Note: A runtime exception will be generated if 'input.txt' doesn't exist. ' Set file = fso.OpenTextFile("c:\mysession.log", ForReading, False) crt.Screen.Synchronous = True Do While file.AtEndOfStream <> True str = file.Readline ' Send the line with an appended CR ' crt.Screen.Send str & Chr(13) ' Wait for my prompt before sending the next line ' 'crt.Screen.WaitForString "prompt$" Loop crt.Screen.Synchronous = False So here's my question. The local text file created contains a grep command that I don't want spit back into the router config...any ideas on how to get it out? First I tried moving the session.log true statement until after the cat command, then I tried usin WSH to invoke a local copy of "egrep -v" but I suspect my ancient copy of SecureCRT caused that to error out....so right now I'm at a wall. I just need to skip the first line...but the file will vary in length so I dont know what line it will stop on. Any ideas would help, thanks. |
#2
|
||||
|
||||
Hi Djudd,
Have you considered using the built in VBScript function of 'instr' to check to see if "grep" exits in the "str" variable? The send of the string and the wait for the prompt could be placed in an if statement and only sent if the string does not contain "grep". Would this be an option?
__________________
Thanks, Teresa Teresa Nygren |
#3
|
|||
|
|||
So what your saying is the first line could be filtered by using that method as long as there was a unique string to catch it with.
Here's an example of the first line I want to not pass back: djudd/12:05pm~$cat /home/djudd/tmp/r2.sfldmi_4.txt So I could set it to say "hey, if instr =djudd, then don't send that file and just keep moving on your merry way"? Any advice on how to try that? I've never really coded before so I"m kinda learning as I go ![]() |
#4
|
||||
|
||||
Hi Djudd,
Here is an example of what it would look like: Code:
If instr (str, "grep") = 0 then crt.Screen.Send str & Chr(13) ' Wait for my prompt before sending the next line ' 'crt.Screen.WaitForString "prompt$" End If Does this help?
__________________
Thanks, Teresa Teresa Nygren |
#5
|
|||
|
|||
That does help thank you for the direction on that, I ended up using it like this:
Do While file.AtEndOfStream <> True str = file.Readline ' Send the line with an appended CR If instr (str, "djudd") = 0 then crt.Screen.Send str & Chr(13) else end if ' Wait for my prompt before sending the next line 'crt.Screen.WaitForString "prompt$" Loop So it removes the first line that contains the text djudd....of course it would remove any line number, but the point is it works ![]() Dennis Last edited by djudd; 09-30-2008 at 07:32 PM. |
![]() |
Thread Tools | |
Display Modes | Rate This Thread |
|
|