Forum OpenACS Q&A: Re: proc like ns_getcsv for char delimited files?

Collapse
Posted by Torben Brosten on

This works in the tcl interpreter environment:

proc ec_gets_tab_delimited_line {fileId varName} {
    set delimiter "\t"
    if {[eof $fileId]} {
        set return_val -1
    } else {
        gets $fileId line
        set varName [split $line $delimiter]
        set return_val [llength $varName]
    }
    return $return_val

Now to figure out how to format it for ad_proc so that the delimiter defaults to "\t" but can be changed.

ad_proc ec_gets_char_delimited_line {
    fileId
    varName
    {delimiter "\t"}
} {
    Reads and parses a line of data from a character delimited file 
    similar to ns_getscsv. Defaults to delimit tabs
} {
    if {[eof $fileId]} {
        set return_val -1
    } else {
        gets $fileId line
        set varName [split $line $delimiter]
        set return_val [llength $varName]
    }
    return $return_val
}

Does this appear in "good" form?

Collapse
Posted by Tom Jackson on

You can change your proc to upvar the passed in variable. The 'varName' is the name of the var you want to have the proc set. Here is the body of the proc:

    upvar $varName SplitLine

    if {[eof $fileId]} {
        set return_val -1
        set SplitLine [list]
    } else {
        gets $fileId line
        set SplitLine [split $line $delimiter]
        set return_val [llength $varName]
    }
    return $return_val