190 lines
4.3 KiB
QBasic
190 lines
4.3 KiB
QBasic
' ============================================================
|
|
' Test program for File I/O features
|
|
' OPEN, CLOSE, PRINT #, INPUT #, LINE INPUT #, WRITE #,
|
|
' EOF(), LOF(), FREEFILE()
|
|
' ============================================================
|
|
|
|
PRINT "==== File I/O Tests ===="
|
|
|
|
' ---- Test 1: Basic OPEN/PRINT #/CLOSE (write a file) ----
|
|
PRINT ""
|
|
PRINT "---- Test 1: Write file with PRINT # ----"
|
|
OPEN "/tmp/basic_test1.txt" FOR OUTPUT AS #1
|
|
PRINT #1, "Hello, File World!"
|
|
PRINT #1, "Line two"
|
|
PRINT #1, "Line three"
|
|
CLOSE #1
|
|
PRINT "Wrote 3 lines to /tmp/basic_test1.txt"
|
|
|
|
' ---- Test 2: Read file back with LINE INPUT # ----
|
|
PRINT ""
|
|
PRINT "---- Test 2: Read file with LINE INPUT # ----"
|
|
DIM line$ AS STRING
|
|
OPEN "/tmp/basic_test1.txt" FOR INPUT AS #1
|
|
DIM lineCount AS INTEGER
|
|
lineCount = 0
|
|
DO WHILE NOT EOF(1)
|
|
LINE INPUT #1, line$
|
|
lineCount = lineCount + 1
|
|
PRINT "Line "; lineCount; ": "; line$
|
|
LOOP
|
|
CLOSE #1
|
|
PRINT "Read "; lineCount; " lines"
|
|
|
|
' ---- Test 3: FREEFILE ----
|
|
PRINT ""
|
|
PRINT "---- Test 3: FREEFILE ----"
|
|
DIM f AS INTEGER
|
|
f = FREEFILE()
|
|
PRINT "First free file number: "; f
|
|
OPEN "/tmp/basic_test2.txt" FOR OUTPUT AS #f
|
|
PRINT #f, "Written using FREEFILE"
|
|
CLOSE #f
|
|
PRINT "Wrote using file #"; f
|
|
|
|
' Read it back to verify
|
|
OPEN "/tmp/basic_test2.txt" FOR INPUT AS #1
|
|
LINE INPUT #1, line$
|
|
CLOSE #1
|
|
PRINT "Read back: "; line$
|
|
|
|
' ---- Test 4: Numeric data with PRINT # and INPUT # ----
|
|
PRINT ""
|
|
PRINT "---- Test 4: Numeric I/O ----"
|
|
DIM x AS DOUBLE
|
|
DIM y AS DOUBLE
|
|
DIM n AS INTEGER
|
|
x = 3.14159
|
|
y = 2.71828
|
|
n = 42
|
|
|
|
OPEN "/tmp/basic_test3.txt" FOR OUTPUT AS #1
|
|
PRINT #1, x
|
|
PRINT #1, y
|
|
PRINT #1, n
|
|
CLOSE #1
|
|
|
|
DIM rx AS DOUBLE
|
|
DIM ry AS DOUBLE
|
|
DIM rn AS INTEGER
|
|
OPEN "/tmp/basic_test3.txt" FOR INPUT AS #1
|
|
INPUT #1, rx
|
|
INPUT #1, ry
|
|
INPUT #1, rn
|
|
CLOSE #1
|
|
PRINT "Read x = "; rx
|
|
PRINT "Read y = "; ry
|
|
PRINT "Read n = "; rn
|
|
|
|
' ---- Test 5: WRITE # (CSV-style output) ----
|
|
PRINT ""
|
|
PRINT "---- Test 5: WRITE # (CSV) ----"
|
|
DIM name$ AS STRING
|
|
DIM age AS INTEGER
|
|
DIM score AS DOUBLE
|
|
name$ = "Alice"
|
|
age = 30
|
|
score = 95.5
|
|
|
|
OPEN "/tmp/basic_test4.csv" FOR OUTPUT AS #1
|
|
WRITE #1, name$, age, score
|
|
name$ = "Bob"
|
|
age = 25
|
|
score = 88.3
|
|
WRITE #1, name$, age, score
|
|
CLOSE #1
|
|
|
|
' Read back and display
|
|
OPEN "/tmp/basic_test4.csv" FOR INPUT AS #1
|
|
DO WHILE NOT EOF(1)
|
|
LINE INPUT #1, line$
|
|
PRINT "CSV: "; line$
|
|
LOOP
|
|
CLOSE #1
|
|
|
|
' ---- Test 6: LOF (file length) ----
|
|
PRINT ""
|
|
PRINT "---- Test 6: LOF ----"
|
|
OPEN "/tmp/basic_test1.txt" FOR INPUT AS #1
|
|
DIM fsize AS LONG
|
|
fsize = LOF(1)
|
|
PRINT "File size of test1.txt: "; fsize; " bytes"
|
|
CLOSE #1
|
|
|
|
' ---- Test 7: APPEND mode ----
|
|
PRINT ""
|
|
PRINT "---- Test 7: APPEND mode ----"
|
|
OPEN "/tmp/basic_test1.txt" FOR APPEND AS #1
|
|
PRINT #1, "Appended line four"
|
|
PRINT #1, "Appended line five"
|
|
CLOSE #1
|
|
|
|
' Read all lines back
|
|
OPEN "/tmp/basic_test1.txt" FOR INPUT AS #1
|
|
lineCount = 0
|
|
DO WHILE NOT EOF(1)
|
|
LINE INPUT #1, line$
|
|
lineCount = lineCount + 1
|
|
PRINT "Line "; lineCount; ": "; line$
|
|
LOOP
|
|
CLOSE #1
|
|
PRINT "Total lines after append: "; lineCount
|
|
|
|
' ---- Test 8: PRINT # with semicolons (no newline) ----
|
|
PRINT ""
|
|
PRINT "---- Test 8: PRINT # with separators ----"
|
|
OPEN "/tmp/basic_test5.txt" FOR OUTPUT AS #1
|
|
PRINT #1, "A"; "B"; "C"
|
|
PRINT #1, 10; " "; 20; " "; 30
|
|
CLOSE #1
|
|
|
|
OPEN "/tmp/basic_test5.txt" FOR INPUT AS #1
|
|
DO WHILE NOT EOF(1)
|
|
LINE INPUT #1, line$
|
|
PRINT " "; line$
|
|
LOOP
|
|
CLOSE #1
|
|
|
|
' ---- Test 9: Multiple files open simultaneously ----
|
|
PRINT ""
|
|
PRINT "---- Test 9: Multiple files ----"
|
|
OPEN "/tmp/basic_multi1.txt" FOR OUTPUT AS #1
|
|
OPEN "/tmp/basic_multi2.txt" FOR OUTPUT AS #2
|
|
PRINT #1, "File one content"
|
|
PRINT #2, "File two content"
|
|
CLOSE #2
|
|
CLOSE #1
|
|
|
|
OPEN "/tmp/basic_multi1.txt" FOR INPUT AS #1
|
|
LINE INPUT #1, line$
|
|
PRINT "File 1: "; line$
|
|
CLOSE #1
|
|
|
|
OPEN "/tmp/basic_multi2.txt" FOR INPUT AS #2
|
|
LINE INPUT #2, line$
|
|
PRINT "File 2: "; line$
|
|
CLOSE #2
|
|
|
|
' ---- Test 10: File I/O in a FUNCTION ----
|
|
PRINT ""
|
|
PRINT "---- Test 10: File I/O in FUNCTION ----"
|
|
|
|
FUNCTION CountLines(BYVAL fname AS STRING) AS INTEGER
|
|
LOCAL count AS INTEGER
|
|
LOCAL buf$ AS STRING
|
|
count = 0
|
|
OPEN fname FOR INPUT AS #3
|
|
DO WHILE NOT EOF(3)
|
|
LINE INPUT #3, buf$
|
|
count = count + 1
|
|
LOOP
|
|
CLOSE #3
|
|
CountLines = count
|
|
END FUNCTION
|
|
|
|
DIM cnt AS INTEGER
|
|
cnt = CountLines("/tmp/basic_test1.txt")
|
|
PRINT "CountLines result: "; cnt
|
|
|
|
PRINT ""
|
|
PRINT "==== ALL FILE I/O TESTS COMPLETE ===="
|