READFILE$: Difference between revisions

From QB64 Phoenix Edition Wiki
Jump to navigation Jump to search
(Created page with "{{DISPLAYTITLE: _READFILE$}} The '''_READFILE$''' function returns the complete contents of a file in a single string, but without the usual overhead. It does OPEN, GET and CLOSE the file in one run. {{PageSyntax}} : {{Parameter|content$}} = _READFILE$({{Parameter|fileSpec$}}) {{PageParameters}} * {{Parameter|content$}} is the entire file contents returned as STRING. Maybe empty, if the file specified was an empty file, or if the program is contin...")
 
No edit summary
 
(6 intermediate revisions by the same user not shown)
Line 4: Line 4:


{{PageSyntax}}
{{PageSyntax}}
: {{Parameter|content$}} = [[_READFILE$]]({{Parameter|fileSpec$}})
: {{Parameter|contents$}} = [[_READFILE$]]({{Parameter|fileSpec$}})




{{PageParameters}}
{{PageParameters}}
* {{Parameter|content$}} is the entire file contents returned as [[STRING]]. Maybe empty, if the file specified was an empty file, or if the program is continued from an file related [[ERROR Codes|ERROR]].
* {{Parameter|contents$}} is the entire file contents returned as [[STRING]]. May return an empty string, if the specified file was empty, or if the program was continued from a file related [[ERROR Codes|ERROR]].
* {{Parameter|fileSpec$}} is the name of the file to read as literal or variable [[STRING]], if required inclusive a full or relative path.
* {{Parameter|fileSpec$}} is the name of the file to read as literal or variable [[STRING]], if required inclusive a full or relative path.
** To avoid errors you should use [[_FILEEXISTS]] before calling this function to make sure the file exists.




{{PageDescription}}
{{PageDescription}}
* Sometimes it's required or at least useful to have the whole contents of a file in a single string for further processing, e.g. to use [[INSTR]] on it or similar task.
* Sometimes it's required or at least useful to have the whole contents of a file in a single string for further processing, e.g. to pass it to hashing or compression functions which expect strings.
* In earlier versions of QB64(PE) you had to implement that loading process manually all the time or create a reusable custom [[FUNCTION]] for it.
* In earlier versions of QB64(PE) you had to implement that loading process manually all the time or create a reusable custom [[FUNCTION]] for it.
* Now '''_READFILE''' will simplify this, it's mainly a convenience function to wrap the following code sequence in one handy function:
* Now '''_READFILE$''' will simplify this, it's mainly a convenience function to wrap the following code sequence into one handy function:
{{TextStart}}
{{TextStart}}
fh = {{Cb|FREEFILE}}
fh = {{Cb|FREEFILE}}
{{Cb|OPEN}} fileSpec$ {{Cb|FOR}} {{Cb|BINARY}} {{Cb|AS}} #fh
{{Cb|OPEN}} fileSpec$ {{Cb|FOR}} {{Cb|BINARY}} {{Cb|AS}} #fh
content$ = {{Cb|SPACE$}}({{Cb|LOF}}(fh))
contents$ = {{Cb|SPACE$}}({{Cb|LOF}}(fh))
{{Cb|GET}} #fh, , content$
{{Cb|GET}} #fh, , contents$
{{Cb|CLOSE}} #fh
{{Cb|CLOSE}} #fh
{{TextEnd}}
{{TextEnd}}
Line 39: Line 40:


