I'd prefer to split the file normally, with simple delimiter '|'.
After it's done we can manipulate the resulting data set to shuffle the items into proper slots, defined by the given key words.
Here is my quick and nasty attempt on code:
DECLARE @FileString nvarchar(8000)
SET @FileString= '|System| |Sean Colley|06/02/2015 05:28:55 PM|New entry created.|User|NTCLSC04|Sean C|06/02/2015 05:41:25 PM|recd atty rep letter from Char Rosaa Jr with Rosaxx, Xmnnnd & XXXmilia 999-999-5572 999-998-4870 fax misc details unknown.|System| |Tiffany H|06/03/2015 07:21:13 AM| status change.|User|COCLTH03|Tiffany H|06/03/2015 07:34:48 AM|attempted contact with any office. 999-998-5572 place was closed.|User|COCLTH03|Tiffany H|07/01/2015 07:41:22 AM|attempted contact with any office. |System| |Chrystal R|10/21/2015 03:52:40 PM|Reassigned by Chrystal from Tiffany to John .|User|COCLJD02|John D|12/05/2015 04:47:40 PM|Police were called on 8/14/13 -sent papers to Supe for approval|User|COCLJD02|John D|01/03/2016 10:22:58 PM|EOR returned to from post officer |User|COCLJD02|John D|01/03/2016 10:40:04 PM| - including recorded statement: attempts made Confirmed date Recommendation: |Supervisor| |Gale D|01/04/2016 09:34:55 AM|Agree to proceed with the process.|User|COCLJD02|John D|01/05/2016 11:37:29 PM|EOR has been reissued to returned to sender|User|COCLJD02|John D|01/05/2016 11:40:57 PM|Sent notice of explanation |System| |John Difranco|01/05/2016 11:41:57 PM|Closed.'
ROW_NUMBER() OVER(PARTITION BY T.RowNo ORDER BY D1.ItemNumber) ItemNoInRow,
select ROW_NUMBER() OVER(ORDER BY D.ItemNumber) RowNo, *
, LEAD(D.ItemNumber, 1,1) OVER(ORDER BY D.ItemNumber) - 1 EndItemNumber
from [dbo].[DelimitedSplit8K_LEAD] (@FileString, '|') D
INNER JOIN (select N'Supervisor' UNION
select N'Contact' UNION
select N'Manager' UNION
select N'Note' UNION
select N'User' UNION
select N'System') V (CodeWord) ON D.Item = V.CodeWord
INNER JOIN [dbo].[DelimitedSplit8K_LEAD] (@FileString, '|') D1
ON D1.ItemNumber >= T.ItemNumber AND D1.ItemNumber < ISNULL(NULLIF(T.EndItemNumber , 0), 8000)
If I would not be so lazy, I might have created a temp table for the splitting result, to avoid double call of the function.