예제 #1
0
        public string?GetValue(string?fileName, string key, int column)
        {
            if (string.IsNullOrWhiteSpace(fileName) || column < 0)
            {
                return(null);
            }

            if (!_csvFilesCollection.TryGetValue(fileName !.ToUpperInvariant(), out CsvFile? csvFile))
            {
                return(null);
            }
            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            if (!csvFile.Data.TryGetValue(key, out List <string?>?fileLine))
            {
                return(null);
            }
            if (column >= fileLine.Count)
            {
                return(null);
            }
            return(fileLine[column]);
        }
예제 #2
0
        public void SetValues(string?fileName, IEnumerable <string?> values)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return;
            }

            string fileNameUpper = fileName !.ToUpperInvariant();

            if (!fileNameUpper.EndsWith(@".CSV"))
            {
                return;
            }

            if (!_csvFilesCollection.TryGetValue(fileNameUpper, out CsvFile? csvFile))
            {
                csvFile = new CsvFile();
                if (_csvDbDirectoryInfo is not null)
                {
                    csvFile.FileFullName = Path.Combine(_csvDbDirectoryInfo.FullName, fileName);
                }
                csvFile.Data = new CaseInsensitiveDictionary <List <string?> >();
                _csvFilesCollection.Add(fileNameUpper, csvFile);
            }

            var enumerator = values.GetEnumerator();

            if (!enumerator.MoveNext())
            {
                return;
            }
            string key = enumerator.Current ?? @"";

            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            if (!csvFile.Data.TryGetValue(key, out List <string?>?fileLine))
            {
                fileLine = new List <string?> {
                    key
                };
                csvFile.Data.Add(key, fileLine);
            }
            else
            {
                fileLine.Clear();
                fileLine.Add(key);
            }

            while (enumerator.MoveNext())
            {
                fileLine.Add(enumerator.Current);
            }

            csvFile.DataIsChangedByProgram = true;
        }
예제 #3
0
        public void SetValue(string?fileName, string key, int column, string?value)
        {
            if (string.IsNullOrWhiteSpace(fileName) || column < 0)
            {
                return;
            }

            string fileNameUpper = fileName !.ToUpperInvariant();

            if (!fileNameUpper.EndsWith(@".CSV"))
            {
                return;
            }

            if (!_csvFilesCollection.TryGetValue(fileNameUpper, out CsvFile? csvFile))
            {
                csvFile = new CsvFile();
                if (_csvDbDirectoryInfo is not null)
                {
                    csvFile.FileFullName = Path.Combine(_csvDbDirectoryInfo.FullName, fileName);
                }
                csvFile.Data = new CaseInsensitiveDictionary <List <string?> >();
                _csvFilesCollection.Add(fileNameUpper, csvFile);
            }

            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            if (!csvFile.Data.TryGetValue(key, out List <string?>?fileLine))
            {
                fileLine = new List <string?> {
                    key
                };
                csvFile.Data.Add(key, fileLine);
            }

            if (column >= fileLine.Count)
            {
                fileLine.Capacity = column + 1;
                fileLine.AddRange(Enumerable.Repeat <string?>(null, column + 1 - fileLine.Count));
            }

            if (column > 0)
            {
                fileLine[column] = value;
            }

            csvFile.DataIsChangedByProgram = true;
        }
예제 #4
0
        /// <summary>
        ///     List.Count >= 1, List[0] is not null
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public CaseInsensitiveDictionary <List <string?> > GetValues(string?fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return(new CaseInsensitiveDictionary <List <string?> >());
            }

            if (!_csvFilesCollection.TryGetValue(fileName !.ToUpperInvariant(), out CsvFile? csvFile))
            {
                return(new CaseInsensitiveDictionary <List <string?> >());
            }
            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            return(csvFile.Data);
        }
예제 #5
0
        /// <summary>
        ///     Returns new uint key, starting from 1.
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public uint GetNewKey(string?fileName)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return(1);
            }

            if (!_csvFilesCollection.TryGetValue(fileName !.ToUpperInvariant(), out CsvFile? csvFile))
            {
                return(1);
            }
            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            if (csvFile.Data.Count == 0)
            {
                return(1);
            }
            return(csvFile.Data.Keys.Max(k => new Any(k).ValueAsUInt32(false)) + 1);
        }
예제 #6
0
        public bool DeleteValues(string?fileName, string key)
        {
            if (string.IsNullOrWhiteSpace(fileName))
            {
                return(false);
            }

            if (!_csvFilesCollection.TryGetValue(fileName !.ToUpperInvariant(), out CsvFile? csvFile))
            {
                return(false);
            }

            if (csvFile.Data == null)
            {
                csvFile.Data = CsvHelper.LoadCsvFile(csvFile.FileFullName, true, null, UserFriendlyLogger, csvFile.IncludeFileNamesCollection);
            }
            bool removed = csvFile.Data.Remove(key);

            if (removed)
            {
                csvFile.DataIsChangedByProgram = true;
            }
            return(removed);
        }