public void ReplacePropertyAtTest3()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";
            const string prop2Name = "Prop2";
            const string prop3Name = "Prop3";


            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            var prop2 =
                new CsvProperty(prop2Name, new string[] { "Hallo2" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            var prop3 =
                new CsvProperty(prop3Name, new string[] { "Hallo3" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            wrapper.AddProperty(prop1);
            wrapper.AddProperty(prop2);

            wrapper.ReplacePropertyAt(4711, prop3);
        }
        public void ReplacePropertyTest1()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";
            const string prop2Name = "Prop2";
            const string prop3Name = "Prop3";


            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            var prop2 =
                new CsvProperty(prop2Name, new string[] { "Hallo2" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            var prop3 =
                new CsvProperty(prop3Name, new string[] { "Hallo3" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            wrapper.AddProperty(prop1);
            wrapper.AddProperty(prop2);

            Assert.AreEqual(2, wrapper.Count);
            Assert.AreEqual(prop1Name, wrapper.PropertyNames[0]);
            Assert.AreEqual(prop2Name, wrapper.PropertyNames[1]);

            wrapper.ReplaceProperty(prop1Name, prop3);

            Assert.AreEqual(2, wrapper.Count);
            Assert.AreEqual(prop3Name, wrapper.PropertyNames[0]);
            Assert.AreEqual(prop2Name, wrapper.PropertyNames[1]);
        }
        public void ReplacePropertyTest2b()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";

            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));

            wrapper.ReplaceProperty("bla", prop1);
        }
        public void InsertPropertyTest4()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";


            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));


            wrapper.InsertProperty(4711, prop1);
        }
