// 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; }
public abstract void HandleItem(CIFItem item);