Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 671
  • Last Modified:

Input #1 won't bring in the entire line

I have a simple, but LARGE text file that I'd like to weed through automatically (using VB).
Basically, it's a log listing of certain files on my servers.
What I'd like to do is step through the log and check two lines, keeping them both in another file, if line 2 meets certain criteria.

Sample of my log:
------------------------------------------------------
Directory of \\FileServer5\Marketing\Photos\

04/09/1999  11:42 AM            32,768 OurTrip.jpg
--------------------------------------------------------

Now, if OurTrip.jpg exceeds 100,000,000, I want to make note of that in another file.

The problems I have are:
1> My log isn't consistent.  Sometimes, I'll have the first line, but not the second (for whatever reason, my script didn't pull the file info, I suppose).  So, if the second line (acutally the 3rd, cause there is a blank space between each line), is empty, I want to discard that entry and move on.

2> I've tried to pull the file in using the following code:
   Open "C:\files.log" For Input As #1
      Do While Not EOF(1)
        Input #1, mystring
        If Left(Trim(mystring), 15) = "Directory of \\" Then dirRoutine (mystring)
'****
      Loop
   Close #1
End Sub

The comment line '**** is where I'd like to check the size, but after the first loop, it only reads in "4" for that second line.  If I add a second variable to the input line, it will also pull in 11 from that second field, but I can't get it to pull in the entire line into one string - why not??

Can what I want to do, be done?
Should I go about it another way?

TIA!
~sirbounty
0
sirbounty
Asked:
sirbounty
  • 5
  • 4
1 Solution
 
aelatikCommented:
Line Input #1, mystring

instead of

Input #1, mystring
0
 
aelatikCommented:
This would be the whole picture :

Open "C:\files.log" For Input As #1
      Do While Not EOF(1)
       Line Input #1, mystring
        If Left(Trim(mystring), 15) = "Directory of \\" Then dirRoutine (mystring)
'****
      Loop
   Close #1
End Sub
0
 
sirbountyAuthor Commented:
That works much better - thanx.
Is there a for me to break down line 2 so that I can assign a variable to the date (the 1st part), time (2nd), size (3rd) and filename (which may include spaces...)
0
VIDEO: THE CONCERTO CLOUD FOR HEALTHCARE

Modern healthcare requires a modern cloud. View this brief video to understand how the Concerto Cloud for Healthcare can help your organization.

 
aelatikCommented:
What exactly is the contruction of you log file. What do you use as seperators ?
0
 
aelatikCommented:
This will work on the sample log you posted, but if other logs have different formats it won't work

Private Sub Form_Load()
Dim vDate, vTime, vSize, vFile, buffer
Open "C:\files.log" For Input As #1
      Do While Not EOF(1)
       Line Input #1, MyString
        buffer = Split(MyString, "            ")
        If UBound(buffer) = 1 Then
            vDate = DateValue(buffer(0))
            vTime = TimeValue(buffer(0))
            vSize = Split(buffer(1), " ")(0)
            vFile = Split(buffer(1), " ")(1)
            MsgBox vDate
            MsgBox vTime
            MsgBox vSize
            MsgBox vFile
        End If
      Loop
   Close #1
End Sub
0
 
sirbountyAuthor Commented:
It's just the one log file.  Format should be the same.  I should be able to get it from here.  I'll let you know shortly.
Thanx for the help!!!
0
 
sirbountyAuthor Commented:
aelatik, this is perfect!
Can you perhaps give me a brief description of split and buffer? (or a web ref).
I'm taking my 3rd course in VB, but I've taken so much time over the holidays (and then some) away from it, that I think I've lost a bit.  Although, I don't recall these commands, but we're mostly working with ADO stuff. . .

Thanx again!
0
 
aelatikCommented:
First of all, buffer doesnt mean a thing. Its a simple variable declaration.

The Split() function will split a given string to an array, you can set the delimeter yourself.

Example :

S = "1;2;3;4;5"
F = Split(S,";")

The results are as following :

F(0) = 1
F(1) = 2
F(2) = 3
F(3) = 4
F(4) = 5

example : msgbox F(0)

or a for each loop

For each X in F
 msgbox X
next
0
 
sirbountyAuthor Commented:
So it creates an array - great.  Thanx again!
0

Featured Post

What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

  • 5
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now