Exemplo n.º 5
0
        public AccessBenchmark()
        {
            _csv = Properties.Resources.Test1;
            ICsvTypeConverter conv = CsvConverterFactory.CreateConverter(CsvTypeCode.String);

            _indexWrapper = new CsvRecordWrapper();
            _indexWrapper.AddProperty(new CsvIndexProperty("Column0", 0, conv));
            _indexWrapper.AddProperty(new CsvIndexProperty("Column1", 1, conv));
            _indexWrapper.AddProperty(new CsvIndexProperty("Column2", 2, conv));

            _nameWrapper = new CsvRecordWrapper();
            _nameWrapper.AddProperty(new CsvProperty("Column0", new string[] { "Column0" }, conv));
            _nameWrapper.AddProperty(new CsvProperty("Column1", new string[] { "Column1" }, conv));
            _nameWrapper.AddProperty(new CsvProperty("Column2", new string[] { "Column2" }, conv));
        }
        public void TryGetMemberTest()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";

            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.Int32, true));

            wrapper.AddProperty(prop1);

            dynamic dyn = wrapper;

            _ = dyn.Prop1;
        }
        public void InsertPropertyTest2()
        {
            var wrapper = new CsvRecordWrapper();

            const string prop1Name = "Prop1";


            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.String, true));


            wrapper.InsertProperty(0, prop1);
            Assert.AreEqual(1, wrapper.Count);
            Assert.AreEqual(prop1Name, wrapper.PropertyNames[0]);
        }
        public void DynPropTest(int wildcardTimeout)
        {
            var rec = new CsvRecord(new string[] { "Hallo1", "Blabla" }, false, false, true, false);

            var wrapper = new CsvRecordWrapper
            {
                Record = rec
            };

            const string prop1Name = "Prop1";
            const string prop2Name = "Prop2";


            var prop1 =
                new CsvProperty(prop1Name, new string[] { "Hallo1" },
                                Converters.CsvConverterFactory.CreateConverter(Converters.CsvTypeCode.Int32, true));

            wrapper.AddProperty(prop1);

            var prop2 =
                new CsvProperty(prop2Name, new string[] { "Blub", null !, "Bla*" },
Exemplo n.º 9
0
    private static CsvRecordWrapper InitCsvRecordWrapper()
    {
        var wrapper = new CsvRecordWrapper();

        // Store the stringConverter because you can reuse the same
        // converter for more than one property in CsvRecordWrapper.
        ICsvTypeConverter stringConverter =
            CsvConverterFactory.CreateConverter(CsvTypeCode.String, maybeDBNull: true);

        wrapper.AddProperty
        (
            new CsvProperty(PUPILS_NAME,
                            new string[] { PUPILS_NAME },
                            stringConverter)
        );
        wrapper.AddProperty
        (
            new CsvProperty(SUBJECT,
                            new string[] { SUBJECT },
                            stringConverter)
        );
        wrapper.AddProperty
        (
            new CsvProperty(LESSON_DAY,
                            new string[] { LESSON_DAY },
                            CsvConverterFactory
                            .CreateEnumConverter <DayOfWeek>("G", maybeDBNull: true))
        );
        wrapper.AddProperty
        (
            new CsvProperty(LESSON_BEGIN,
                            new string[] { LESSON_BEGIN },
                            CsvConverterFactory
                            .CreateConverter(CsvTypeCode.TimeSpan, maybeDBNull: true))
        );

        return(wrapper);
    }
Exemplo n.º 10
0
    protected override void FillCsvRecordNonStandardProp(Contact contact, ContactProp prop, CsvRecordWrapper wrapper, int index)
    {
        switch ((AdditionalProp)prop)
        {
        case AdditionalProp.Phone1Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 0);
            break;

        case AdditionalProp.Phone1Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 0);
            break;

        case AdditionalProp.Phone2Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 1);
            break;

        case AdditionalProp.Phone2Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 1);
            break;

        case AdditionalProp.Phone3Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 2);
            break;

        case AdditionalProp.Phone3Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 2);
            break;

        case AdditionalProp.Phone4Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 3);
            break;

        case AdditionalProp.Phone4Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 3);
            break;

        case AdditionalProp.Phone5Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 4);
            break;

        case AdditionalProp.Phone5Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 4);
            break;

        case AdditionalProp.Phone6Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 5);
            break;

        case AdditionalProp.Phone6Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 5);
            break;

        case AdditionalProp.Phone7Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 6);
            break;

        case AdditionalProp.Phone7Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 6);
            break;

        case AdditionalProp.Phone8Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 7);
            break;

        case AdditionalProp.Phone8Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 7);
            break;

        case AdditionalProp.Phone9Type:
            wrapper[index] = GetTelephoneTypeFromPhone(contact.PhoneNumbers, 8);
            break;

        case AdditionalProp.Phone9Value:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers, 8);
            break;

        case AdditionalProp.AddressHomeType:
            wrapper[index] = contact.AddressHome is null ? null : PropertyClassType.Home;
            break;

        case AdditionalProp.AddressWorkType:
            wrapper[index] = contact.Work?.AddressWork is null ? null : PropertyClassType.Work;
            break;

        case AdditionalProp.RelationType:
            if (contact.Person?.Spouse != null)
            {
                wrapper[index] = RelationType.Spouse;
            }
            break;

        case AdditionalProp.WebHomeType:
            wrapper[index] = PropertyClassType.Home;
            break;

        case AdditionalProp.WebWorkType:
            wrapper[index] = PropertyClassType.Work;
            break;

        case AdditionalProp.EventType:
        {
            DateTime?anniversary = contact.Person?.Anniversary;

            if (anniversary.HasValue)
            {
                wrapper[index] = EventType.Anniversary;
            }
        }
        break;

        case AdditionalProp.InstantMessenger1Type:
            wrapper[index] = contact.InstantMessengerHandles?.FirstOrDefault() ?? PropertyClassType.Other;
            break;

        case AdditionalProp.InstantMessenger1Service:
            wrapper[index] = GetIMService(contact.InstantMessengerHandles?.FirstOrDefault());
            break;

        case AdditionalProp.InstantMessenger2Type:
            wrapper[index] = contact.InstantMessengerHandles?.ElementAtOrDefault(1) is null ? null : PropertyClassType.Other;
            break;

        case AdditionalProp.InstantMessenger2Service:
            wrapper[index] = GetIMService(contact.InstantMessengerHandles?.ElementAtOrDefault(1));
            break;

        case AdditionalProp.Swap:
            // Dummy-Property ohne eigene Daten. Dient dazu AM ENDE der Initialsierung von CSVRecordWrapper
            // AddressWork AddressHome zuzuweisen, wenn AddressHome null war. (Google unterscheidet nur zwischen
            // Address 1 und Address 2 und weist diesen den Typ [Home | Work] explizit zu.)
            // Das gleiche gilt für HomePagePersonal und HomePageWork

            if (contact.AddressHome is null)
            {
                var adrWorkType = wrapper[nameof(ColumnName.AddressWorkType)];

                if (adrWorkType != null)
                {
                    wrapper[nameof(ColumnName.AddressHomeType)] = adrWorkType;
                    wrapper[nameof(ColumnName.AddressWorkType)] = null;

                    wrapper[nameof(ColumnName.AddressHomeStreet)] = wrapper[nameof(ColumnName.AddressWorkStreet)];
                    wrapper[nameof(ColumnName.AddressWorkStreet)] = null;

                    wrapper[nameof(ColumnName.AddressHomeCity)] = wrapper[nameof(ColumnName.AddressWorkCity)];
                    wrapper[nameof(ColumnName.AddressWorkCity)] = null;

                    wrapper[nameof(ColumnName.AddressHomePostalCode)] = wrapper[nameof(ColumnName.AddressWorkPostalCode)];
                    wrapper[nameof(ColumnName.AddressWorkPostalCode)] = null;

                    wrapper[nameof(ColumnName.AddressHomeState)] = wrapper[nameof(ColumnName.AddressWorkState)];
                    wrapper[nameof(ColumnName.AddressWorkState)] = null;

                    wrapper[nameof(ColumnName.AddressHomeCountry)] = wrapper[nameof(ColumnName.AddressWorkCountry)];
                    wrapper[nameof(ColumnName.AddressWorkCountry)] = null;
                }
            }

            if (contact.WebPagePersonal is null)
            {
                var webWorkType = wrapper[nameof(ColumnName.WebWorkType)];

                if (webWorkType != null)
                {
                    wrapper[nameof(ColumnName.WebHomeType)] = webWorkType;
                    wrapper[nameof(ColumnName.WebWorkType)] = null;

                    wrapper[nameof(ColumnName.WebHomeValue)] = wrapper[nameof(ColumnName.WebWorkValue)];
                    wrapper[nameof(ColumnName.WebWorkValue)] = null;
                }
            }
            break;

        default:
            break;
        }
    }
