public static EdiFile FromStream(Stream stream) { TextReader reader = new StreamReader(stream, Encoding.GetEncoding(1252)); EdiFile ediFile = new EdiFile(); EdiTable ediSet = null; while (true) { string line = reader.ReadLine(); if (line == null) { break; } if (String.IsNullOrWhiteSpace(line)) { } else if (line.StartsWith("@")) { Match match = Regex.Match(line, @"\@(?<name>[a-zA-Z]+)\s*\(((?<header>[a-zA-Z0-9]+)(\,\s|\)))+"); if (match.Success) { ediSet = new EdiTable(match.Groups["name"].Value); foreach (Capture header in match.Groups["header"].Captures) { ediSet.AddHeader(header.Value); } ediFile.Add(ediSet); } } else { Match match = Regex.Match(line, @"(\""(?<value>[^\""]*)\""\s*)*"); if (match.Success) { EdiRow row = new EdiRow(); int i = 0; foreach (Capture c in match.Groups["value"].Captures) { String v = c.Value; if (String.IsNullOrWhiteSpace(v)) { v = null; } row[ediSet.Headers[i]] = v; i++; } ediSet.Add(row); } } } reader.Close(); return(ediFile); }
internal void Add(EdiTable ediSet) { sets.Add(ediSet); }