Solved

Input #1 won't bring in the entire line

Posted on 2003-12-10
9
659 Views
Last Modified: 2010-05-01
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
Comment
Question by:sirbounty
  • 5
  • 4
9 Comments
 
LVL 14

Expert Comment

by:aelatik
ID: 9913777
Line Input #1, mystring

instead of

Input #1, mystring
0
 
LVL 14

Expert Comment

by:aelatik
ID: 9913816
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
 
LVL 67

Author Comment

by:sirbounty
ID: 9913825
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
 
LVL 14

Expert Comment

by:aelatik
ID: 9914126
What exactly is the contruction of you log file. What do you use as seperators ?
0
Find Ransomware Secrets With All-Source Analysis

Ransomware has become a major concern for organizations; its prevalence has grown due to past successes achieved by threat actors. While each ransomware variant is different, we’ve seen some common tactics and trends used among the authors of the malware.

 
LVL 14

Accepted Solution

by:
aelatik earned 350 total points
ID: 9914204
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
 
LVL 67

Author Comment

by:sirbounty
ID: 9914252
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
 
LVL 67

Author Comment

by:sirbounty
ID: 9914832
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
 
LVL 14

Expert Comment

by:aelatik
ID: 9915844
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
 
LVL 67

Author Comment

by:sirbounty
ID: 9916919
So it creates an array - great.  Thanx again!
0

Featured Post

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
Since upgrading to Office 2013 or higher installing the Smart Indenter addin will fail. This article will explain how to install it so it will work regardless of the Office version installed.
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Show developers how to use a criteria form to limit the data that appears on an Access report. It is a common requirement that users can specify the criteria for a report at runtime. The easiest way to accomplish this is using a criteria form that a…

706 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now