/// <summary>
        /// Записывает содержимое документа в файл
        /// </summary>
        /// <param name="path">Путь файла</param>
        /// <param name="encoding">Кодировка файла</param>
        /// <param name="lineSeparator">Разделитель строк. По умолчанию - ВК+ПС</param>
        public void Записать(string path, string encoding = null, string lineSeparator = null)
        {
            using (var writer = GetDefaultWriter(path, encoding))
            {
                if (lineSeparator == null)
                {
                    lineSeparator = "\r\n";
                }
                else if (lineSeparator != "\n" && lineSeparator != "\r" && lineSeparator != "\r\n")
                {
                    throw RuntimeException.InvalidArgumentValue();
                }

                foreach (var line in _lines)
                {
                    writer.Write(line);
                    writer.Write(lineSeparator);
                }
            }

            ИспользуемоеИмяФайла = Path.GetFullPath(path);
        }
Esempio n. 2
0
        private static string ExtractExecutableName(string cmdLine, out int argsPosition)
        {
            bool inQuotes = false;
            int  startIdx = 0;
            int  i;

            for (i = 0; i < cmdLine.Length; i++)
            {
                var symb = cmdLine[i];

                if (symb == '\"')
                {
                    if (inQuotes)
                    {
                        argsPosition = i + 1;
                        return(cmdLine.Substring(startIdx, i - startIdx));
                    }

                    inQuotes = true;
                    startIdx = i + 1;
                }
                else if (symb == ' ' && !inQuotes)
                {
                    argsPosition = i + 1;
                    return(cmdLine.Substring(startIdx, i - startIdx));
                }
            }

            if (inQuotes)
            {
                throw RuntimeException.InvalidArgumentValue();
            }

            argsPosition = i + 1;
            return(cmdLine.Substring(startIdx, i - startIdx));
        }
        /// <summary>
        /// Заменяет содержимое строки по номеру
        /// </summary>
        /// <param name="number">Номер заменяемой строки</param>
        /// <param name="newLine">Новое значение строки</param>
        public void ЗаменитьСтроку(int number, string newLine)
        {
            if (number > _lines.Count)
            {
                return;
            }

            if (number < 1)
            {
                throw RuntimeException.InvalidArgumentValue();
            }

            var newLines = ParseInputString(newLine);

            if (newLines.Count == 1)
            {
                _lines[number - 1] = newLines[0];
            }
            else
            {
                _lines[number - 1] = newLines[0];
                _lines.InsertRange(number, newLines.Skip(1));
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Находит вхождение искомой строки как подстроки в исходной строке
        /// </summary>
        /// <param name="haystack">Строка, в которой ищем</param>
        /// <param name="needle">Строка, которую надо найти</param>
        /// <param name="direction">значение перечисления НаправлениеПоиска (с конца/с начала)</param>
        /// <param name="startPos">Начальная позиция, с которой начинать поиск</param>
        /// <param name="occurance">Указывает номер вхождения искомой подстроки в исходной строке</param>
        /// <returns>Позицию искомой строки в исходной строке. Возвращает 0, если подстрока не найдена.</returns>
        public static int Найти(string haystack, string needle, НаправлениеПоиска direction = НаправлениеПоиска.СНачала, int startPos = 0, int occurance = 0)
        {
            int len = haystack.Length;

            if (len == 0 || needle.Length == 0)
            {
                return(0);
            }

            bool fromBegin = direction == НаправлениеПоиска.СНачала;

            if (startPos == 0)
            {
                startPos = fromBegin ? 1 : len;
            }

            if (startPos < 1 || startPos > len)
            {
                throw RuntimeException.InvalidArgumentValue();
            }

            if (occurance == 0)
            {
                occurance = 1;
            }

            int startIndex = startPos - 1;
            int foundTimes = 0;
            int index      = len + 1;

            if (fromBegin)
            {
                while (foundTimes < occurance && index >= 0)
                {
                    index = haystack.IndexOf(needle, startIndex, StringComparison.Ordinal);
                    if (index >= 0)
                    {
                        startIndex = index + 1;
                        foundTimes++;
                    }
                    if (startIndex >= len)
                    {
                        break;
                    }
                }
            }
            else
            {
                while (foundTimes < occurance && index >= 0)
                {
                    index = haystack.LastIndexOf(needle, startIndex, StringComparison.Ordinal);
                    if (index >= 0)
                    {
                        startIndex = index - 1;
                        foundTimes++;
                    }
                    if (startIndex < 0)
                    {
                        break;
                    }
                }
            }

            if (foundTimes == occurance)
            {
                return(index + 1);
            }
            else
            {
                return(0);
            }
        }