Exemplo n.º 11
0
    protected override void InitCsvRecordWrapperUndefinedValues(Tuple <string, ContactProp?, IList <string> > tpl, CsvRecordWrapper wrapper)
    {
        Debug.Assert(tpl.Item2.HasValue);

        wrapper.AddProperty(
            new CsvProperty(
                tpl.Item1,
                tpl.Item3,
                this.StringConverter));
    }
Exemplo n.º 12
0
    public static void TestDeserializingClassesFromCsv()
    {
        const string csvFileName = "Objects.csv";

        // Create a nonstandard CSV-File
        File.WriteAllText(csvFileName, new StringBuilder()
                          .AppendLine(
                              "Unterrichtstag;Unterrichtsbeginn;Vollständiger Name;Unterrichtsfach;")
                          .AppendLine(
                              "Wednesday;14:30;Susi Meyer;Piano")
                          .AppendLine(
                              "Thursday;15:15;Carl Czerny;Piano;")
                          .AppendLine(
                              ";;Frederic Chopin")
                          .ToString());

        // Initialize a CsvRecordWrapper which retrieves the data from
        // the CSV-Columns and converts it to the right data type.
        // Aliases with wildcards can be used to match the column-headers
        // of the CSV file.
        var wrapper = new CsvRecordWrapper();

        // Reuse a converter for more than one property:
        ICsvTypeConverter stringConverter =
            CsvConverterFactory.CreateConverter(CsvTypeCode.String, nullable: true);

        wrapper.AddProperty
        (
            new CsvProperty("Name",
                            new string[] { "*name" },
                            stringConverter)
        );
        wrapper.AddProperty
        (
            new CsvProperty("Subject",
                            new string[] { "*subject", "*fach" },
                            stringConverter)
        );
        wrapper.AddProperty
        (
            new CsvProperty("LessonDay",
                            new string[] { "*day", "*tag" },
                            CsvConverterFactory
                            .CreateEnumConverter <DayOfWeek>(nullable: true))
        );
        wrapper.AddProperty
        (
            new CsvProperty("LessonBegin",
                            new string[] { "*begin?" },
                            CsvConverterFactory
                            .CreateConverter(CsvTypeCode.TimeSpan, nullable: true))
        );

        // Analyze the CSV file to determine the right parameters
        // for proper reading:
        var analyzer = new CsvAnalyzer();

        analyzer.Analyze(csvFileName);

        // Read the CSV file:
        using var reader =
                  new CsvReader(csvFileName,
                                analyzer.HasHeaderRow,
                                analyzer.Options,
                                analyzer.FieldSeparator);

        var pupilsList = new List <Pupil>();

        foreach (CsvRecord record in reader.Read())
        {
            wrapper.Record = record;

            // Using a dynamic variable enables you to assign
            // the properties without having to explicitely cast them
            // to the target data type:
            dynamic dynWrapper = wrapper;

            pupilsList.Add(new Pupil
            {
                Name        = dynWrapper.Name,
                LessonBegin = dynWrapper.LessonBegin,
                LessonDay   = dynWrapper.LessonDay,
                Subject     = dynWrapper.Subject
            });
        }

        // Write the results to Console:
        foreach (Pupil pupil in pupilsList)
        {
            Console.WriteLine(pupil);
            Console.WriteLine();
        }
    }
