In dealing with some EDI data, I came across some data that was invalid

In a file we had a large number of COB segments that looked like this:

COB*U*1234567*01*1

There are supposed to be 3 elements in the COB, so I hacked away at it for a while and came up with this command

Find COB^*U^**^*01^*1

With COB*U*00000000000*1

(the ^* means don’t use the expression * to mean all characters, actually look for * in the data, except where it says ^**^* where there is a *, but consume all data until you find the next *)

But I was not satisfied; I wanted the value from COB02 in the result.

To consume data into a ’variable’ you use the following syntax

Find COB^*U^*^(*^)^*01^*1

With COB*U*^1*1

the ^(*^) loads whatever is between ^(^) (in this case *) into a variable, and because it is the first one, the output you specify is ^1

So in theory I could have this syntax

Find COB^*U^*^(*^)^*01^*^(*^)

With COB*U*^1*^2

The resulting output would be

COB*U*1234567*1