PlanetSquires Forums

Support Forums => José Roca Software => Topic started by: James Fuller on December 20, 2020, 05:07:32 PM

Title: Text File IO
Post by: James Fuller on December 20, 2020, 05:07:32 PM
The WinFBX framework is all unicode.
Are there any examples using File IO ?
I find the FreeBasic Help File Open statement a bit confusing with no unicode example.

Thanks

James

Title: Re: Text File IO
Post by: José Roca on December 20, 2020, 08:40:47 PM
Yes. See the documentation for the CTextStream class:
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md
Title: Re: Text File IO
Post by: SeaVipe on December 20, 2020, 08:56:43 PM
Hi James, this type of code serves my purposes:


' Put and Get return 0 on success.
Dim As Long ff = FreeFile
Dim as Long o = Open( "C:\MyFile.dat" For Binary Access Read as #ff )
If o = 0 Then '' Good Open
'' variable to hold file data
Dim buffer as String
If LOF(ff) > 0 Then
'' our string has as many characters as the file has in bytes
buffer = String(LOF(ff), 0)
'' size of buffer is known. Entire string filled with file data
Get #ff, , buffer
End If   
'' Or
'' Put #ff, 1, buffer
'' I typically don't check the return value of Put or Get
Dim As Long c = Close(#ff) '' or Close(ff)
If c <> 0 Then
? "C:\MyFile.dat. Close Error: "; c
End If
Else '' Bad Open
? "C:\MyFile.dat. open error: "; o
End If


However, Jose's class will do a much better job!
Title: Re: Text File IO
Post by: José Roca on December 20, 2020, 10:57:25 PM
CTextStream works with ansi or unicode sequential files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md

CFileStream works with binary files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CFileStream%20Class.md

And, contrarily to FreeBasic Open function, they also accept unicode for the file names.
Title: Re: Text File IO
Post by: James Fuller on December 21, 2020, 06:50:31 AM
José,
  This is the example from your help with an added else and it fails for me.
James


#define UNICODE
#INCLUDE ONCE "windows.bi"
#include "Afx/CTextStream.inc"
using Afx

' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for output as a text stream
IF pTxtStm.OpenForOutputW(ExePath & "\TestW.txt") = S_OK THEN
   ' // Write a string and an end of line to the stream
   pTxtStm.WriteLine "This is a test."
   '// Close the file
   pTxtStm.Close
Else
    ? "No GO"   
END IF

PRINT "Press any key to end..."
SLEEP
Title: Re: Text File IO
Post by: Paul Squires on December 21, 2020, 08:37:18 AM
For all my programs, I changed the file handling to use Jose's CFileStream and CTextStream. Works perfectly with ansi and unicode and the syntax is simple as well.
Title: Re: Text File IO
Post by: James Fuller on December 21, 2020, 09:33:11 AM
Quote from: Paul Squires on December 21, 2020, 08:37:18 AM
For all my programs, I changed the file handling to use Jose's CFileStream and CTextStream. Works perfectly with ansi and unicode and the syntax is simple as well.
Paul,
  Would you provide a small example of writing and reading a unicode text file?
Thank you,
James
Title: Re: Text File IO
Post by: José Roca on December 21, 2020, 01:41:12 PM
Quote from: James Fuller on December 21, 2020, 06:50:31 AM
José,
  This is the example from your help with an added else and it fails for me.
James

The method has an optional parameter to create the file if it does not exist. Therefore, use:


IF pTxtStm.OpenForOutputW(ExePath & "\TestW.txt", TRUE) = S_OK THEN

Title: Re: Text File IO
Post by: José Roca on December 21, 2020, 01:53:28 PM
> Would you provide a small example of writing and reading a unicode text file?

In the documentation there are examples to write to a file under the Create, Open (and its variations),  Write, WriteLine,WriteBlankLines topics, and for reading under the ReadLine and ReadAll topics.
Title: Re: Text File IO
Post by: Jim Dunn on May 11, 2022, 12:05:28 AM
Quote from: José Roca on December 20, 2020, 10:57:25 PMCTextStream works with ansi or unicode sequential files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md
CFileStream works with binary files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CFileStream%20Class.md

José, is there an "easy" way of determining if I file is "ansi/unicode" vs "binary" without reading the whole file?  I'm working on a "grep clone" and want to skip non-text files.  Thx!
Title: Re: Text File IO
Post by: José Roca on May 11, 2022, 06:00:20 AM
Sorry, I don't know of any easy way.