Exemplo n.º 13
0
    protected override void InitContactNonStandardProp(Contact contact, ContactProp prop, CsvRecordWrapper wrapper, int index)
    {
        Debug.Assert(wrapper[index] != null);

        switch ((AdditionalProp)prop)
        {
        case AdditionalProp.Phone1Type:
        {
            var newNumber = new PhoneNumber();
            AddPhoneNumber(contact, newNumber);
            SetTelephoneType(newNumber, (string?)wrapper[index]);
        }
        break;

        case AdditionalProp.Phone2Type:
        case AdditionalProp.Phone3Type:
        case AdditionalProp.Phone4Type:
        case AdditionalProp.Phone5Type:
        case AdditionalProp.Phone6Type:
        case AdditionalProp.Phone7Type:
        case AdditionalProp.Phone8Type:
        case AdditionalProp.Phone9Type:
        {
            if (contact.PhoneNumbers is null)
            {
                contact.PhoneNumbers = new PhoneNumber();
            }

            PhoneNumber lastNumber = contact.PhoneNumbers.Last() !;


            if (lastNumber.IsEmpty)
            {
                SetTelephoneType(lastNumber, (string?)wrapper[index]);
            }
            else
            {
                var newNumber = new PhoneNumber();
                AddPhoneNumber(contact, newNumber);
                SetTelephoneType(newNumber, (string?)wrapper[index]);
            }
        }
        break;

        case AdditionalProp.Phone1Value:
        case AdditionalProp.Phone2Value:
        case AdditionalProp.Phone3Value:
        case AdditionalProp.Phone4Value:
        case AdditionalProp.Phone5Value:
        case AdditionalProp.Phone6Value:
        case AdditionalProp.Phone7Value:
        case AdditionalProp.Phone8Value:
        case AdditionalProp.Phone9Value:
        {
            if (contact.PhoneNumbers is null)
            {
                contact.PhoneNumbers = new PhoneNumber();
            }

            PhoneNumber lastNumber = contact.PhoneNumbers.Last() !;

            lastNumber.Value = (string?)wrapper[index];
        }
        break;

        //case AdditionalProp.AddressHomeType:
        //    break;
        //case AdditionalProp.AddressWorkType:
        //    break;
        //case AdditionalProp.InstantMessenger1Type:
        //    break;
        //case AdditionalProp.InstantMessenger1Service:
        //    break;
        //case AdditionalProp.InstantMessenger2Type:
        //    break;
        //case AdditionalProp.InstantMessenger2Service:
        //    break;
        //case AdditionalProp.RelationType:
        //    break;
        //case AdditionalProp.WebHomeType:
        //    break;
        //case AdditionalProp.WebWorkType:
        //    break;
        //case AdditionalProp.EventType:
        //    break;
        case AdditionalProp.Swap:     // diverse Aufräumarbeiten
        {
            // Swap Addresses:
            Address?addrHome = contact.AddressHome;
            Address?addrWork = contact.Work?.AddressWork;

#if NET40
            if (((string?)wrapper[nameof(ColumnName.AddressHomeType)])?.ToUpperInvariant().Contains(PropertyClassType.WorkUpperCase) ?? false)
#else
            if (((string?)wrapper[nameof(ColumnName.AddressHomeType)])?.Contains(PropertyClassType.Work, StringComparison.OrdinalIgnoreCase) ?? false)
#endif
            {
                Work?work = contact.Work ?? new Work();
                contact.Work = work;


                work.AddressWork    = addrHome;
                contact.AddressHome = null;

#if NET40
                if (!((string?)wrapper[nameof(ColumnName.AddressWorkType)])?.ToUpperInvariant().Contains(PropertyClassType.WorkUpperCase) ?? true)
#else
                if (!((string?)wrapper[nameof(ColumnName.AddressWorkType)])?.Contains(PropertyClassType.Work, StringComparison.OrdinalIgnoreCase) ?? true)
#endif
                {
                    contact.AddressHome = addrWork;
                }
            }

            Person?person = contact.Person;

            if (person != null)
            {
                // check RelationType
#if NET40
                if (!((string?)wrapper[nameof(ColumnName.RelationType)])?.ToUpperInvariant().Contains(RelationType.SpouseUpperCase) ?? true)
#else
                if (!((string?)wrapper[nameof(ColumnName.RelationType)])?.Contains(RelationType.Spouse, StringComparison.OrdinalIgnoreCase) ?? true)
#endif
                {
                    person.Spouse = null;
                }

                // check Anniversary
#if NET40
                if (!((string?)wrapper[nameof(ColumnName.EventType)])?.ToUpperInvariant().Contains(EventType.AnniversaryUpperCase) ?? true)
#else
                if (!((string?)wrapper[nameof(ColumnName.EventType)])?.Contains(EventType.Anniversary, StringComparison.OrdinalIgnoreCase) ?? true)
#endif
                {
                    Debug.Assert(contact.Person != null);
                    contact.Person.Anniversary = null;
                }
            }


            // swap Homepages

            var homePagePersonal = contact.WebPagePersonal;
            var homePageWork     = contact.WebPageWork;

#if NET40
            if (((string?)wrapper[nameof(ColumnName.WebHomeType)])?.ToUpperInvariant().Contains(PropertyClassType.WorkUpperCase) ?? false)
#else
            if (((string?)wrapper[nameof(ColumnName.WebHomeType)])?.Contains(PropertyClassType.Work, StringComparison.OrdinalIgnoreCase) ?? false)
#endif
            {
                contact.WebPageWork     = homePagePersonal;
                contact.WebPagePersonal = null;

#if NET40
                if (!((string?)wrapper[nameof(ColumnName.WebWorkType)])?.ToUpperInvariant().Contains(PropertyClassType.WorkUpperCase) ?? true)
#else
                if (!((string?)wrapper[nameof(ColumnName.WebWorkType)])?.Contains(PropertyClassType.Work, StringComparison.OrdinalIgnoreCase) ?? true)
#endif
                {
                    contact.WebPagePersonal = homePageWork;
                }
            }


            // Split CombinedValues

            var emails = (List <string>?)contact.EmailAddresses;

            if (emails != null)
            {
                for (int i = emails.Count - 1; i >= 0; i--)
                {
                    var currentEmail = emails[i];

                    if (!ContainsGoogleSeparator(currentEmail))
                    {
                        continue;
                    }

                    var arr = SplitAtGoogleSeparator(currentEmail);

                    if (arr.Length > 1)
                    {
                        emails.RemoveAt(i);

                        int j = 0;
                        while (j < arr.Length)
                        {
                            emails.Insert(i + j, arr[j]);
                            j++;
                        }
                    }
                }
            }

            var ims = (List <string>?)contact.InstantMessengerHandles;

            if (ims != null)
            {
                for (int i = ims.Count - 1; i >= 0; i--)
                {
                    var currentIms = ims[i];

                    if (!ContainsGoogleSeparator(currentIms))
                    {
                        continue;
                    }

                    var arr = SplitAtGoogleSeparator(currentIms);

                    if (arr.Length > 1)
                    {
                        ims.RemoveAt(i);

                        int j = 0;
                        while (j < arr.Length)
                        {
                            ims.Insert(i + j, arr[j]);
                            j++;
                        }
                    }
                }
            }

            IEnumerable <PhoneNumber?>?contactPhones = contact.PhoneNumbers;
            if (contactPhones != null && contactPhones.Any(x => x !.Value != null && ContainsGoogleSeparator(x.Value)))
            {
                List <PhoneNumber> phones;

                if (contactPhones is PhoneNumber pn)
                {
                    phones = new List <PhoneNumber>()
                    {
                        pn
                    };
                    contact.PhoneNumbers = phones;
                }
                else
                {
                    Debug.Assert(contactPhones is List <PhoneNumber>);
                    phones = (List <PhoneNumber>)contactPhones;
                }

                for (int i = phones.Count - 1; i >= 0; i--)
                {
                    PhoneNumber phone = phones[i];

                    string?phoneNumber = phone.Value;

                    if (phoneNumber != null && ContainsGoogleSeparator(phoneNumber))
                    {
                        string[] arr = SplitAtGoogleSeparator(phoneNumber);

                        if (arr.Length > 1)
                        {
                            phones.RemoveAt(i);

                            int j = 0;

                            while (j < arr.Length)
                            {
                                phone       = j == 0 ? phone : (PhoneNumber)phone.Clone();
                                phone.Value = arr[j];

                                phones.Insert(i + j, phone);
                                j++;
                            }
                        }
                    }
                }
            }
        }
        break;

        default:
            break;
        }
    }
