On Mon, Oct 19, 2009 at 01:48:42AM -0400, Brad Mettee wrote:
> Gary Kline wrote:
> >Guys,
> >
> >maybe this can't be done reading in a file with fgets(buffer[128], fp),
> >then calling skiptags(), conditionally, to while () past ',' and '>'.
> >
> >I know I need to calll skipTags with its address, skipTags(&buffer);, but 
> >then how to i
> >handle the variable "s" in skipTags?  Anybody?
> >
> >
> >
> >
> >// redo, skip TAGS
> >skipTags((char *)&s)
> >{
> >        if (*s == '<')
> >        {
> >                while (*s != '>')
> >                {
> >                        s++;
> >                }
> >                s++;
> >        }
> >}
> >  
> Your function may not work exactly as you think it will. Your basic idea 
> runs on the assumption that the tag will never be broken during the file 
> read. It's possible that you'll read "some data<Tag begin" and the next 
> read will have ">more data here<tag ends>", or some variation thereof. 
> If you know for a fact that the string you read in will always be 
> complete, then what's below should work fine:
> 
> // where *s is the address of a string to be parsed
> // maxlen represents the maximum number of chars potentially in the string 
> and is not zero based (ie: maxlen 256 = char positions 0-255)
> // *curpos is the current position of the pointer (this prevents bounds 
> errors)
> skipTags(char *s, long maxlen, long *curpos)
> {
>        if (*s == '<')
>        {
>                while (*s != '>' && && *s && *curpos < maxlen)
>                {
>                        s++;
>                       (*curpos)++;
>                }
>               if (*curpos < maxlen)
>               {
>                       s++;
>                       (*curpos)++;
>               }
>        }
> }
> 
> When you read in the next line of the file, reset curpos to zero, set 
> maxlen to number of bytes read. As you process each char after the 
> function is called, you'll need to increment curpos as well.
> 
> Depending on the size of the files you are reading, you may be able to 
> read the entire file into memory at once and avoid any possible TAG 
> splitting.
> 
> If you explain exactly what you're trying to accomplish, we may be able 
> to come up with an easier/cleaner solution.
> 
> (warning: none of the above code is tested, but in concept it should 
> work ok)
> 

        It didn't core dump, but neither work.  Basically, I'm doing a read via 
fgets:

        "while(fgets(buf, sizeof buf, fp_in)) {"

        an HTML or other file with <TAGS>.  Optionally, say, given the switch 
-N,
        the program would NOT progress any of the HTML tags; It would only 
touch other
        stuff in the file.  Simply put, I have a fixed buffer, buf[1024], that 
I want to
        change --i think by-reference-----not certain-----by calling 

        skiptags(*&buf); and skiptags() would read past the <WHATEVER="7" 
FOO="6" BAR="Times">
        and return the buffer to the place after fgets() where skiptags(&buf) 
is called
        missing all markup <TAGS>.

        I'm better at by-refernce with ints that chars, so I don't know how far 
off I am
        here.  That's why I;'m asking you guys.

        gary



-- 
 Gary Kline  kl...@thought.org  http://www.thought.org  Public Service Unix
        http://jottings.thought.org   http://transfinite.thought.org
    The 7.31a release of Jottings: http://jottings.thought.org/index.php

_______________________________________________
freebsd-questions@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-questions
To unsubscribe, send any mail to "freebsd-questions-unsubscr...@freebsd.org"

Reply via email to