public MapData ReadFromFile(string fileName) { Func <string, bool> isComment = m => !string.IsNullOrEmpty(commentKey) && m.StartsWith(commentKey); var result = new MapData(); using (StreamReader sr = new StreamReader(fileName)) { string line; while ((line = sr.ReadLine()) != null) { if (!isComment(line)) { break; } } var parts = line.Split(this.delimiter); if (this.keyIndex == -1) { this.keyIndex = Array.IndexOf(parts, this.keyName); if (this.keyIndex == -1) { throw new ArgumentException(string.Format("Cannot find key column {0} in file {1}", this.keyName, fileName)); } } else { this.keyName = parts[this.keyIndex]; } if (this.valueIndex == -1) { this.valueIndex = Array.IndexOf(parts, this.valueName); if (valueIndex == -1) { throw new ArgumentException(string.Format("Cannot find value column {0} in file {1}", this.valueName, fileName)); } } else { this.valueName = parts[this.valueIndex]; } result.KeyName = this.keyName; result.ValueName = this.valueName; for (int i = 0; i < parts.Length; i++) { if (i != keyIndex && i != valueIndex) { result.InfoNames.Add(parts[i]); } } while ((line = sr.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line) && !isComment(line)) { if (CheckEnd(line)) { break; } var curParts = line.Split(this.delimiter); var item = new MapDataItem(); item.Key = curParts[keyIndex]; item.Value = curParts[valueIndex]; result.Data[item.Key] = item; for (int i = 0; i < curParts.Length; i++) { if (i != keyIndex && i != valueIndex) { item.Informations.Add(curParts[i]); } } } } } return(result); }
public MapData ReadFromFile(string fileName) { Func<string, bool> isComment = m => !string.IsNullOrEmpty(commentKey) && m.StartsWith(commentKey); var result = new MapData(); using (StreamReader sr = new StreamReader(fileName)) { string line; while ((line = sr.ReadLine()) != null) { if (!isComment(line)) { break; } } var parts = line.Split(this.delimiter); if (this.keyIndex == -1) { this.keyIndex = Array.IndexOf(parts, this.keyName); if (this.keyIndex == -1) { throw new ArgumentException(string.Format("Cannot find key column {0} in file {1}", this.keyName, fileName)); } } else { this.keyName = parts[this.keyIndex]; } if (this.valueIndex == -1) { this.valueIndex = Array.IndexOf(parts, this.valueName); if (valueIndex == -1) { throw new ArgumentException(string.Format("Cannot find value column {0} in file {1}", this.valueName, fileName)); } } else { this.valueName = parts[this.valueIndex]; } result.KeyName = this.keyName; result.ValueName = this.valueName; for (int i = 0; i < parts.Length; i++) { if (i != keyIndex && i != valueIndex) { result.InfoNames.Add(parts[i]); } } while ((line = sr.ReadLine()) != null) { if (!string.IsNullOrWhiteSpace(line) && !isComment(line)) { if (CheckEnd(line)) { break; } var curParts = line.Split(this.delimiter); var item = new MapDataItem(); item.Key = curParts[keyIndex]; item.Value = curParts[valueIndex]; result.Data[item.Key] = item; for (int i = 0; i < curParts.Length; i++) { if (i != keyIndex && i != valueIndex) { item.Informations.Add(curParts[i]); } } } } } return result; }