Solved

how can i read the text file?

Posted on 2000-03-26
24
155 Views
Last Modified: 2010-05-02
i need to open the text file with the following content and read each field one by one. (assume file name ="log.txt")

Event  Date  Time  User#  User_Name
__________________________________
                                                           
IN  02/21/00 12:54   11    Thomas
IN  02/21/00 13:04   23    Gio
OUT 02/21/00 13:05   36    Mich
OUT 02/21/00 13:08   28    Ereno
OUT 02/21/00 13:10   19    Nocot
IN  02/21/00 13:10   2     Rrez


How can I read the file line by line, and get the fields one by one, because i need to insert the fields into db.
0
Comment
Question by:binary1
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 6
  • 5
  • +2
24 Comments
 
LVL 10

Accepted Solution

by:
caraf_g earned 25 total points
ID: 2659851
Dim intFile As Integer
Dim strLineRead As Integer
Dim intPos As Integer
Dim intLastPos As Integer
Dim strINOUT As String
Dim strDate As String
Dim strUserNumber As String
Dim strUserName As String

intFile = FreeFile

Open "X:\Y\Z\log.txt" for Input As #intFile

Do While Not EOF(intFile)
    Line Input #intFile, strLineRead
    intPos = Instr(strLineRead, " ")
    strINOUT = Left(strLineRead, intPos - 1)

    intLastPos = intPos + 1
    intPos = Instr(intLastPos, strLineRead, " ")
    strDate = Mid(strLineRead, intLastPos, intPos - intLastPos)

    intLastPos = intPos + 1
    intPos = Instr(intLastPos, strLineRead, " ")
    strUserNumber = Mid(strLineRead, intLastPos, intPos - intLastPos)

    strUserName = Right(strLineRead, len(strLineRead) - intPos)
Loop

Close #intFile
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2659876
binary1,

Please do not touch this question for the moment. As you can see there is a problem with this question: I managed to post TWO proposed answers. I'd like to give Community Support a chance to look at this, so would you mind not rejecting or accepting any of the above proposed answers for the moment?
0
 
LVL 3

Expert Comment

by:darinw
ID: 2659879
Reviewing question.

darinw
Customer Service
0
Online Training Solution

Drastically shorten your training time with WalkMe's advanced online training solution that Guides your trainees to action. Forget about retraining and skyrocket knowledge retention rates.

 

Author Comment

by:binary1
ID: 2659983
I think there must be some thing wrong with the code, because i can't i can't get any value for strinout,strdate, and etc...most likely it was cause by the leading space in each line, if u can solve this proble for me, i will give the score and a for me. thanks ...sorry i am new in basic
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2660011
Hi binary1,

If your lines contain leading spaces, replace the first Instr line
    intPos = Instr(strLineRead, " ")

with something like
    intPos = Instr(N, strLineRead, " ")

where N is the first non-blank position in each line.

This only works if each line starts with the same number of spaces, or if you can guarantee that a certain position at the start of the line is not blank, e.g.

  A
 BA
  C
  D
 EF
GHE
WOO
HOO
 AB

In the list above you know that position 3 is always filled, so use 3 as the value of N.


Hope this helps.

Again, please do not accept or reject the answer until Customer Service have had a chance to look into the double proposed answer posting, thanks ;-)
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2660017
Oh, PS, in that case, strINOUT would be filled as follows:

    strINOUT = Trim(Left(strLineRead, intPos - 1))

to get rid of leading blanks.
0
 
LVL 14

Expert Comment

by:wsh2
ID: 2660131
Caraf_g:
If he has VB6 this can be a whole lot neater.. <smile>. Modifying your loop..

<----- Code Begin ----->

Dim strInput() as String
Do While Not EOF(intFile)
    Line Input #intFile, strLineRead
    strInput() = Split(strLineRead, " ")
    strInout = strInput(0)
    strDate = strInput(1)
    strUserNumber = strInput(2)
    strUserName = strInput(3)
Loop

<----- Code End ----->

Don't ya just love a nosey kibitzer?.. <LOL>

0
 
LVL 14

Expert Comment

by:wsh2
ID: 2660146
Caraf_g:
Oh.. and to clean up leading and trailing spaces put this after the LineInput statement..

  strLineRead = Trim(strLineRead)  
0
 
LVL 28

Expert Comment

by:Ark
ID: 2660177
Hi
Do you see that there are TWO spaces before last field? :-)
Cheers
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2660618
kewl. Good observation!


Dim intFile As Integer
Dim strLineRead As Integer
Dim intPos As Integer
Dim intLastPos As Integer
Dim strINOUT As String
Dim strDate As String
Dim strUserNumber As String
Dim strUserName As String
Dim intStart As Integer

intFile = FreeFile

Open "X:\Y\Z\log.txt" for Input As #intFile

