Пример #1
0
        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;
        }
Пример #2
0
        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;
        }
Пример #3
0
        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;
        }
Пример #4
0
        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);
        }
Пример #5
0
 public CsvStreamReaderEx(string strData, CsvOptions opt)
 {
     Init(strData, opt);
 }
Пример #6
0
        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;
        }
Пример #7
0
 public CsvStreamReaderEx(string strData, CsvOptions opt)
 {
     Init(strData, opt);
 }