# Build Component List

This function can be set to take a string and decompose it into a list delimited by the multi value delimiter. It can also operate reversed and take a list delimited by the multi value delimiter and produce a new string using different delimiters.

The source may be a named variable or any field (including track variables). The result can be written to a named variable or a track variable.

Text fields may contain any of the escape sequences described in Escape Sequences. Note when running stepwise escape sequences are evaluated only once based on the first file's field values.

Each source item, named variable or field, may be treated as an enclosing list with a specified delimiter. If the source is specified to be a list and the source delimiter is empty, the default list delimiter (\~) will be used. When the source is a list every list item is individually processed. The results are saved as items in the result as a list with the same delimiter.

# Not Reversed Mode

When not reversed an item is delimited by any of the provided delimiters and recreated as a list of items separated by the multi value delimiter (\m). The same logic as the Advanced List Settings is used with the exception that the supplied delimiters are always used. If the delimiters field resolves to be empty, the non standard delimiters defined in Advanced List Settings will be used.

The delimiters are separated by \n or multi-value separator sequences. Note that the set of delimiters is established after unescaping takes place, so if you wish you can specify the delimiters in a named variable. The set of delimiters is case insensitive. Empty lines are ignored. Spaces are significant before or after leading or trailing non alphanumeric characters. When a delimiter begins or ends with an alphanumeric character, the statement ensures that word matching occurs. A Comma followed by a space is a different delimiter than a comma. Sequences of more than one space character are always treated as a single space. If multiple spaces are found adjacent to each other, they will be ignored. To the right of the delimiters field is a control which allows you to enter the values in a multi line editor.

When applying the functionality, if a source item contains a multi-value delimiter all other delimiters are ignored.

A list of components will be returned in the order they were found. The multi-value delimiter separates the extracted fields. Note that duplicates are not removed. If you want to further manipulate the returned lists and remove duplicates use the Build List statement.

You can also specify an association with a preference list. When associated with a preference list, matched items will not be decomposed. This only works if the entire item is found in the associated list. For example if the associated preference list contains Crosby, Stills, Nash & Young the item will not be decomposed even if the delimiters contain ',' and '&'.

When the associated list field is set to None, no attempt is made to match an item. When the source of the statement is a field, Automatic will use the list associated with the field, if any. When the source of the statement is a named variable, Automatic is equivalent to None.

The associated list field can also be set to Runtime Field. At runtime a named variable named Build Component List Runtime Field should contain the name of a field. (eg. Artist). The list associated with the specified field, if any, will be the associated preference list.

# Reversed Mode

When reversed you must specify a write delimiter which is used to replace sequences of the multi character delimiter. If the write delimiter is found to be empty after unescaping, the statement will not do anything. You can optionally specify a last delimiter. When specified it will be used to delimit the last component as opposed to the write delimiter. With a write delimiter of ', ' and a last delimiter of ' & ', Crosby;;;Stills;;;Nash;;;Young will be replaced with Crosby, Stills, Nash & Young.