Ejemplo n.º 1
0
        public IEnumerable <CsvDictionary> CsvToDictionaries(
            IEnumerable <char> characters,
            IEqualityComparer <string> keyComparer = null)
        {
            var rows = ReadCsvRows(characters);

            var rowsEnum = rows.GetEnumerator();

            if (!rowsEnum.MoveNext())
            {
                yield break;
            }

            ReadOnlyStrings headerNames;

            if (CsvOptions.UseHeaderRow)
            {
                headerNames = rowsEnum.Current;
                if (!rowsEnum.MoveNext())
                {
                    yield break;
                }
            }
            else
            {
                headerNames = rowsEnum.Current.Select((n, i) => "Field" + (i + 1)).ToList().AsReadOnly();
            }

            var rowIndex = 0;

            do
            {
                var currentValues = rowsEnum.Current;
                var d             = new CsvDictionary(keyComparer);
                if (currentValues.Count != headerNames.Count)
                {
                    throw new IncorrectCsvColumnCountException(rowIndex, currentValues, headerNames);
                }

                for (int i = 0; i < headerNames.Count; i++)
                {
                    d.Add(headerNames[i], currentValues[i]);
                }

                yield return(d);

                rowIndex += 1;
            } while (rowsEnum.MoveNext());
        }
        static void Main(string[] args)
        {
            TestData td0 = new TestData()
            {
                Id          = "1234567890",
                Name        = "DESKTOP-123",
                Age         = 22,
                HappyDay    = DateTime.Now,
                BytesArray  = new byte[] { 0x11, 0x12, 0x13, 0x14 },
                IgnoreData  = 12345,
                StringArray = new List <string>()
            };
            TestData td1 = new TestData()
            {
                Id          = "0987654321",
                Name        = "DESKTOP-456",
                Age         = 23,
                HappyDay    = DateTime.Now,
                BytesArray  = new byte[] { 0x2A, 0x2B, 0x2E, 0x2F },
                IgnoreData  = 12345,
                StringArray = new List <string>()
            };

            td0.StringArray.Add("abc");

            CsvDictionary <String> csvd = new CsvDictionary <String>();

            csvd.IsAutoSave = true;
            csvd.Add(td0);

            if (csvd.IsAutoSave)
            {
                Console.WriteLine("Sleep..");
                int i = 0;
                while (i < 100000)
                {
                    i++;
                    Thread.SpinWait(i);
                }
            }

            td0.StringArray.Add("def");
            td0.StringArray.Add("wxv");

            csvd.Replace(td0);

            if (csvd.IsAutoSave)
            {
                Console.WriteLine("Sleep..");
                int i = 0;
                while (i < 100000)
                {
                    i++;
                    Thread.SpinWait(i);
                }
            }

            csvd.AddOrUpdate(td1);

            if (!csvd.IsAutoSave)
            {
                //csvd.Save();
                //csvd.Load<TestData>();
                /// or
                csvd.FlushAndReload();
            }

            TestData tdItem = null;
            bool     ret    = csvd.TryGetValue <TestData>("1234567890", out tdItem);

            tdItem.StringArray.Add("fgh");
            tdItem.StringArray.Add("zzz");
            tdItem.StringArray.Add("qqq");

            if (csvd.IsAutoSave)
            {
                Console.WriteLine("Sleep..");
                int i = 0;
                while (i < 100000)
                {
                    i++;
                    Thread.SpinWait(i);
                }
            }

            td1.StringArray.Add("end1");
            td1.StringArray.Add("end2");

            csvd.AddOrUpdate(td1);

            if (csvd.IsAutoSave)
            {
                Console.WriteLine("Sleep..");
                int i = 0;
                while (i < 100000)
                {
                    i++;
                    Thread.SpinWait(i);
                }
            }

            Console.WriteLine(
                "End -> return {0}: {1}",
                ret,
                ((tdItem == null) ? "item not found" : tdItem.ToString())
                );

            if (!csvd.IsAutoSave)
            {
                Console.ReadLine();
            }
        }