public static List <SNPItem> ReadFromFile(string fileName) { var result = new List <SNPItem>(); using (var sr = new StreamReader(fileName)) { var line = sr.ReadLine(); var hasFlip = line.Contains("_AlleleNeedFlip"); var platforms = line.Split('\t').ToList().ConvertAll(m => m.StringBefore("_Allele")); var step = hasFlip ? 3 : 2; while ((line = sr.ReadLine()) != null) { var parts = line.Split('\t'); //sw.WriteLine("Dbsnp_ID\tCHROM\tPOS\tDbsnp_RefAllele\tDbsnp_AltAllele\tDbsnp_IsReversed\t1000G_REF\t1000G_ALT\t1000G_MAF\tDataset\t{0}", var item = new SNPItem() { Name = parts[0], Chrom = int.Parse(parts[1]), Position = int.Parse(parts[2]), Allele1 = parts[3][0], Allele2 = parts[4], DbsnpIsReversed = bool.Parse(parts[5]), G1000Allele1 = parts[6][0], G1000Allele2 = parts[7][0], G1000Allele2Frequency = double.Parse(parts[8]), Dataset = parts[9] }; for (int i = 10; i < parts.Length; i += step) { if (string.IsNullOrEmpty(parts[i])) { continue; } var alleles = parts[i].Split(':'); var aitem = new Alleles() { Allele1 = alleles[0], Allele2 = alleles[1] }; aitem.Allele2Frequency = double.Parse(parts[i + 1]); if (hasFlip) { aitem.NeedFlip = bool.Parse(parts[i + 2]); } item.Platforms[platforms[i]] = aitem; } result.Add(item); } } return(result); }
public static List<SNPItem> ReadFromFile(string fileName) { var result = new List<SNPItem>(); using (var sr = new StreamReader(fileName)) { var line = sr.ReadLine(); var hasFlip = line.Contains("_AlleleNeedFlip"); var platforms = line.Split('\t').ToList().ConvertAll(m => m.StringBefore("_Allele")); var step = hasFlip ? 3 : 2; while ((line = sr.ReadLine()) != null) { var parts = line.Split('\t'); //sw.WriteLine("Dbsnp_ID\tCHROM\tPOS\tDbsnp_RefAllele\tDbsnp_AltAllele\tDbsnp_IsReversed\t1000G_REF\t1000G_ALT\t1000G_MAF\tDataset\t{0}", var item = new SNPItem() { Name = parts[0], Chrom = int.Parse(parts[1]), Position = int.Parse(parts[2]), Allele1 = parts[3][0], Allele2 = parts[4], DbsnpIsReversed = bool.Parse(parts[5]), G1000Allele1 = parts[6][0], G1000Allele2 = parts[7][0], G1000Allele2Frequency = double.Parse(parts[8]), Dataset = parts[9] }; for (int i = 10; i < parts.Length; i += step) { if (string.IsNullOrEmpty(parts[i])) { continue; } var alleles = parts[i].Split(':'); var aitem = new Alleles() { Allele1 = alleles[0], Allele2 = alleles[1] }; aitem.Allele2Frequency = double.Parse(parts[i + 1]); if (hasFlip) { aitem.NeedFlip = bool.Parse(parts[i + 2]); } item.Platforms[platforms[i]] = aitem; } result.Add(item); } } return result; }