On 3/5/23 12:54 PM, Travis Siegel via fpc-pascal wrote:
[...]
This reminded me that I used to do this exact thing under turbo pascal by using blockread/writes, and treating the text file as a binary one. This allowed me to make changes without having to rewrite the whole file, something even inifile still does.

To make a long story short, I tried that technique in FPC, and was a bit surprised by the results.

you don't say in your post which compels me to ask, what mode did you test in?

[...]
blockwrite(f1,st1,6);

The reason it needs the extra byte is because the byte 0 (the one that stores the size of the string) is also written to the file. TP did not behave this way, though I don't know about delphi, though I'd doubt it dit.

It is fixable, one can simply return to the initial write location and write a space character to remove the offending character.

that's not the proper fix, though... especially if you are looking for the number without a leading space... if it is at the beginning of the line, you wouldn't expect a leading space there, either...

but this is also very dependent on the actual type of the file... you said you did this with text files which i understand... they should not have the "housekeeping bits" and since you aren't defining the file as a "file of text", this cannot be automatically handled... instead the file is treated as a binary file and you have to manually handle removing the "housekeeping bits"...

FWIW: i've also done this for text files in a slightly different way... what was done was to create an index into the text file by basically counting all the lines... then if we wanted line 34, we would look up in the index where line 34 starts and then seek there via the binary position of that line's beginning... then we would do whatever editing was needed and push or retract the line as needed... generally, for ease, we made our modifications on a temp file so we still had the original with its matching index and the temp file with its own index... so yeah, if we were changing line 34, we'd copy everything before it to the temp file, then copy 34 with the changes, and move on to the next set of changes to be done...

FWIW2: when the ability to use streams for text files came along, they were much easier to work with and we could concentrate on what needed to be done instead of the intricate details of how to do it... kind of like working with the various serial port forms... you either got up close and personal with each one or you used a general purpose library (aka FOSSIL driver) that knew how to talk to each one and you wrote your code the same for all and let the GP lib handle the actual "how" of talking to them...

--
 NOTE: No off-list assistance is given without prior approval.
       *Please keep mailing list traffic on the list where it belongs!*
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to