home *** CD-ROM | disk | FTP | other *** search
- /*
- Listing 24.19 DBF2DIF()
- Author: Joe Booth
- Excerpted from "Clipper 5: A Developer's Guide"
- Copyright (c) 1991 M&T Books
- 501 Galveston Drive
- Redwood City, CA 94063-4728
- (415) 366-3600
- */
-
-
- #define SQ chr(34)
- #define DQ chr(34)+chr(34)
- #define CRLF chr(13)+chr(10)
-
- function dbf2dif(cDbf,cDif)
- LOCAL retval:=0,buffer,ctr:=0,k,mfld
- LOCAL how_many,fh,nbytes
-
- use (cDBF) new ALIAS input
- go top
- fh := Fcreate(Cdif,0)
- if fh > -1
- buffer :='TABLE'+CRLF+'0,1'+CRLF+SQ+cDBF+SQ+CRLF +;
- 'VECTORS'+CRLF+'0,'+str(fcount(),2)+CRLF+DQ+CRLF+;
- 'TUPLES'+CRLF+'0,'+str(lastrec(),6)+CRLF+DQ+CRLF+;
- 'DATA'+CRLF+'0,0'+CRLF+DQ+CRLF
- nbytes := Fwrite(fh,buffer,len(buffer)) // DIF header
- if nbytes <> len(buffer)
- retval :=ferror()
- fclose(fh)
- return retval
- endif
- how_many := fcount()
- while !eof()
- ctr++
- buffer := '-1,0'+CRLF+'BOT'+CRLF
- for k = 1 to how_many
- mfld :=Fieldget(k)
- buffer := buffer + difput(mfld)
- next
- Fwrite(fh,buffer)
- skip +1
- enddo
- fwrite(fh,'-1,0'+CRLF+'EOD'+CRLF,11)
- retval := ferror()
- fclose(fh)
- else
- retval := Ferror()
- endif
- return retval
-
-
-
- function difput(fld_data)
- LOCAL fld_type := valtype(fld_data),retval:=""
- if fld_type = "C"
- retval := '1,0'+CRLF+SQ+trim(fld_data)+SQ+CRLF
- elseif fld_type = "L"
- retval := '0,'+if(fld_data,'1','0')+CRLF+;
- SQ+if(fld_data,'TRUE','FALSE')+SQ+CRLF
- elseif fld_type = "N"
- retval := '0,'+ltrim(trim(str(fld_data)))+CRLF+SQ+'V'+SQ+CRLF
- elseif type("fld_data")="D"
- retval := '1,0'+CRLF+SQ+dtoc(fld_data)+SQ+CRLF
- endif
- return retval
-
- // end of file CHP2419.PRG
-