intStart = <some appropriate value. intStart is the value N I was talking about in an earlier comment>
Do While Not EOF(intFile)
    Line Input #intFile, strLineRead
    intPos = Instr(intStart, strLineRead, " ")
    strINOUT = Trim(Left(strLineRead, intPos - 1))

    intLastPos = intPos + 1
    Do While intLastPos <= len(strLineRead)
        If Mid(strLineRead, intLastPos, 1) = " " Then
            intLastPos = intLastPos + 1
        Else
            Exit Do
        End If
    Loop
    intPos = Instr(intLastPos, strLineRead, " ")
    strDate = Mid(strLineRead, intLastPos, intPos - intLastPos)

    intLastPos = intPos + 1
    Do While intLastPos <= len(strLineRead)
        If Mid(strLineRead, intLastPos, 1) = " " Then
            intLastPos = intLastPos + 1
        Else
            Exit Do
        End If
    Loop
    intPos = Instr(intLastPos, strLineRead, " ")
    strUserNumber = Mid(strLineRead, intLastPos, intPos - intLastPos)

    strUserName = Right(strLineRead, len(strLineRead) - intPos)
Loop

Close #intFile


0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2660635
Couplatrims for good measure:

.....
    strDate = Trim(Mid(strLineRead, intLastPos, intPos - intLastPos)

.....
    strUserNumber = Trim(Mid(strLineRead, intLastPos, intPos - intLastPos))

..... and
    strUserName = Trim(Right(strLineRead, len(strLineRead) - intPos))
0
 

Author Comment

by:binary1
ID: 2662491
Thanks, can i accept u answer right now? However i find the better solution by using split and check with the condition....I'll give a to u for u kindness
0
 
LVL 14

Expert Comment

by:wsh2
ID: 2662943
Assuming you are completely satisfied, you can select the comment you feel most appropriate to your need and accept it as the answer.. <smile>.
0
 
LVL 14

Expert Comment

by:wsh2
ID: 2662948
No offense to Caraf_g.. but if you prefer my comment (the Split).. then reject Caraf_Gs answer.. and then go back in and accept Wsh2's.. <smile>.
0
 

Author Comment

by:binary1
ID: 2662980
wsh2
  u solution also have the same problem with the space in between the line, but most likely i will split the score for both of u, btw how can i split the score?
0
 
LVL 28

Expert Comment

by:Ark
ID: 2663009
binary1,
Split is better. First, you can remove from array all empty (ie filling with spaces) entries, so you can read files with ANY length spaces delimiters. Second, it's easy to change code for any other delimiter (commas,tabs etc). The only problem - this code require VB6 :-(
Cheers
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2663149
To split the score post a question in Community Support (see link at very end of page). They'll reduce the number of points for this question by half, and you can then give it to one person. For the other person you can post a dummy question "points for TheOtherPerson" for the other half of the points, and they can then answer that question instead. When you post such a dummy question always mention the URL of the original question so that other people will know why you're doing it.

Hope this helps!

Pino
0
 
LVL 10

Expert Comment

by:caraf_g
ID: 2663151
To split the score post a question in Community Support (see link at very end of page). They'll reduce the number of points for this question by half, and you can then give it to one person. For the other person you can post a dummy question "points for TheOtherPerson" for the other half of the points, and they can then answer that question instead. When you post such a dummy question always mention the URL of the original question so that other people will know why you're doing it.

In the CS question also mention this URL. You don't need to assign points to it.

Hope this helps!

Pino
0
 
LVL 14

Expert Comment

by:wsh2
ID: 2663157
binary1 writes: "space in between the line"

If you mean extra space between the fields.. easy..

Do While Not EOF(intFile)
  Line Input #intFile, strLineRead
  strLineRead = Trim(strLineRead)
  Do While instr(1, strLineRead, "  ") <> 0 _
    strLineRead = Replace (strLineRead, "  ", " ")
  Loop

<smile>
---------------------------------------
To award points.. to more than one person.. take out a new question and in the subject place FOR <EE name>.. (eg. in my case it would be FOR WSH2).. and assign the points.. <smile>.

0
 
LVL 14

Expert Comment

by:wsh2
ID: 2663164
By the way Binary1.. as to points.. have you seen Tseyeh recently?.. <smile>.
0
 

Author Comment

by:binary1
ID: 2667503
yup... he is my officemate
0
 

Author Comment

by:binary1
ID: 2692012
why they don't reduce the score to half?
0
 
LVL 3

Expert Comment

by:darinw
ID: 2698751
Community Support has reduced points from 50 to 25
0
 
LVL 3

Expert Comment

by:darinw
ID: 2698752
Reducing points to allow split.

Sorry for the delay. For some reason, your Community Support question was not visible until today :(

darinw
Customer Service
0

Featured Post

PeopleSoft Has Never Been Easier

PeopleSoft Adoption Made Smooth & Simple!

On-The-Job Training Is made Intuitive & Easy With WalkMe's On-Screen Guidance Tool.  Claim Your Free WalkMe Account Now

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction I needed to skip over some file processing within a For...Next loop in some old production code and wished that VB (classic) had a statement that would drop down to the end of the current iteration, bypassing the statements that were c…
When designing a form there are several BorderStyles to choose from, all of which can be classified as either 'Fixed' or 'Sizable' and I'd guess that 'Fixed Single' or one of the other fixed types is the most popular choice. I assume it's the most p…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…

726 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