Exemplo n.º 14
0
    protected override void InitCsvRecordWrapperUndefinedValues(Tuple <string, ContactProp?, IList <string> > tpl, CsvRecordWrapper wrapper)
    {
        Debug.Assert(tpl.Item2.HasValue);


        if (tpl.Item2 == (ContactProp)AdditionalProp.Swap)
        {
            wrapper.AddProperty(
                new CsvProperty(
                    tpl.Item1,
                    tpl.Item3,
                    CsvConverterFactory.CreateConverter(CsvTypeCode.String, false)));
        }
        else
        {
            wrapper.AddProperty(
                new CsvProperty(
                    tpl.Item1,
                    tpl.Item3,
                    this.StringConverter));
        }
    }
Exemplo n.º 15
0
    protected override void InitContactNonStandardProp(Contact contact, ContactProp prop, CsvRecordWrapper wrapper, int index)
    {
        Debug.Assert(wrapper[index] != null);

        switch ((AdditionalProp)prop)
        {
        case AdditionalProp.BusinessStreet2:
        case AdditionalProp.BusinessStreet3:
        {
            contact.Work ??= new Work();
            Address?adrWork = contact.Work.AddressWork;
            adrWork ??= new Address();
            contact.Work.AddressWork = adrWork;

            adrWork.Street += $" {(string?)wrapper[index]}";
        }
        break;

        case AdditionalProp.HomeStreet2:
        case AdditionalProp.HomeStreet3:
        {
            Address?adrHome = contact.AddressHome ?? new Address();
            contact.AddressHome = adrHome;

            adrHome.Street += $" {(string?)wrapper[index]}";
        }
        break;

        case AdditionalProp.AssistantsPhone:
        case AdditionalProp.BusinessPhone2:
        case AdditionalProp.CompanyMainPhone:
        {
            AddPhoneNumber(contact, new PhoneNumber((string?)wrapper[index], true));
        }
        break;

        case AdditionalProp.HomePhone2:
        case AdditionalProp.ISDN:
        case AdditionalProp.RadioPhone:
        case AdditionalProp.TTY_TDD_Phone:
        {
            AddPhoneNumber(contact, new PhoneNumber((string?)wrapper[index]));
        }
        break;

        case AdditionalProp.OtherFax:
        {
            AddPhoneNumber(contact, new PhoneNumber((string?)wrapper[index], isFax: true));
        }
        break;

        default:
            break;
        }
    }
Exemplo n.º 16
0
    public static void TestCsvToDataTable()
    {
        using DataTable dataTable = InitDataTable();

        CsvRecordWrapper wrapper = InitCsvRecordWrapper();

        // Write the CSV file:
        // (We can sort the columns of the CSV file differently than those
        // of the DataTable - CsvRecordWrapper will reorder that.)
        string[] columns =
            new string[] { SUBJECT, LESSON_BEGIN, PUPILS_NAME, LESSON_DAY };

        using (var writer = new CsvWriter(FILE_NAME, columns))
        {
            // (CsvWriter reuses the same record.)
            wrapper.Record = writer.Record;

            foreach (DataRow?obj in dataTable.Rows)
            {
                if (obj is DataRow dataRow)
                {
                    // The properties of the CsvRecordWrapper match the columns
                    // of the DataTable in data type and order (but not the
                    // columns of the CSV file).
                    for (int i = 0; i < wrapper.Count; i++)
                    {
                        wrapper[i] = dataRow[i];
                    }

                    writer.WriteRecord();
                }
            }
        }

        dataTable.Clear();

        // Refill the DataTable from the CSV-file:
        using (var reader = new CsvReader(FILE_NAME))
        {
            foreach (CsvRecord record in reader.Read())
            {
                wrapper.Record = record;
                DataRow dataRow = dataTable.NewRow();
                dataTable.Rows.Add(dataRow);

                // It doesn't matter that the columns in the CSV file have a
                // different order than the columns of the DataTable:
                // CsvRecordWrapper reorders that for us.
                for (int i = 0; i < wrapper.Count; i++)
                {
                    dataRow[i] = wrapper[i];
                }
            }
        }

        WriteConsole(dataTable);

        // Console output:
        // Csv file:
        //
        // Subject,Begin,Name,Day
        // Piano,14:30:00,Susi Meyer, Wednesday
        // Piano,15:15:00,Carl Czerny, Thursday
        // ,, Frederic Chopin,
        //
        //
        // Content of the refilled DataTable:
        // Susi Meyer      Piano           3               14:30:00
        // Carl Czerny     Piano           4               15:15:00
        // Frederic Chopin <DBNull>        < DBNull >      < DBNull >
    }
