示例#1
0
        // -------------------------------------------------------------------------------------------
        /// <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());
        }
示例#2
0
        // -------------------------------------------------------------------------------------------
        /// <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());
        }