{{PageExamples}}
{{PageExamples}}
;Example: Showing how the Crc-32 checksum can detect differences in two strings.
;Example 1: Showing that this function's result is equal to the code sequence shown above.
{{CodeStart}}
{{CodeStart}}
{{Cm|$COLOR}}:{{Text|0|#F580B1}}
fileSpec$ = {{Text|<nowiki>"source\global\settings.bas"</nowiki>|#FFB100}}
fh = {{Cl|FREEFILE}}
{{Cl|OPEN}} fileSpec$ {{Cl|OPEN#File_Access_Modes|FOR}} {{Cl|OPEN#File_Access_Modes|BINARY}} {{Cl|OPEN|AS}} #fh
content$ = {{Cl|SPACE$}}({{Cl|LOF}}(fh))
{{Cl|GET}} #fh, , content$
{{Cl|CLOSE}} #fh
{{Cl|COLOR}} LightGreen
{{Cl|PRINT}} {{Text|<nowiki>"Using old manual load method..."</nowiki>|#FFB100}}
{{Cl|COLOR}} White
{{Cl|PRINT}} content$
{{Cl|COLOR}} LightGreen
{{Cl|PRINT}} {{Text|<nowiki>"Using new direct load method..."</nowiki>|#FFB100}}
{{Cl|COLOR}} White
{{Cl|PRINT}} {{Cl|_READFILE$}}(fileSpec$)
{{Cl|END}}
{{CodeEnd}}
{{Small|Example by RhoSigma}}
----
;Example 2: Passing a whole file's contents to hashing functions.
{{CodeStart}}
{{Cm|$COLOR}}:{{Text|0|#F580B1}}
fileSpec$ = {{Text|<nowiki>"source\global\settings.bas"</nowiki>|#FFB100}}
{{Cl|COLOR}} LightGreen
{{Cl|PRINT}} {{Text|<nowiki>"CRC32 of the file..."</nowiki>|#FFB100}}
{{Cl|COLOR}} White
{{Cl|PRINT}} {{Cl|RIGHT$}}({{Text|<nowiki>"00000000"</nowiki>|#FFB100}} + {{Cl|HEX$}}({{Cl|_CRC32}}({{Cl|_READFILE$}}(fileSpec$))), {{Text|8|#F580B1}})
{{Cl|PRINT}}
{{Cl|COLOR}} LightGreen
{{Cl|PRINT}} {{Text|<nowiki>"MD5 of the file..."</nowiki>|#FFB100}}
{{Cl|COLOR}} White
{{Cl|PRINT}} {{Cl|_MD5$}}({{Cl|_READFILE$}}(fileSpec$))
{{Cl|END}}
{{CodeEnd}}
{{CodeEnd}}
{{Small|Example by RhoSigma}}




{{PageSeeAlso}}
{{PageSeeAlso}}
* [https://qb64phoenix.com/forum/showthread.php?tid=2699 Featured in our "Keyword of the Day" series]
* [[_WRITEFILE]], [[BLOAD]], [[BSAVE]]
* [[_DEFLATE$]], [[_INFLATE$]]
* [[_DEFLATE$]], [[_INFLATE$]]
* [[_ADLER32]], [[_MD5$]]
* [[_ADLER32]], [[_CRC32]], [[_MD5$]]




{{PageNavigation}}
{{PageNavigation}}

Latest revision as of 22:42, 25 May 2024

The _READFILE$ function returns the complete contents of a file in a single string, but without the usual overhead. It does OPEN, GET and CLOSE the file in one run.


Syntax

contents$ = _READFILE$(fileSpec$)


Parameters

  • contents$ is the entire file contents returned as STRING. May return an empty string, if the specified file was empty, or if the program was continued from a file related ERROR.
  • fileSpec$ is the name of the file to read as literal or variable STRING, if required inclusive a full or relative path.
    • To avoid errors you should use _FILEEXISTS before calling this function to make sure the file exists.


Description

  • Sometimes it's required or at least useful to have the whole contents of a file in a single string for further processing, e.g. to pass it to hashing or compression functions which expect strings.
  • In earlier versions of QB64(PE) you had to implement that loading process manually all the time or create a reusable custom FUNCTION for it.
  • Now _READFILE$ will simplify this, it's mainly a convenience function to wrap the following code sequence into one handy function:
fh = FREEFILE
OPEN fileSpec$ FOR BINARY AS #fh
contents$ = SPACE$(LOF(fh))
GET #fh, , contents$
CLOSE #fh


Availability


Examples

Example 1
Showing that this function's result is equal to the code sequence shown above.
$COLOR:0

fileSpec$ = "source\global\settings.bas"

fh = FREEFILE
OPEN fileSpec$ FOR BINARY AS #fh
content$ = SPACE$(LOF(fh))
GET #fh, , content$
CLOSE #fh

COLOR LightGreen
PRINT "Using old manual load method..."
COLOR White
PRINT content$

COLOR LightGreen
PRINT "Using new direct load method..."
COLOR White
PRINT _READFILE$(fileSpec$)

END
Example by RhoSigma

Example 2
Passing a whole file's contents to hashing functions.
$COLOR:0

fileSpec$ = "source\global\settings.bas"

COLOR LightGreen
PRINT "CRC32 of the file..."
COLOR White
PRINT RIGHT$("00000000" + HEX$(_CRC32(_READFILE$(fileSpec$))), 8)
PRINT

COLOR LightGreen
PRINT "MD5 of the file..."
COLOR White
PRINT _MD5$(_READFILE$(fileSpec$))

END
Example by RhoSigma


See also



Navigation:
Main Page with Articles and Tutorials
Keyword Reference - Alphabetical
Keyword Reference - By usage
Report a broken link