private static List<string> SplitGroupPath(string strSpec, string strSep, CsvOptions opt) { List<string> l = new List<string>(); if(string.IsNullOrEmpty(strSep)) l.Add(strSpec); else { string[] vChain = strSpec.Split(new string[1] { strSep }, StringSplitOptions.RemoveEmptyEntries); for(int i = 0; i < vChain.Length; ++i) { string strGrp = vChain[i]; if(opt.TrimFields) strGrp = strGrp.Trim(); if(strGrp.Length > 0) l.Add(strGrp); } if(l.Count == 0) l.Add(strSpec); } return l; }
private CsvOptions GetCsvOptions() { CsvOptions opt = new CsvOptions(); opt.FieldSeparator = GetCharFromDef(m_cmbFieldSep.Text); opt.RecordSeparator = GetCharFromDef(m_cmbRecSep.Text); opt.TextQualifier = GetCharFromDef(m_cmbTextQual.Text); if((opt.FieldSeparator == char.MinValue) || (opt.RecordSeparator == char.MinValue) || (opt.TextQualifier == char.MinValue)) return null; opt.BackslashIsEscape = m_cbBackEscape.Checked; opt.TrimFields = m_cbTrim.Checked; return opt; }
private static PwGroup FindCreateGroup(string strSpec, PwGroup pgStorage, Dictionary<string, PwGroup> dRootGroups, string strSep, CsvOptions opt, bool bMergeGroups) { List<string> l = SplitGroupPath(strSpec, strSep, opt); if(bMergeGroups) { char chSep = StrUtil.GetUnusedChar(strSpec); string strPath = AssembleGroupPath(l, 0, chSep); return pgStorage.FindCreateSubTree(strPath, new char[1] { chSep }); } string strRootSub = l[0]; if(!dRootGroups.ContainsKey(strRootSub)) { PwGroup pgNew = new PwGroup(true, true); pgNew.Name = strRootSub; pgStorage.AddGroup(pgNew, true); dRootGroups[strRootSub] = pgNew; } PwGroup pg = dRootGroups[strRootSub]; if(l.Count > 1) { char chSep = StrUtil.GetUnusedChar(strSpec); string strSubPath = AssembleGroupPath(l, 1, chSep); pg = pg.FindCreateSubTree(strSubPath, new char[1] { chSep }); } return pg; }
private void Init(string strData, CsvOptions opt) { if(strData == null) throw new ArgumentNullException("strData"); m_opt = (opt ?? new CsvOptions()); string strInput = strData; // Normalize to Unix "\n" right now; the new lines are // converted back in the <c>AddField</c> method strInput = StrUtil.NormalizeNewLines(strInput, false); strInput = strInput.Trim(new char[] { (char)0 }); m_sChars = new CharStream(strInput); }
public CsvStreamReaderEx(string strData, CsvOptions opt) { Init(strData, opt); }
private static PwGroup FindCreateGroup(string strSpec, PwGroup pgStorage, Dictionary<string, PwGroup> dRootGroups, string strSep, CsvOptions opt) { List<string> l = new List<string>(); if(string.IsNullOrEmpty(strSep)) l.Add(strSpec); else { string[] vChain = strSpec.Split(new string[1] { strSep }, StringSplitOptions.RemoveEmptyEntries); for(int i = 0; i < vChain.Length; ++i) { string strGrp = vChain[i]; if(opt.TrimFields) strGrp = strGrp.Trim(); if(strGrp.Length > 0) l.Add(strGrp); } if(l.Count == 0) l.Add(strSpec); } string strRootSub = l[0]; if(!dRootGroups.ContainsKey(strRootSub)) { PwGroup pgNew = new PwGroup(true, true); pgNew.Name = strRootSub; pgStorage.AddGroup(pgNew, true); dRootGroups[strRootSub] = pgNew; } PwGroup pg = dRootGroups[strRootSub]; if(l.Count > 1) { char chSep = StrUtil.GetUnusedChar(strSpec); StringBuilder sb = new StringBuilder(); for(int i = 1; i < l.Count; ++i) { if(i > 1) sb.Append(chSep); sb.Append(l[i]); } pg = pg.FindCreateSubTree(sb.ToString(), new char[1]{ chSep }); } return pg; }