How to save/read external text files?

This script illustrates how to write data to a text file and read the contents of a text file.

How to save the contents of a form to a text file when the form is submitted

This example works only in an HTML Viewer publication as we use the “OnFormSubmit” event of the UserMain script. In an IE publication, you need to replace GetFormContents in WriteText by GetFormFieldValue, and call the WriteText procedure from JavaScript when the user clicks a button for instance.

First step: write the script

go to the Script Manager, double click on “UserMain” and:

1) add this line to the top of the script:

uses Classes;

2) copy/paste all of the following text:

procedure WriteTextToFile(Filename, Contents: String);
var
 T: TStringList;
begin
 T := TStringList.Create;
 // Sets the contents.
 T.Text := Contents;
 // Saves the file.
 T.SaveToFile(Filename);
 T.Free;
end;

procedure WriteText;
var
 S, S2: String;
begin
 // A simple script to test the function.
 // Finds a name for our text file.
 // a) Gets the path to the folder where to save the file.
 S := GetGlobalVar("HEPubStorageLocation", "");
 if S = "" then exit;
 // b) Appends the filename
 S := IncludeTrailingBackslash(S) + "testfile.txt";
 // Then obtains the form contents.
 S2 := GetFormContents;
 // Calls our procedure to output a text file.
 if S2 <> "" then WriteTextToFile(S, S2);
end;

function OnFormSubmit(Action, Method: String): Boolean;
begin
 // When a form is submitted by the user (HTML Viewer only)
 WriteText;
 // Set Result to True if you do not want the viewer to handle the form action itself.
 Result := False;
end;

Be sure to remove the existing OnFormSubmit event and replace it with the one shown above before you continue.

How does it work?

When you submit a form, the HTML viewer will trigger the OnFormSubmit event. As you can see, we call the WriteText procedure: the latter will find a name for the text file (using the global variable “HEPubStorageLocation” which ensures us that we have a folder where we can write files), read the contents of the form thanks to GetFormContents and finally write the contents of the text file.

The WriteTextToFile is a general function that you can use in any of your publication. It uses an internal object TStringList to create the text file.

How to read data from a text file

You can use this general function to get the entire contents of an existing text file:

uses Classes; //Add this to the top of the script

function ReadTextFile(Filename: String): String;
var
 T: TStringList;
begin
 T := TStringList.Create;
 // Loads the text file.
 T.LoadFromFile(Filename);
 // Gets the contents.
 Result := T.Text;
 T.Free;
end;

The TStringList object is an interesting object to manipulate text data and text files: for more information about how to use it, please go to this page: http://www.delphibasics.co.uk/RTL.asp?Name=TStringList

To use the TStringList object, you must define: uses Classes; at the top of your scripts.

Introduction to Scripting

Using the Script Manager

Script Function Reference


Copyright G.D.G. Software 2018. All rights reserved