Avatar of P-Daddy
P-Daddy
 asked on

Access Expression to parse a delimited string

I have an Access table containing a pipe-delimited string in a single field. The string looks something like this...

Fieldname = fullText
value1|other value2|some other value3|yet another value4|and a final value5|

I need help writing an Access Expression which will take the string above and break it into separate fields like this...

Field       Value
value1    value1
value2    other value2
value3    some other value3
value4    yet another value4
value5    and a final value5

Can you help me with this? (I'm more familiar with expressions than VB but will accept a VB approach if you can walk me through how to implement.)
Microsoft ApplicationsMicrosoft OfficeMicrosoft Access

Avatar of undefined
Last Comment
Gustav Brock

8/22/2022 - Mon
Jeffrey Coachman

Will the string always have the same amount of delimiters?

What about "Blanks"?: SomeText||SomeMoreText
Is this string field in the same table that "target" fields are in?
P-Daddy

ASKER
Answers:
1) Yes, the string will always have the same number of delimiters
2) Yes, there may be blanks between delimiters, like ||
3) Yes, the string field is in the same table as the target fields but could be separated if necessary.
IrogSinta

So in your example are you saying you would end up with a table having 5 columns with each delimited string in each field?  If so, couldn't you just import the delimited file straight in to the table?
I started with Experts Exchange in 2004 and it's been a mainstay of my professional computing life since. It helped me launch a career as a programmer / Oracle data analyst
William Peck
Jeffrey Coachman

<2) Yes, there may be blanks between delimiters, like ||>
So then what do you want to happen in this case...?

I think IrogSinta has your solution here.
P-Daddy

ASKER
I wish I could, but the string is quite long and the whole string is actually not available for me to import. It is stored broken up into 12 132 character fields in its original table. What I've done so far is to concatenate all this so at least I have the full string in one field. Now I need your help in parsing the string at each pipe. Easy to do in Excel, I'm just not familiar with how to write this expression in Access. Thanks in advance!
P-Daddy

ASKER
To answer the other comment above if there's a blank between pipe separators I would expect a null value to be written in that field. Does that make sense?
Get an unlimited membership to EE for less than $4 a week.
Unlimited question asking, solutions, articles and more.
IrogSinta

Assuming you already have a table you want to store these 5 fields into you could use code similar to this:
Private Sub ParseAString()
    Dim rst As Recordset
    Dim strToParse As String
    Dim arrParsed
    
    strToParse = DLookup("[FieldName]","TableName")  'this is the table that holds your string.
    arrParsed = Split(strToParse, "|")
    
    Set rst = CurrentDb.OpenRecordset("NameOfTable")  'this is the table to store the 5 fields.
    rst.AddNew
    For i = 0 To 4
        rst(i).Value = arrParsed(i)
    Next
    rst.Update
    rst.Close
    Set rst = Nothing
End Sub

Open in new window

Did your table have more than one record to parse?
ASKER CERTIFIED SOLUTION
Gustav Brock

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
P-Daddy

ASKER
I awarded this as the solution of choice because it was the most elegant solution of the two with the least amount of code and I could perform both concatenate and parse steps in the same query. However, I said I was a novice and your solution left me having to do additional research on how to create functions and call them from my query and I had to find out how to replace the [FullText] to get this to work. I know that's just my being a newbie, but you could have easily added some additional help to your solution.

Nevertheless, I could not have gotten past this without you. Thank you!
Gustav Brock

You are welcome!
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck