示例#1
0
     private static void Main(string[] args)
     {
         if (args.Length == 0)
         {
             args = new[] { GetFile("Analyzer Workspace files|*.wksp2") }
         }
         ;
         Parser.Default.ParseArguments <CmdLineOptions>(args)
         .WithParsed(options =>
         {
             var hff = new HistFileFixer
             {
                 AskOkFn = options.Yes
                                                     ? (AskOk)(message =>
                 {
                     Console.WriteLine($"Asked '{message}', assuming yes (--yes)");
                     return(true);
                 })
                                                     : AskOk,
                 SelectFromMultipleFn = SelectFromMultiple
             };
             HistFileFixer.LoadWorkspace(options.WorkspaceFile, out var rawpath, out var historypath);
             hff.FixupWorkspace(rawpath, historypath, options.DryRun);
         });
     }
 }
        public void Execute()
        {
            var app = AutomationSupport.Application;

            try
            {
                IWorkspace ws       = app.CurrentWorkspace;
                var        datapath = ws.RawFileFolder;
                var        pb       = app.CreateProgressBar("Fixing data files", $"Finding data files in {datapath}...");

                var hff = new HistFileFixer
                {
                    AskOkFn = message => app.AskOKCancel(message) == MessageButton.OK,
                    SelectFromMultipleFn = (key, list) =>
                    {
                        var res = list.First();
                        if (list.Length == 1)
                        {
                            return(res);
                        }
                        return(app.AskYesNo(
                                   $"Found {list.Length} files for {key}:\n{string.Join("\n", list)}\n\nSelecting {res}.\n\nContinue?") ==
                               MessageButton.Yes ? res : null);
                    }
                };
                var matches = hff.MatchHistFiles(datapath, app.HistoryFiles.Select(hf => hf.Name)).ToArray();

                pb.Text = "Fixing data files";
                pb.SetRange(0, app.HistoryFiles.Length);
                pb.Position      = 1;
                pb.CancelEnabled = true;
                foreach (var(hf, basename, header, raw) in app.HistoryFiles.Zip(matches, (hf, match) => (hf, basename: match.histfile, match.header, raw: match.rawfile)))
                {
                    if (pb.UserCanceled)
                    {
                        break;
                    }
                    pb.Text = basename;
                    hf.Open();
                    var needed = !hf[0].DataAvailable;
                    hf.Close();
                    if (needed)
                    {
                        try
                        {
                            if (header == null)
                            {
                                app.Warning("No header found for " + basename);
                            }
                            if (raw == null)
                            {
                                app.Error("No raw file found for " + basename);
                                break;
                            }

                            Console.WriteLine($"{basename} -> {raw}, {header}");
                            if (app.AskYesNo($"Set paths for {hf.Name} to {header} / {raw}") == MessageButton.Yes)
                            {
                                HistFileFixer.SetHistFileDataPaths(hf.FullName, raw, header);
                            }
                        }
                        catch (Exception e)
                        {
                            app.Error(e.ToString());
                        }
                    }
                    pb.Position++;
                    if (pb.UserCanceled)
                    {
                        break;
                    }
                }

                pb.Text = "Done";
                pb.Dispose();
            }
            catch (Exception e)
            {
                app.Error(e.Message);
            }
        }