// ------------------------------------------------------------------------------------------- /// <summary> /// Returns array of string segments divided by a separator and, /// optionally, omitting empty segments. /// PENDING: Optimize with IndexOfAny for searching with the first character. /// </summary> public static string[] Segment(this string Text, string Separator, bool OmitEmptySegments = false) { if (Text.Length == 0 || Separator.Length == 0) { return(new string[0]); } int SeparatorLength = Separator.Length; int InitialPosition = 0, FinalPosition = 0; SimpleList <string> List = new SimpleList <string>(); string Fragment = ""; while ((FinalPosition = Text.IndexOf(Separator, InitialPosition)) >= 0) { Fragment = Text.Substring(InitialPosition, (FinalPosition - InitialPosition)); if (!OmitEmptySegments || Fragment.Length > 0) { List.Add(Fragment); } InitialPosition = FinalPosition + SeparatorLength; } Fragment = Text.Substring(InitialPosition); if (!OmitEmptySegments || Fragment.Length > 0) { List.Add(Fragment); } return(List.GetArray()); }
// ------------------------------------------------------------------------------------------- /// <summary> /// Returns an array of bytes segments divided by a separator. /// </summary> public static byte[][] Segment(this byte[] TargetBlock, byte[] Separator) { if (TargetBlock.Length == 0 || Separator.Length == 0) { return(new byte[0][]); } int SeparatorLength = Separator.Length; int InitialPosition = 0, FinalPosition = 0; SimpleList <byte[]> SegmentsList = new SimpleList <byte[]>(); while ((FinalPosition = Search(TargetBlock, Separator, InitialPosition)) >= 0) { SegmentsList.Add(ExtractSegment(TargetBlock, InitialPosition, (FinalPosition - InitialPosition))); InitialPosition = FinalPosition + SeparatorLength; } SegmentsList.Add(ExtractSegment(TargetBlock, InitialPosition)); return(SegmentsList.GetArray()); }