• Advertisement
Sign in to follow this  

nice reading simple model file with stdio

This topic is 1505 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

this is a basic question but
i am curious for some nice answer

i need to read my own simple format
file which in general is containing
words interleaved with floats

something 1 2 3
other 2 3
else 8 9 99 9 1 2

i want to load in by using only c
standard library functions

when i need read only floats I can
use fscanf "%f" in loop this is
very easy and nicely skips whitespaces
also is able to say when there is an
end of data - how is easy way
of doing the above?

Share this post


Link to post
Share on other sites
Advertisement

If you always have a string followed by a varying number of floats, you could use vscanf. If you have floats and strings intertwined then you should read one line at a time (or the whole file if it's small to improve performance) and then perform a parsing of the memory buffer you've read the file and split it into tokens (separated by whitespaces). Then you can try to convert them to floats and see which ones are floats and which ones are not.

Share this post


Link to post
Share on other sites

If you always have a string followed by a varying number of floats, you could use vscanf. If you have floats and strings intertwined then you should read one line at a time (or the whole file if it's small to improve performance) and then perform a parsing of the memory buffer you've read the file and split it into tokens (separated by whitespaces). Then you can try to convert them to floats and see which ones are floats and which ones are not.

using

 

 fscanf("%s", buf);

 

and then checking if buf[0] is digit ( or +/- ) would be quite goode

xcept that when word in input file would be larger than buffer it 

would be an unavoidable program crash - this is hell

 

isnt there in c lib a safe function what would be reading 

the strings contained between the whitespaces?

Share this post


Link to post
Share on other sites

Sorry for the late answer. Why don't you get file size first, allocate a big enough buffer to contain the file, read all file at once as binary data, then using strtok split the file into tokens based on white spaces and end of line characters and then process each token as you get it and use it based on the reading state. You can use something like a state machine to know what to do with the current token.

Share this post


Link to post
Share on other sites

Sorry for the late answer. Why don't you get file size first, allocate a big enough buffer to contain the file, read all file at once as binary data, then using strtok split the file into tokens based on white spaces and end of line characters and then process each token as you get it and use it based on the reading state. You can use something like a state machine to know what to do with the current token.

 

I found that i can use scanf "%20s" this will read the word

but if more then 20 letters will split on amaller chunks - this

could be used

 

But tell me - this is a think I didnt ever know: is it posible

to check quickty filesize without reading it in c-lib and winapi? I never knew that..//lay

Share this post


Link to post
Share on other sites

On a side note, you don't need to insert so many line-breaks in your posts.  Just type normally with line-breaks between paragraphs and the forum software will sort out wrapping your text to the proper width of the screen for you.

 

It's much harder

to read what

you've typed when

it's broken into

short lines

 

rather than being properly line-wrapped as you get from regular typing without inserting extra line-breaks. smile.png

Share this post


Link to post
Share on other sites

On a side note, you don't need to insert so many line-breaks in your posts.  Just type normally with line-breaks between paragraphs and the forum software will sort out wrapping your text to the proper width of the screen for you.

 

It's much harder

to read what

you've typed when

it's broken into

short lines

 

rather than being properly line-wrapped as you get from regular typing without inserting extra line-breaks. smile.png

I know :) but this is somewhat counter intuitive for me,

I also make big amount of typos and got weak english

When i see the unbreaked text in this edit window it is

psychical pain for me. I like this forum that no people attacks

me fot typos and such chaotic form, so IMo the best would be to allow that :) I will be tring to improve maybe in some extent

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement