示例#1
0
        public void Replace(string searchText, string replaceText, bool srRegEx,
                            bool srFileContext, bool srFileName, bool srFolderName, bool srCaseSensitive, bool srReMultiline)
        {
            SearchAndReplace SR = new SearchAndReplace(srRegEx, srFileContext, srFileName,
                                                       srFolderName, srCaseSensitive, srReMultiline);

            List <ResultInfo> resultInfos = new List <ResultInfo>();

            foreach (string filePath in _FilesList1)
            {
                ResultInfo resultInfo = new ResultInfo(filePath);
                SR.Replace(filePath, searchText, replaceText, resultInfo);
                resultInfos.Add(resultInfo);
            }
        }
        static void Main(string[] args)
        {
            var Configuration = (new ConfigurationBuilder()
                                 .SetBasePath(Directory.GetCurrentDirectory())
                                 .AddJsonFile("settings.json")).Build();

            var  mapfile                     = Configuration["mapfile"];
            var  mapItemDelimiter            = Configuration["mapItemDelimiter"];
            var  mapItemCommentDelimitter    = Configuration["mapItemCommentDelimitter"];
            var  inputDirectory              = Configuration["inputDirectory"];
            var  outputDirectory             = Configuration["outputDirectory"];
            bool replaceWholeWord            = bool.Parse(Configuration["options:replaceWholeWord"]);
            bool caseSensitive               = bool.Parse(Configuration["options:caseSensitive"]);
            bool processLongerLengthFirst    = bool.Parse(Configuration["options:processLongerLengthFirst"]);
            bool autoCreateOutputDirectories = bool.Parse(Configuration["options:autoCreateOutputDirectories"]);
            var  inputSearchPattern          = Configuration["options:inputSearchPattern"];

            Console.WriteLine($"mapfile: {mapfile}");
            Console.WriteLine($"mapItemDelimiter: {mapItemDelimiter}");
            Console.WriteLine($"mapItemCommentDelimitter: {mapItemCommentDelimitter}");
            Console.WriteLine($"inputDirectory: {inputDirectory}");
            Console.WriteLine($"outputDirectory: {outputDirectory}");
            Console.WriteLine($"processLongerLengthFirst: {processLongerLengthFirst}");
            Console.WriteLine($"autoCreateOutputDirectories: {autoCreateOutputDirectories}");
            Console.WriteLine($"inputSearchPattern: {inputSearchPattern}");

            if (!File.Exists(mapfile) ||
                !Directory.Exists(inputDirectory) ||
                !Directory.Exists(outputDirectory))
            {
                Console.WriteLine("Error: one of the input parameters is invalid. Please check settings.json");
            }

            var options = new Options
            {
                ReplaceWholeWord = replaceWholeWord,
                CaseSensitive    = caseSensitive
            };

            var inputRootDirectoryFullPath = inputDirectory;

            if (!Path.IsPathRooted(inputDirectory))
            {
                inputRootDirectoryFullPath = Path.GetFullPath(Directory.GetCurrentDirectory() + "\\" + inputDirectory);
            }

            var outputRootDirectoryFullPath = outputDirectory;

            if (!Path.IsPathRooted(outputDirectory))
            {
                outputRootDirectoryFullPath = Path.GetFullPath(Directory.GetCurrentDirectory() + "\\" + outputDirectory);
            }

            var workUnits = CreateWorkUnits(
                inputRootDirectoryFullPath,
                outputRootDirectoryFullPath,
                inputSearchPattern);

            var replacements = File.ReadLines(Path.Combine(Directory.GetCurrentDirectory(), mapfile)).Select(line =>
                                                                                                             ReplacementParser.Parse(line, mapItemDelimiter, mapItemCommentDelimitter)).Where(_ => _ != null).ToList();

            if (processLongerLengthFirst)
            {
                // This causes search & replace "For Example" before "For", if these two search strings are in the map.
                replacements = replacements.OrderByDescending(_ => _.SourceString.Length).ToList();
            }

            foreach (var workUnit in FileAccessUtility.ReadXliffFiles(workUnits))
            {
                if (SearchAndReplace.Process(replacements, workUnit.Xliff.file[0], options))
                {
                    FileAccessUtility.WriteXliffFile(workUnit, autoCreateOutputDirectories);
                }
            }

            Console.WriteLine("\nDone");
        }