Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
GOTCHA or know problem???
Message
From
11/09/1997 19:31:01
 
General information
Forum:
Visual FoxPro
Category:
Other
Miscellaneous
Thread ID:
00049550
Message ID:
00049716
Views:
62
What FoxPro version do you use?

This is from the VFP5.0 help file:
"If you omit nBytes, FGETS( ) returns a maximum of 254 bytes by default."
where nBytes is the second param for FGETS().

Vlad

>Today I found interesting thing. I had to work with text files, that
>have to be importd into the tables. Before they can be imported, a
>couple operations have to be done.These files are downloaded from
>mainframe.
>First one was "joining" two lines into one so it suits the structure of
>the table. ( limitation of our ES 9000 is 254 bytes and some )
>The second one of them was removing of "control line" (it says how many
>records the file contains, so after append it can be checked and
>verified) at the bottom of text file, so it is not appended to the
>table. In fact I didn't want to append 65-100K records, delete the last
>one and pack it, I chose creating a new text file without the last line.
>
>What I did was that I opened the text file using the low-level functions
>for reading and created new temporary file. Then I just read the first
>one through and write down in the new one, until I get tho that "control
>line".(I found, that trying to fseek to the desired position in file and
>writing it at once failed.).
>a sample code:
>
>m.tempfile = 'c:\temp\tempor.txt'
>if file (m.tempfile)
> dele file (m.tempfile)
>endif
>handle1 = fopen ( m.sourcefile, 0 )
>handle2 = fcreate ( m.tempfile, 0 )
>if handle1 < 0 or handle2 < 0
> wait wind 'Error creating the file'
> = fclose ( handle1 )
> = fclose ( handle2 )
> return .f.
>else
> m.go_on = .t.
> do while m.go_on
> m.lineoftext = fgets (handle1)
> if left ( m.lineoftext, 11 ) = '##########:'
> m.go_on = .f.
> else
> = fputs (handle2, m.lineoftext)
> endif
> enddo
>endif
>= fclose ( handle1 )
>= fclose ( handle2 )
>
>So, it looks good. And it's supposed to work. BUT it doesn't. After two
>hours searching why I found out what was problem. Here's the correctly
>working code.
>
>m.tempfile = 'c:\temp\tempor.txt'
>if file (m.tempfile)
> dele file (m.tempfile)
>endif
>handle1 = fopen ( m.sourcefile, 0 )
>handle2 = fcreate ( m.tempfile, 0 )
>if handle1 < 0 or handle2 < 0
> wait wind 'Error creating the file'
> = fclose ( handle1 )
> = fclose ( handle2 )
> return .f.
>else
> m.go_on = .t.
> do while m.go_on
> m.lineoftext = fgets (handle1,512)
> if left ( m.lineoftext, 11 ) = '##########:'
> m.go_on = .f.
> else
> = fputs (handle2, m.lineoftext)
> endif
> enddo
>endif
>= fclose ( handle1 )
>= fclose ( handle2 )
>
>As help says, fgets command should read sequence of bytes until it
>encounters CRLF, it doesn't and stops at 254-byte and divides one line
>into two!!!! It known or not.
>Comments, appreciated.
> Dezider
>--
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform