I have a text file with lines of text that have a string another string followed by up to 4 integers,
ex:
clear "clear water.png" 5 7
wet "wet water.png" 9 5 33 17
soft "soft rain falling.png"
The only way I see it is:
read until space is found
set string to wet
read until double quote
read until second double quote
set second string to wet water.png
while not end of line
read until space
put string through string stream
push resulting integer into vector of int
Is there a better way to do this?
Thanks
This is the sort of task for which
scanfand company truly shine.You probably want to do that in an
ifstatement so you can test the return value, to tell you how many of those fields converted (e.g., so you know how many integers you read at the end).Edit: perhaps some explanation would be helpful. Let’s dissect that:
%32s reads a string to the first white-space (or 32 characters, whichever comes first).
%*[^\”] ignores input up to the first
".%*c ignores one more byte of input (the quote itself)
%128[^\”] reads the string in the quote (i.e., up to the next quote character).
%*c Ignores the closing quote
%d Reads an int (which we’ve done four times).
The space before each
%dis really unnecessary — it’ll skip whitespace, but without the space,%dwill skip leading whitespace anyway. I’ve included them purely to make it a little more readable.