コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: GrepEnginePlainText.cs プロジェクト: wfflzt/dnGrep
        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));
            }
        }
コード例 #5
0
ファイル: GrepEnginePlainText.cs プロジェクト: wfflzt/dnGrep
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }