Example #1
0
        // TODO IsCollection
        internal static CIFItem Parse(CIFHeader header, string itemData)
        {
            var item = new CIFItem();

            if (string.IsNullOrEmpty(itemData))
                return item;

            var values = ParseCSV(itemData, false);

            // TODO use header encoding for item data here

            var names = header.FieldNamesList;
            if (names != null && names.Any())
            {
                var namesArray = names.ToArray();
                var valuesArray = values.ToArray();

                // Field names are specified in header
                Debug.Assert(valuesArray.Length == namesArray.Length, "Field names count != field values count");

                for (int i = 0; i < namesArray.Length; ++i)
                {
                    var name = namesArray[i];
                    var value = valuesArray[i];

                    // Handle special cases like CIF Hashes in CIFItem instance
                    item[name] = !string.IsNullOrEmpty(value) ? value : null;
                }
            }
            else
            {
                // Field names are not specified, so use the (12) default fields from CIF 2.1
                var namesArray = Constants.RequiredFields;
                var valuesArray = values.ToArray();

                for (int i = 0; i < namesArray.Length; ++i)
                {
                    var name = namesArray[i];
                    var value = valuesArray[i];

                    // Handle special cases like CIF Hashes in CIFItem instance
                    item[name] = !string.IsNullOrEmpty(value) ? value : null;
                }
            }

            return item;
        }
Example #2
0
 public abstract void HandleItem(CIFItem item);