Exemplo n.º 17
0
        public void InsertPropertyTest3()
        {
            var wrapper = new CsvRecordWrapper();

            wrapper.InsertProperty(0, null !);
        }
Exemplo n.º 18
0
    protected override void FillCsvRecordNonStandardProp(Contact contact, ContactProp prop, CsvRecordWrapper wrapper, int index)
    {
        switch ((AdditionalProp)prop)
        {
        case AdditionalProp.BusinessStreet2:
        case AdditionalProp.BusinessStreet3:
        case AdditionalProp.HomeStreet2:
        case AdditionalProp.HomeStreet3:
            break;

        case AdditionalProp.AssistantsPhone:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && x.IsWork && !x.IsFax), 2);
            break;

        case AdditionalProp.BusinessPhone2:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && x.IsWork && !x.IsFax), 3);
            break;

        case AdditionalProp.CompanyMainPhone:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && x.IsWork && !x.IsFax), 4);
            break;

        case AdditionalProp.HomePhone2:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && !x.IsWork && !x.IsFax), 7);

            break;

        case AdditionalProp.ISDN:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && !x.IsWork && !x.IsFax), 8);

            break;

        case AdditionalProp.RadioPhone:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && !x.IsWork && !x.IsFax), 9);

            break;

        case AdditionalProp.TTY_TDD_Phone:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && !x.IsWork && !x.IsFax), 10);

            break;

        case AdditionalProp.OtherFax:
            wrapper[index] = GetValueFromPhone(contact.PhoneNumbers?.Where(x => x != null && x.IsFax), 2);
            break;

        default:
            break;
        }
    }
Exemplo n.º 19
0
        public void CsvRecordWrapperTest()
        {
            var wrapper = new CsvRecordWrapper();

            Assert.IsInstanceOfType(wrapper, typeof(CsvRecordWrapper));
        }