Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!

Alteryx Designer Desktop Discussions

Find answers, ask questions, and share expertise about Alteryx Designer Desktop and Intelligence Suite.
SOLVED

Get word before nth instance of pipe in pipe-delimited file

MECC
5 - Atom

Hi All,

 

I need help in trying to give structure to an unstructured data set. So I had a bunch of excel files with unknown numbers of tabs that needed to be consolidated. Each tab had a table which exists randomly in the sheet. 

 

I was able to consolidate all of them and removed all the unnecessary rows and now I'm left with the rows that contain all the data that I need. (I consolidated all columns into one and separated them using the "|" character)

 

I'm currently stuck on how I'm going to do it in Alteryx such that all the headers are aligned. I already have a column that identifies the index of the header which the rows at the bottom should follow but I don't know how I'm going to parse it dynamically? RegEx would be best for this but I don't know if it's possible to specify an "instance" or "Index" variable in it.

 

I'm also looking at the specialized formula - GetVal(index, v0, v1), but can't figure out how to make it work.

 

My data is similar to below, where the "Text to Parse" column is my reference. Index is the number of "|"s before the word "Available" which the row below should also use in finding the word to parse

 

Text to Parse   Index Parsed Word  
Nov 12, 2019|Available|Almost Gone|Out of Stock|Spoiled|1Available
|Grape|Lemon|Boysenberry Large Variety|Satsuma|1Grape
A|Nov 12, 2019|Available|Almost Gone|Out of Stock|Spoiled|2Available
||Jujube|Watermelon|Blueberry|Date Extra Sweet|2Jujube
|A|Fruity Madness|Nov 12, 2019|Available|Almost Gone|Out of Stock|Spoiled|4Available
|A||Honeydew|Nectarine|Guava|Grapefruit|4HoneyDew

 

 

I'm using Alteryx Version 2019.3.5.17947

 

Thank you!

 

Mariel

 

6 REPLIES 6
TomWelgemoed
12 - Quasar

Hi,

 

This might not be the most efficient way to do it, but I actually don't know how to use the GetVal() formula myself!

 

I hope the attached does what you want - this was done quite quickly - adding screenshot below. By the way, the last row doesn't match because the index of 4 should actually be Nectarine (considering how all the other rows were done).

 

Hope this helps.

 

Best,

Tom

 

Text to rows.jpg

 

 

MECC
5 - Atom

Thank you sososo much Tom! It's very smart!!

TomWelgemoed
12 - Quasar

Glad I could help!

ChrisTX
15 - Aurora

Another option is to use the Tile tool to assign the "index" to each section of the Text to Parse

 

Capture.PNG

 

Chris

Claje
14 - Magnetar

Hi,

 

I know there are working solutions out there, but I wanted to include one more:

You can solve this with a regular expression.

 

Here's a function (add a new field using a formula) that will take in Text To Parse and an index and return the appropriate string.

 

REGEX_Replace([Text to Parse], '(?:[^\|]*\|){'+TOSTRING([   Index])+'}([^\|]*).*', '$1')

 

The '$1' returns the marked group, which is all non-pipe characters after the first N pipes - where N is defined by indexes.  So it basically replaces everything else in the string with the parsed value.

 

Hopefully this helps!  It should run a little faster than a text to columns approach. 

MECC
5 - Atom

I'm amazed! Works perfect Claje. Thank you!!

Labels