Exemple #1
0
        /// <summary>
        /// Removes entries in the main file that are in the secondary
        /// </summary>
        /// <param name="main">The path to the main file.</param>
        /// <param name="secondary">The path to the secondary file.</param>
        /// <param name="target">The path to the target file.</param>
        /// <param name="messageHandler">The message handler.</param>
        /// <returns></returns>
        public async Task Remove(string main, string secondary, string target, IMessageHandler messageHandler)
        {
            await WorkOnTwoFiles(main, secondary, target, messageHandler, "", (main, sec) => {
                var result = new CsvGamesList();

                foreach (var me in main.Games)
                {
                    if (!sec.Games.Any(se => se.Name.Equals(me.Name, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        result.Add(me);
                    }
                }

                return(result);
            });
        }
Exemple #2
0
        /// <summary>
        /// Keeps files that are listed in both files
        /// </summary>
        /// <param name="main">The path to the main file.</param>
        /// <param name="secondary">The path to the secondary file.</param>
        /// <param name="target">The path to the target file.</param>
        /// <param name="messageHandler">The message handler.</param>
        public async Task Keep(string main, string secondary, string target, IMessageHandler messageHandler)
        {
            await WorkOnTwoFiles(main, secondary, target, messageHandler, "Filter entries in a CSV files", (main, sec) => {
                var result = new CsvGamesList();

                foreach (var me in main.Games)
                {
                    // keep entries from the main file that also exist in the secondary
                    if (sec.Games.Any(se => se.Name == me.Name))
                    {
                        result.Add(me);
                    }
                }

                return(result);
            });
        }
Exemple #3
0
        /// <summary>
        /// Merges the specified main and secondary files to the target file.
        /// </summary>
        /// <param name="main">The path to the main file.</param>
        /// <param name="secondary">The path to the secondary file.</param>
        /// <param name="target">The path to the target file.</param>
        /// <param name="messageHandler">The message handler.</param>
        public async Task Merge(string main, string secondary, string target, IMessageHandler messageHandler)
        {
            await WorkOnTwoFiles(main, secondary, target, messageHandler, "Merge two CSV files", (main, sec) => {
                var result = new CsvGamesList(main.Games);

                foreach (var secg in sec.Games)
                {
                    var maing = main.Games.Where(me => me.Name == secg.Name).FirstOrDefault();
                    if (maing == null)
                    {
                        // entry is in secondary but not main file: copy to result
                        result.Add(secg);
                    }
                    else
                    {
                        // entry is already in main: copy additional data
                        result.CopyEntry(secg);
                    }
                }

                return(result);
            });
        }