Esempio n. 1
0
        /// <summary>
        /// Scan forward in string for any of the pattern strings.
        /// </summary>
        /// <param name="InString"></param>
        /// <param name="InBx"></param>
        /// <param name="InLx"></param>
        /// <param name="InPattern"></param>
        /// <returns></returns>
        public static ScanPatternResults ScanEqualAnyStrings(
            string InString, int InBx, int InLx,
            string[] InPattern)
        {
            // build array of pattern leading characters.
            char[] patChars = Arrayer.StringArrayToLeadingCharArray(InPattern);

            ScanPatternResults spr = ScanEqualAnyStrings(
                InString, InBx, InLx, InPattern, patChars);

            return(spr);
        }
Esempio n. 2
0
        /// <summary>
        /// Scan for any of the pattern strings in the search string.
        /// </summary>
        /// <param name="InString"></param>
        /// <param name="InBx"></param>
        /// <param name="InLx"></param>
        /// <param name="InPattern"></param>
        /// <returns></returns>
        public static ScanStringResults ScanEqualAnyxStrings(
            string InString, int InBx, int InLx,
            string[] InPattern)
        {
            string foundPat = null;
            int    fx       = -1;
            int    lx       = InLx;
            int    ix       = InBx;
            int    Ex       = InBx + InLx - 1;

            // build array of pattern leading characters.
            char[] patChars = Arrayer.StringArrayToLeadingCharArray(InPattern);

            while (foundPat == null)
            {
                lx = Ex - ix + 1;
                fx = InString.IndexOfAny(patChars, ix, lx);
                if (fx == -1)
                {
                    break;
                }

                // length remaining in search string. from found location to end.
                int remLx = Ex - fx + 1;

                char ch1 = InString[fx];
                int  mx  = 0;
                while (true)
                {
                    int nx = Array.IndexOf(patChars, ch1, mx);
                    if (nx == -1)
                    {
                        break;
                    }

                    // test if the substring starting at the char found position matches the full
                    // pattern of the found char.
                    string pat = InPattern[nx];
                    if ((pat.Length <= remLx) && (InString.Substring(fx, pat.Length) == pat))
                    {
                        break;
                    }

                    // full pattern does not match. Setup in patChars array to search for the next
                    // pattern search string with the found leading char.
                    mx = nx + 1;
                }


                foreach (string s1 in InPattern)
                {
                    if ((s1.Length <= remLx) &&
                        (InString.Substring(fx, s1.Length) == s1))
                    {
                        foundPat = s1;
                        break;
                    }
                }
            }

            return(new ScanStringResults(foundPat, fx));
        }