Reading Fixed Width Files In VB6

Level:
Level2

 

The Line Input # Statement

 

The Line Input # reads a line (up to the carriage return) from a sequential file. The general format is:

 

Line Input #<filenumber>, <string variable>

 

·         filenumber refers to the file that was Opened As that number (for Input) in the Open statement

 

·         string variable is a string variable into which the line read from the sequential file will be stored

 

You would typically use Line Input # to read records from a file where the fields are fixed width. The technique is to use Line Input # to read the entire line (record) into a string variable, then use various VB functions such as Mid$ and Val to break up the record string into individual fields and assign them to variables defined as the appropriate data type.

 

Example – Reading a Fixed-Width "Print" Format File:

 

Recall the fixed-width "print" format version of the employee file shown earlier:

 

1 1 2 2 3 3 4 4 5 5 6 6

1...5....0....5....0....5...0....5....0....5....0....5....0....5.

ANDY ANDERSON 100 PROGRAMMER 3/4/1997 25.00

BILLY BABCOCK 110 SYSTEMS ANALYST 2/16/1996 33.50

CHARLIE CHEESEMAN 100 COMPUTER OPERATOR 3/1/1996 15.00

DARLENE DUNCAN 200 RECEPTIONIST 10/11/199812.75

ERNIE EACHUS 300 MAIL ROOM CLERK 8/19/1997 10.00

 

The revised "full-blown" example is shown below (with new statements in bold):

 

 

Dim strEmpFileName As String

Dim strBackSlash As String

Dim intEmpFileNbr As Integer

 

Dim strEmpRecord As String

Dim strEmpName As String

Dim intDeptNbr As Integer

Dim strJobTitle As String

Dim dtmHireDate As Date

Dim sngHrlyRate As Single

 

strBackSlash = IIf (Right$(App.Path, 1) = "\", "", "\")

strEmpFileName = App.Path & strBackSlash & "EMPLOYEE.DAT"

intEmpFileNbr = FreeFile

 

Open strEmpFileName For Input As #intEmpFileNbr

 

Do Until EOF(intEmpFileNbr)

Line Input #intEmpFileNbr, strEmpRecord

strEmpName = Left$(strEmpRecord, 20)

intDeptNbr = Val(Mid$(strEmpRecord, 21, 4))

strJobTitle = Mid$(strEmpRecord, 30, 21)

dtmHireDate = CDate(Mid$(strEmpRecord, 51, 10))

sngHrlyRate = Val(Mid$(strEmpRecord, 61, 5))

Print strEmpName; _

Tab(25); Format$(intDeptNbr, "@@@@"); _

Tab(35); strJobTitle; _

Tab(60); Format$(dtmHireDate, "mm/dd/yyyy"); _

Tab(71); Format$(Format$(sngHrlyRate, "Standard"), "@@@@@@@")

Loop

 

Close #intEmpFileNbr

 

 

 

A description of each of the new statements follows:

 

Line Input #intEmpFileNbr, strEmpRecord

Reads a line from the employee file and stores it in the variable strEmpRecord

 

strEmpName = Left$(strEmpRecord, 20)

Takes the leftmost 20 bytes of strEmpRecord (in the case of the first record, "ANDY ANDERSON") and stores it in the variable strEmpName

 

intDeptNbr = Val(Mid$(strEmpRecord, 21, 4))

Note the use of nested functions here. The Mid$ function takes the four bytes starting at position 21 of strEmpRecord resulting in the string " 100" in the case of the first record). The Val function then converts " 100" to a number and causes 100 to be stored in the variable intDeptNbr.

 

strJobTitle = Mid$(strEmpRecord, 30, 21)

Takes the 21 bytes starting at position 30 of strEmpRecord (in the case of the first record, "PROGRAMMER") and stores it in the variable strJobTitle.

 

dtmHireDate = CDate(Mid$(strEmpRecord, 51, 10))

Note the use of nested functions here. The Mid$ function takes the 10 bytes starting at position 51 of strEmpRecord resulting in the string "3/4/1997" in the case of the first record). The CDate function then converts this string into a VB internal Date data type and stores it in the variable dtmHireDate. (The CDate function will convert any string that "looks like" a date into the VB Date data type. This includes strings like "March 4, 1997".)

 

sngHrlyRate = Val(Mid$(strEmpRecord, 61, 5))

Note the use of nested functions here. The Mid$ function takes the five bytes starting at position 61 of strEmpRecord resulting in the string "25.00" in the case of the first record). The Val function then converts " 25.00" to a number and causes 25 to be stored in the variable sngHrlyRate.

 

To demonstrate the code above

  • Create a new "Try It" project in a new folder. Make your form wide enough for the display.
  • In that same folder, create the fixed-width (print format) file called EMPLOYEE.DAT (you can use NotePad for this)
  • Place the code in the cmdTryIt_Click event procedure.

Run the program and click the "Try It" button. The output should look very similar to that of the previous example.

 

Download the VB project code for the example above here.

If you enjoyed this post, subscribe for updates (it's free)

Excellent Job, Thank you

Excellent Job, Thank you