' ============================================================ ' 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 ===="