///格式为 /* * ; name type index formula format * "Date" RA -1 F1 "%s," * "Time" RA -1 F0 "%s," * "LATITU" RA -1 F1101 "%9.5f," * "LONGITU" RA -1 F1102 "%9.5f," */ /// <summary> /// 根据header 生成字段 /// 这里 /// </summary> /// <param name="header"></param> /// <returns>AscField </returns> public static AscField ParseHeader(String[] header) { AscField temp = new AscField(); //这里是hardcode !! reuse 要重写,或像java 有profile,去解析他?? temp.FieldName = header[0]; String formula = header[header.Length - 2]; temp.Formula = formula; String t = header[header.Length - 1]; temp.Type = ASCUtil.FormmaterString2GetType(t); if (temp.Type == null) { return(null); } else { return(temp); } }
//处理单个 asc文件-》.asc.parse 文件,包含 Field的属性,以及每个字段出现的文件名 public static void ProcessOneAscFile(String ascfilepath, String destFolder) { //自动创建目录 if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } List <String> fileHeader = null; List <String[]> dataheaders = ASCUtil.ParseAsc(ascfilepath, out fileHeader); //process header, 生成Field List <AscField> fields = new List <AscField>(); foreach (String[] strs in dataheaders) { AscField temp = ASCUtil.ParseHeader(strs); if (temp != null) { fields.Add(temp); } } List <String[]> headers = FML300Util.ParseThirdHundredFile(ascfilepath + @"\fml.300"); List <FML300Field> fml300fields = FML300Util.ParsethirdHundred(headers); //decorate to find fast,assume key is not duplicate Dictionary <String, int> dict = new Dictionary <string, int>(); foreach (FML300Field fml300field in fml300fields) { if (dict.ContainsKey(fml300field.formula)) { Console.WriteLine("fml300Fields formula is duplicate {0} {1} {2} ", fml300field.formula, fml300field.number, dict[fml300field.formula]); } else { dict.Add(fml300field.formula, fml300field.number); } } //利用fml.300文件,AscField ,生成AdvancedAscField List <AdvancedAscField> advancedfields = new List <AdvancedAscField>(); foreach (AscField field in fields) { AdvancedAscField advancedAscField = new AdvancedAscField { FieldName = field.FieldName, Formula = field.Formula, Type = field.Type }; if (dict.ContainsKey(field.Formula)) { advancedAscField.FieldNumber = dict[field.Formula]; } else { Console.WriteLine("field.Formula {0} is not found", field.Formula); advancedAscField.FieldNumber = 1; } advancedfields.Add(advancedAscField); } FileInfo fileInfo = new FileInfo(ascfilepath); String fileName = fileInfo.Name; //output result String destpath = destFolder + "//" + fileName.Replace(".asc", "") + ".parse"; using (StreamWriter sw = new StreamWriter(destpath)) { StringBuilder stringBuilder = new StringBuilder(); foreach (AdvancedAscField field in advancedfields) { stringBuilder.Append(field.FieldName + " "); stringBuilder.Append(field.Type + " "); stringBuilder.Append(field.Formula + " "); stringBuilder.Append(field.FieldNumber + " "); stringBuilder.Append(fileName.Replace(".asc", "")); sw.WriteLine(stringBuilder.ToString()); stringBuilder.Clear(); } } }