parsing strings strtok() and delimiters

Alright, I'm trying to read in an input file that has 6 parts:

Media type, number, genre, title, artist, composer
cd,1,New Age,Glassworks,Philip Glass,Philip Glass

The problem is that sometimes the title, artist, and composer have commas inside
the name.  In this case the data line looks like:
cd,78,Classic,\Capriccio Italien,+++\,Eduardo Mata/Dallas,Tchaikovsky

so the comma cannot be used as a delimiter... How can I put an "if" statement on the
delimiter to say "if a backslash is read in, then the next delimiter will be a backslash"
"else, the next delimiter will be a comma."  

I can do this without using strtok(token, delimiter), but with the strtok I have no idea.
Please help.  Thanks!
bjw5d6Asked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
SicosConnect With a Mentor Commented:

Hi,

Here's a procedure written by me that reformats the line, it replaces the "," and ",\" and "\," with a "#"
After that you can easily use the split command to split the string.

e.g.

ReformatLine("cd,78,Classic,\Capriccio Italien,+++\,\Capriccio Italien,+++\,Eduardo Mata/Dallas,Tchaikovsky") gives

cd#78#Classic#Capriccio Italien#+++#Capriccio Italien,+++#Eduardo Mata/Dallas#Tchaikovs

Now you can use the Split command to split the string in parts

Function ReformatLine(lsLine As String) As String

    Dim lsTemp, lsOutput As String
    Dim liI, liBegin, liEnd As Integer
   
   
    While (lsLine <> "")
   
        liBegin = InStr(1, lsLine, ",\")
       
        If (liBegin > 0) Then
           
            lsOutput = lsOutput & Mid(lsLine, 1, liBegin - 1)
            lsOutput = Replace(lsOutput, ",", "#")
           
            liEnd = InStr(liBegin + 2, lsLine, "\") + 1
            lsTemp = Mid(lsLine, liBegin, liEnd - liBegin)
            lsTemp = Replace(lsTemp, ",\", "#")
            lsTemp = Replace(lsTemp, "\", "")
           
            lsOutput = lsOutput & lsTemp
            lsLine = Mid(lsLine, liEnd, Len(lsLine) - liEnd)
       
        Else
            lsLine = Replace(lsLine, ",", "#")
            ReformatLine = lsOutput & lsLine
            lsLine = ""
       
        End If
   
    Wend

End Function

Greetings,
Sicos
0
 
jhshuklaCommented:
>> Here's a procedure written by me that reformats the line, it replaces the "," and ",\" and "\," with a "#"
what if '#' is a part of the original string. i suggest using '\' instead of '#'
0
 
Bob LambersonSoftware EngineerCommented:
Using a pipe symbol "|"is usually safer than either "\" or "#", since you hardly ever find one in a string.

Bob
0
 
jhshuklaCommented:
how about a nonprintable character - '\xFF'?
0
 
bjw5d6Author Commented:
This is a good answer from Sicos, except what I meant was that  the
\Capriccio Italien,+++\ was all supposed to be part of one token, so not
split up like #Capriccio Italien#+++#... I just read the file in a longer way... but
the answer was very much appreciated and is good knowledge to know:)  Thanks
0
All Courses

From novice to tech pro — start learning today.