/// <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); }
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)); } }
/// <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); } }