| **Navigation:**  [[abc library reference.htm|ABC Library Reference]] > ASCIIFileClass >====== ASCIIFileClass Overview {{c6h0009.jpg|C6H0009.jpg}} ====== | [[asciifileclass.htm|{{btn_prev_n.gif|Previous page}}]][[abc library reference.htm|{{btn_home_n.gif|Return to chapter overview}}]][[asciifileclass properties.htm|{{btn_next_n.gif|Next page}}]] | | || The ASCIIFileClass identifies, opens (read-only), indexes, and page-loads a file's contents into a QUEUE. The indexing function speeds any additional access of records and supports page-loading, which in turn allows browsing of very large files. **ASCIIFileClass Relationship to Other Application Builder Classes** There are several related classes whose collective purpose is to provide reusable, read-only, viewing, scrolling, searching, and printing capability for files, including variable length files. Although these classes are primarily designed for ASCII text and they anticipate using the Clarion ASCII Driver to access the files, they also work with binary files and with other database drivers. These classes can be used to build other components and functionality as well. The classes that provide this read-only functionality and their respective roles are: | | ASCIIViewerClass | ASCIIFileClass plus user interface | | | ASCIIFileClass | Open, read, filter, and index the file | | | ASCIIPrintClass | Print one or more lines | | | ASCIISearchClass | Locate and scroll to text | The ASCIIViewerClass is derived from the ASCIIFileClass. See //ASCIIViewerClass //for more information. **ASCIIFileClass ABC Template Implementation** The ASCIIFileClass serves as the foundation to the Viewer procedure template; however, the ABC Templates do not instantiate the ASCIIFileClass independently of the ASCIIViewerClass. The ASCIIViewerClass is derived from the ASCIIFileClass, and the Viewer Procedure Template instantiates the derived ASCIIViewerClass. **ASCIIFileClass Source Files** The ASCIIFileClass source code is installed by default to the Clarion \LIBSRC folder. The ASCIIFileClass source code are contained in: | | ABASCII.INC | ASCIIFileClass declarations | | | ABASCII.CLW | ASCIIFileClass method definitions | **ASCIIFileClass Conceptual Example** The following example shows a sequence of statements to declare, instantiate, initialize, use, and terminate an ASCIIFileClass object and related objects. This example lets the end user select a file, then display it's pathname, total line count, and the text at a given percentage point within the file. ** PROGRAM** ** MAP** ** END** ** INCLUDE('ABASCII.INC')               !declare ASCIIFileClass** **Percentile   BYTE(50)                 !a value between 1 & 100** **GlobalErrors ErrorClass               !declare GlobalErrors object** **AFile        AsciiFileClass,THREAD    !declare AFile object** **FileActive   BYTE(False),THREAD       !AFile initialized flag** **Filename     STRING(255),THREAD       !FileName variable** **AsciiFile FILE,DRIVER('ASCII'),NAME(Filename),PRE(A1),THREAD** **RECORD     RECORD,PRE()** **Line        STRING(255)** **           END** **          END** **window WINDOW('View a text file'),AT(3,7,203,63),SYSTEM,GRAY,DOUBLE** **        PROMPT('Show Line at Percentile'),AT(5,4),USE(?Prompt:Pct)** **        SPIN(@s3),AT(84,3,25,),USE(Percentile),RANGE(1,100)** **        BUTTON('New File'),AT(113,2),USE(?NewFileButton)** **        BUTTON('File Size'),AT(157,2),USE(?FileSizeButton)** **        PROMPT('Line:'),AT(4,26),USE(?Prompt:Line)** **        PROMPT(' '),AT(26,26,172,32),USE(?Line)** **       END** ** CODE** ** GlobalErrors.Init                   !initialize GlobalErrors object** ** OPEN(window)** ** !Initialize AFile with: ** ** FileActive=AFile.Init( AsciiFile, | ! file label,** **             A1:line,  |             ! file field to display** **             Filename,  |            ! variable file NAME attribute** **             GlobalErrors)           ! GlobalErrors object** ** IF FileActive** **  window{PROP:Text}=AFile.GetFileName()** ** ELSE** **  window{PROP:Text}='no file selected'** ** END** ** ACCEPT                                                                                                            ** **  CASE FIELD()** **  OF ?NewFileButton                           !on New File button** **   IF EVENT() = EVENT:Accepted** **    CLEAR(FileName)** **    FileActive=AFile.Reset(FileName)          !reset AFile to a new file** **    IF FileActive** **     window{PROP:Text}=AFile.GetFileName()    !show filename in titlebar** **    ELSE** **     window{PROP:Text}='no file selected'** **    END** **   END** **  OF ?Percentile                              !on Percentile SPIN** **   CASE EVENT()** **   OF EVENT:Accepted OROF EVENT:NewSelection** **    IF FileActive                             !calculate lineno and get the line** **     ?Line{PROP:Text}=AFile.GetLine(Percentile/100*AFile.GetLastLineNo())** **    ELSE** **     ?Line{PROP:Text}='no file selected'** **    END** **   END** **  OF ?FileSizeButton                          !on File Size button** **   IF EVENT() = EVENT:Accepted** **    IF FileActive                             !display total line count** **     ?FileSizeButton{PROP:Text}=AFile.GetLastLineNo()&' Lines'** **    ELSE** **     ?FileSizeButton{PROP:Text}='0 Lines'** **    END** **   END** **  END** ** END** ** IF FileActive THEN AFile.Kill.               !shut down AFile object** ** GlobalErrors.Kill**