Read a file line by line: Difference between revisions
(Initial content) |
({{header|Visual Basic}}) |
||
Line 15: | Line 15: | ||
echo "$line" |
echo "$line" |
||
done |
done |
||
</lang> |
|||
=={{header|Visual Basic}}== |
|||
<lang vb> |
|||
' |
|||
' Read lines from a file |
|||
' |
|||
' (c) Copyright 1993 - 2011 Mark Hobley |
|||
' |
|||
' This code was ported from an application program written in Microsoft Quickbasic |
|||
' |
|||
' This code can be redistributed or modified under the terms of version 1.2 of |
|||
' the GNU Free Documentation Licence as published by the Free Software Foundation. |
|||
' |
|||
Sub readlinesfromafile() |
|||
var.filename = "foobar.txt" |
|||
var.filebuffersize = ini.inimaxlinelength |
|||
Call openfileread |
|||
If flg.error = "Y" Then |
|||
flg.abort = "Y" |
|||
Exit Sub |
|||
End If |
|||
If flg.exists <> "Y" Then |
|||
flg.abort = "Y" |
|||
Exit Sub |
|||
End If |
|||
readfilelabela: |
|||
Call readlinefromfile |
|||
If flg.error = "Y" Then |
|||
flg.abort = "Y" |
|||
Call closestream |
|||
flg.error = "Y" |
|||
Exit Sub |
|||
End If |
|||
If flg.endoffile <> "Y" Then |
|||
' We have a line from the file |
|||
Print message$ |
|||
GoTo readfilelabela |
|||
End If |
|||
Sub openfileread() |
|||
flg.streamopen = "N" |
|||
Call checkfileexists |
|||
If flg.error = "Y" Then Exit Sub |
|||
If flg.exists <> "Y" Then Exit Sub |
|||
Call getfreestream |
|||
If flg.error = "Y" Then Exit Sub |
|||
var.errorsection = "Opening File" |
|||
var.errordevice = var.filename |
|||
If ini.errortrap = "Y" Then |
|||
On Local Error GoTo openfilereaderror |
|||
End If |
|||
flg.endoffile = "N" |
|||
Open var.filename For Input As #var.stream Len = var.filebuffersize |
|||
flg.streamopen = "Y" |
|||
Exit Sub |
|||
openfilereaderror: |
|||
var.errorcode = Err |
|||
Call errorhandler |
|||
resume '!! |
|||
End Sub |
|||
Public Sub checkfileexists() |
|||
var.errorsection = "Checking File Exists" |
|||
var.errordevice = var.filename |
|||
If ini.errortrap = "Y" Then |
|||
On Local Error GoTo checkfileexistserror |
|||
End If |
|||
flg.exists = "N" |
|||
If Dir$(var.filename, 0) <> "" Then |
|||
flg.exists = "Y" |
|||
End If |
|||
Exit Sub |
|||
checkfileexistserror: |
|||
var.errorcode = Err |
|||
Call errorhandler |
|||
End Sub |
|||
Public Sub getfreestream() |
|||
var.errorsection = "Opening Free Data Stream" |
|||
var.errordevice = "" |
|||
If ini.errortrap = "Y" Then |
|||
On Local Error GoTo getfreestreamerror |
|||
End If |
|||
var.stream = FreeFile |
|||
Exit Sub |
|||
getfreestreamerror: |
|||
var.errorcode = Err |
|||
Call errorhandler |
|||
resume '!! |
|||
End Sub |
|||
Sub closestream() |
|||
If ini.errortrap = "Y" Then |
|||
On Local Error GoTo closestreamerror |
|||
End If |
|||
var.errorsection = "Closing Stream" |
|||
var.errordevice = "" |
|||
flg.resumenext = "Y" |
|||
Close #var.stream |
|||
If flg.error = "Y" Then |
|||
flg.error = "N" |
|||
'!! Call unexpectederror |
|||
End If |
|||
flg.streamopen = "N" |
|||
Exit Sub |
|||
closestreamerror: |
|||
var.errorcode = Err |
|||
Call errorhandler |
|||
resume next |
|||
End Sub |
|||
Public Sub errorhandler() |
|||
tmp$ = btrim$(var.errorsection) |
|||
tmp2$ = btrim$(var.errordevice) |
|||
If tmp2$ <> "" Then |
|||
tmp$ = tmp$ + " (" + tmp2$ + ")" |
|||
End If |
|||
tmp$ = tmp$ + " : " + Str$(var.errorcode) |
|||
tmp1% = MsgBox(tmp$, 0, "Error!") |
|||
flg.error = "Y" |
|||
If flg.resumenext = "Y" Then |
|||
flg.resumenext = "N" |
|||
' Resume Next |
|||
Else |
|||
flg.error = "N" |
|||
' Resume |
|||
End If |
|||
End Sub |
|||
Public Function btrim$(arg$) |
|||
btrim$ = LTrim$(RTrim$(arg$)) |
|||
End Function |
|||
</lang> |
</lang> |
||
Revision as of 06:39, 3 April 2011
You are encouraged to solve this task according to the task description, using any language you may know.
The task is to demonstrate how to read a file line by line (as opposed to reading the entire file).
UNIX Shell
<lang sh> cat foobar.txt | while read line ; do
# This loop repeats for each line of the file echo "$line"
done </lang>
Visual Basic
<lang vb> ' ' Read lines from a file ' ' (c) Copyright 1993 - 2011 Mark Hobley ' ' This code was ported from an application program written in Microsoft Quickbasic ' ' This code can be redistributed or modified under the terms of version 1.2 of ' the GNU Free Documentation Licence as published by the Free Software Foundation. '
Sub readlinesfromafile()
var.filename = "foobar.txt" var.filebuffersize = ini.inimaxlinelength Call openfileread If flg.error = "Y" Then flg.abort = "Y" Exit Sub End If If flg.exists <> "Y" Then flg.abort = "Y" Exit Sub End If
readfilelabela:
Call readlinefromfile If flg.error = "Y" Then flg.abort = "Y" Call closestream flg.error = "Y" Exit Sub End If If flg.endoffile <> "Y" Then ' We have a line from the file Print message$ GoTo readfilelabela End If
Sub openfileread()
flg.streamopen = "N" Call checkfileexists If flg.error = "Y" Then Exit Sub If flg.exists <> "Y" Then Exit Sub Call getfreestream If flg.error = "Y" Then Exit Sub var.errorsection = "Opening File" var.errordevice = var.filename If ini.errortrap = "Y" Then On Local Error GoTo openfilereaderror End If flg.endoffile = "N" Open var.filename For Input As #var.stream Len = var.filebuffersize flg.streamopen = "Y" Exit Sub
openfilereaderror:
var.errorcode = Err Call errorhandler resume '!!
End Sub
Public Sub checkfileexists()
var.errorsection = "Checking File Exists" var.errordevice = var.filename If ini.errortrap = "Y" Then On Local Error GoTo checkfileexistserror End If flg.exists = "N" If Dir$(var.filename, 0) <> "" Then flg.exists = "Y" End If Exit Sub
checkfileexistserror:
var.errorcode = Err Call errorhandler
End Sub
Public Sub getfreestream()
var.errorsection = "Opening Free Data Stream" var.errordevice = "" If ini.errortrap = "Y" Then On Local Error GoTo getfreestreamerror End If var.stream = FreeFile Exit Sub
getfreestreamerror:
var.errorcode = Err Call errorhandler resume '!!
End Sub
Sub closestream()
If ini.errortrap = "Y" Then On Local Error GoTo closestreamerror End If var.errorsection = "Closing Stream" var.errordevice = "" flg.resumenext = "Y" Close #var.stream If flg.error = "Y" Then flg.error = "N" '!! Call unexpectederror End If flg.streamopen = "N" Exit Sub
closestreamerror:
var.errorcode = Err Call errorhandler resume next
End Sub
Public Sub errorhandler()
tmp$ = btrim$(var.errorsection) tmp2$ = btrim$(var.errordevice) If tmp2$ <> "" Then tmp$ = tmp$ + " (" + tmp2$ + ")" End If tmp$ = tmp$ + " : " + Str$(var.errorcode) tmp1% = MsgBox(tmp$, 0, "Error!") flg.error = "Y" If flg.resumenext = "Y" Then flg.resumenext = "N"
' Resume Next
Else flg.error = "N"
' Resume
End If
End Sub
Public Function btrim$(arg$)
btrim$ = LTrim$(RTrim$(arg$))
End Function
</lang>