INFO: Appending from a Delimited ASCII File Using Low-Level I/O

Article translations Article translations
Article ID: 115418 - View products that this article applies to.
This article was previously published under Q115418
This article has been archived. It is offered "as is" and will no longer be updated.
Expand all | Collapse all

SUMMARY

When you are importing data from other applications into FoxPro, a delimited ASCII file is often used. However, if any of the data columns from the original database extend beyond 255 characters, any text beyond this point will be cut off. Text longer than 255 characters should be stored in a FoxPro memo field. However, the APPEND FROM command does not move data into memo fields.

To work around this behavior, you can use the low-level file I/O functions in FoxPro to programmatically move the data from the text file into the database including the memo field. A sample program for doing this is provided below.

MORE INFORMATION

The program below is provided as an example of a FoxPro program that employs low-level file I/O to append data from a delimited text file into character and memo fields. For purposes of this article, the input text file contains three character fields. The third field is to be placed in a memo field and might contain embedded carriage returns.

A sample delimited text file might be constructed as follows:
   "FRED","FLINTSTONE","A movie about Barney and Betty"
   "RENO","RAINES","The Renegade"
				
The following program will add this data to the database:
   *MYMEMO.PRG
   m.numchars=0
   m.end=.F.
   m.bytestoend=0
   IF USED("mymemo")
      SELECT mymemo
   ELSE
      IF FILE("mymemo.dbf")
         USE mymemo IN 0
         SELECT mymemo
      ELSE
         CREATE TABLE mymemo (first C(10), LAST C(15), details m(10))
      ENDIF
   ENDIF
   H=FOPEN("mymemo.txt",10)
   IF ! H<0
      m.totalchars=FSEEK(H,0,2)  && how many characters in file?
      =FSEEK(H,0,0)              && go back to start

      DO WHILE (! EOF(H) ) AND (! m.end)
         m.first=""
         m.last=""
         m.details=""
         FOR m.numfields = 1 TO 3
            DO CASE
               CASE m.numfields=1
                  m.field="m.first"
               CASE m.numfields=2
                  m.field="m.last"
               CASE m.numfields=3
                  m.field="m.details"
            ENDCASE
            m.numquotes=0
            DO WHILE m.numquotes < 2 AND (! m.end)
               in_char=FREAD(H,1)
               DO CASE
                  CASE in_char=["]
                     m.numquotes=m.numquotes+1
                  CASE m.numquotes=1 AND ;
                   (ASC(in_char)=32 OR (ASC(UPPER(in_char))>64 ;
                   AND ASC(UPPER(in_char))<91))
                     STORE EVALUATE(m.field)+m.in_char TO (m.field)
               ENDCASE
               m.numchars=m.numchars+1
               IF m.numchars = m.totalchars   && are we at the end?
                  m.end=.T.                   && set our own EOF marker
               ENDIF
            ENDDO
         ENDFOR
         APPEND BLANK
         GATHER MEMVAR MEMO
      ENDDO
      =FCLOSE(H)
   ENDIF
				
For information about using low-level file commands to export data to a delimited ASCII file, please see the following article in the Microsoft Knowledge Base:
95722 How to Export Memo Fields to an ASCII File

Properties

Article ID: 115418 - Last Review: February 28, 2014 - Revision: 2.2
APPLIES TO
  • Microsoft Visual FoxPro 3.0 Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft FoxPro 2.5b for Macintosh
  • Microsoft Visual FoxPro 2.5c for Macintosh
  • Microsoft FoxPro 2.5b for MS-DOS
  • Microsoft FoxPro 2.5a
  • Microsoft FoxPro 2.5b for MS-DOS
  • Microsoft FoxPro 2.6 for MS-DOS
  • Microsoft FoxPro 2.5b
  • Microsoft FoxPro 2.5a
  • Microsoft FoxPro 2.5b
  • Microsoft FoxPro 2.6 Standard Edition
Keywords: 
kbnosurvey kbarchive kbcode kbinfo KB115418

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com