public bool Replace(Stream readStream, Stream writeStream, string searchPattern, string replacePattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding, IEnumerable <GrepMatch> replaceItems) { SearchDelegates.DoReplace replaceMethod = DoTextReplace; switch (searchType) { case SearchType.PlainText: replaceMethod = DoTextReplace; break; case SearchType.Regex: replaceMethod = DoRegexReplace; break; case SearchType.XPath: replaceMethod = DoXPathReplace; break; case SearchType.Soundex: replaceMethod = DoFuzzyReplace; break; } if (searchOptions.HasFlag(GrepSearchOption.Multiline) || searchType == SearchType.XPath) { return(ReplaceMultiline(readStream, writeStream, searchPattern, replacePattern, searchOptions, replaceMethod, encoding, replaceItems)); } else { return(Replace(readStream, writeStream, searchPattern, replacePattern, searchOptions, replaceMethod, encoding, replaceItems)); } }
private bool ReplaceMultiline(Stream inputStream, Stream outputStream, string searchPattern, string replacePattern, GrepSearchOption searchOptions, SearchDelegates.DoReplace replaceMethod, Encoding encoding, IEnumerable <GrepMatch> replaceItems) { using (StreamReader readStream = new StreamReader(inputStream, encoding)) { StreamWriter writeStream = new StreamWriter(outputStream, encoding); string fileBody = readStream.ReadToEnd(); fileBody = replaceMethod(-1, 0, fileBody, searchPattern, replacePattern, searchOptions, replaceItems); writeStream.Write(fileBody); writeStream.Flush(); } return(true); }
private bool Replace(Stream inputStream, Stream outputStream, string searchPattern, string replacePattern, GrepSearchOption searchOptions, SearchDelegates.DoReplace replaceMethod, Encoding encoding, IEnumerable <GrepMatch> replaceItems) { using (StreamReader readStream = new StreamReader(inputStream, encoding)) { bool hasUtf8bom = encoding == Encoding.UTF8 && Utils.HasUtf8ByteOrderMark(inputStream); var outputEncoding = encoding; if (hasUtf8bom) { outputEncoding = new UTF8Encoding(true); } StreamWriter writeStream = new StreamWriter(outputStream, outputEncoding); string line = null; int lineNumber = 1; int filePosition = 0; // read with eol character(s); using (EolReader eolReader = new EolReader(readStream)) { while (!eolReader.EndOfStream) { line = eolReader.ReadLine(); if (lineNumber == 1 && hasUtf8bom) { line = line.Replace("\ufeff", ""); // remove BOM } int lineLength = line.Length; line = replaceMethod(lineNumber, filePosition, line, searchPattern, replacePattern, searchOptions, replaceItems); writeStream.Write(line); // keep original eol lineNumber++; filePosition += lineLength; } } writeStream.Flush(); } return(true); }
public bool Replace(Stream readStream, Stream writeStream, string searchPattern, string replacePattern, SearchType searchType, GrepSearchOption searchOptions, Encoding encoding) { SearchDelegates.DoReplace replaceMethod = doTextReplaceCaseSensitive; switch (searchType) { case SearchType.PlainText: if ((searchOptions & GrepSearchOption.CaseSensitive) == GrepSearchOption.CaseSensitive) { replaceMethod = doTextReplaceCaseSensitive; } else { replaceMethod = doTextReplaceCaseInsensitive; } break; case SearchType.Regex: replaceMethod = doRegexReplace; break; case SearchType.XPath: replaceMethod = doXPathReplace; break; case SearchType.Soundex: replaceMethod = doFuzzyReplace; break; } if ((searchOptions & GrepSearchOption.Multiline) == GrepSearchOption.Multiline) { return(replaceMultiline(readStream, writeStream, searchPattern, replacePattern, searchOptions, replaceMethod, encoding)); } else { return(replace(readStream, writeStream, searchPattern, replacePattern, searchOptions, replaceMethod, encoding)); } }
private bool replace(Stream inputStream, Stream outputStream, string searchPattern, string replacePattern, GrepSearchOption searchOptions, SearchDelegates.DoReplace replaceMethod, Encoding encoding) { using (StreamReader readStream = new StreamReader(inputStream, encoding)) { StreamWriter writeStream = new StreamWriter(outputStream, encoding); string line = null; int counter = 1; while ((line = readStream.ReadLine()) != null) { line = replaceMethod(line, searchPattern, replacePattern, searchOptions); writeStream.WriteLine(line); counter++; } writeStream.Flush(); } return(true); }
private bool replace(Stream inputStream, Stream outputStream, string searchPattern, string replacePattern, GrepSearchOption searchOptions, SearchDelegates.DoReplace replaceMethod, Encoding encoding) { using (StreamReader readStream = new StreamReader(inputStream, encoding)) { StreamWriter writeStream = new StreamWriter(outputStream, encoding); string line = null; int counter = 1; // use first line to determine eol character(s); line = readStream.ReadLine(true); if (line != null) { if (line.EndsWith("\r\n")) { writeStream.NewLine = "\r\n"; line = line.Substring(0, line.Length - 2); } else if (line.EndsWith("\n")) { writeStream.NewLine = "\n"; line = line.Substring(0, line.Length - 1); } else if (line.EndsWith("\r")) { writeStream.NewLine = "\r"; line = line.Substring(0, line.Length - 1); } line = replaceMethod(line, searchPattern, replacePattern, searchOptions); writeStream.WriteLine(line); counter++; } while ((line = readStream.ReadLine()) != null) { line = replaceMethod(line, searchPattern, replacePattern, searchOptions); writeStream.WriteLine(line); counter++; } writeStream.Flush(); } return(true); }
private bool replace(Stream inputStream, Stream outputStream, string searchPattern, string replacePattern, GrepSearchOption searchOptions, SearchDelegates.DoReplace replaceMethod, Encoding encoding) { using (StreamReader readStream = new StreamReader(inputStream, encoding)) { StreamWriter writeStream = new StreamWriter(outputStream, encoding); string line = null; int counter = 1; // use first line to determine eol character(s); using (EolReader eolReader = new EolReader(readStream)) { line = eolReader.ReadLine(); if (line != null) { if (line.EndsWith("\r\n")) { writeStream.NewLine = "\r\n"; } else if (line.EndsWith("\n")) { writeStream.NewLine = "\n"; } else if (line.EndsWith("\r")) { writeStream.NewLine = "\r"; } } } readStream.BaseStream.Seek(0, SeekOrigin.Begin); while (!readStream.EndOfStream) { line = readStream.ReadLine(); line = replaceMethod(line, searchPattern, replacePattern, searchOptions); writeStream.WriteLine(line); counter++; } writeStream.Flush(); } return(true); }