Cool Line Input feature
#1
Well, okay, this might also be one of those situations where I'm the only guy who didn't get the memo.

If we create a text file with multiple lines, each line ending with a <return>, and we use Line Input to read each line as one long string, the Line Input command only reads the top line in the file.

Okay, I thought, I can deal with that. I can always copy-paste the other lines to the top, to input each line.

No need!

All you have to do is go back to that Line Input statement, and it will automatically read the next line down, in the text file. How cool is that?

Code: (Select All)
Dim Shared a$
Open "..\Textfile_with_many_lines_each_ending_with_carriage_return.ini" For Input As #1
1 Line Input #1, a$
Call sub_to_do_whatever
Print
Input "More sentences (y/n)"; cont$
If cont$ = "y" Then
    Print
    GoTo 1
End If
Close
End

Sub sub_to_do_whatever
    Print a$
End Sub

I add one line at the bottom of the text file, which says "stop," to end the process. For this demo program, the subroutine only prints the line input from the text file.
Reply
#2
Unless I misunderstood the post, QBasic / QB64 has always acted in this manner. I'll have a talk with our mail room, memo division.

Basically, LINE INPUT inputs the line up to the carriage return and since we are working with a sequential file here, that index place is maintained in memory; therefore, the next line input statements turns out the next line of text up to the next carriage return.

Now if you ever use binary, you have two choices. You can use LINE INPUT in QB64 only (not QBasic) with open for binary. It's faster, and works the same as a sequential read, but you can use it with get to input the entire text file at once. Of course then, you have to parse it if you want to read it line by line. I use the latter method in my WP routines.

Pete
Reply
#3
Yeah, Line Input reads one line each time you use it, into one string variable that you specify.  To read more lines, you need to use a loop or multiple Line Inputs.  The underlying file I/O handler keeps track of where you left off after the last read.

Code: (Select All)
Print "Input allows us to read multiple comma-separated numeric values...."
Input "type 3 numbers: "; a, b, c
Print ">> "; a, b, c
Print



Print "Line Input lets us read only one line as a string per invocation...."
Do
    Line Input "type a line: "; a$
    Print ">> "; a$
    Print
Loop Until a$ = "bye"
Reply




Users browsing this thread: 2 Guest(s)