Azavea.NijPredictivePolicing.ACSAlchemistLibrary.FileFormats.DesiredColumnsReader.CheckForDuplicates C# (CSharp) Method

CheckForDuplicates() private method

private CheckForDuplicates ( DataTable dt ) : string
dt System.Data.DataTable
return string
        private string CheckForDuplicates(DataTable dt)
        {
            var columnConflicts = new Dictionary<string, List<int>>();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                var row = dt.Rows[i];
                string columnName = (row[1] as string).ToLower();

                if (!columnConflicts.ContainsKey(columnName))
                    columnConflicts[columnName] = new List<int>();

                columnConflicts[columnName].Add(i);
            }

            StringBuilder dupsSB = new StringBuilder(512);
            foreach (string column in columnConflicts.Keys)
            {
                var lines = columnConflicts[column];
                if (lines.Count == 1)
                    continue;

                if (dupsSB.Length == 0)
                {
                    dupsSB.AppendFormat("The File {0} contained duplicate or conflicting columns.{1}Please resolve these conflicts to continue:{1}",
                        this._filename, Environment.NewLine);

                    dupsSB.AppendFormat("Note that all variables include a Margin of Error column named \"{0}\" + [column name] which can cause duplicates to be created.{1}",
                        Settings.MoEPrefix, Environment.NewLine);
                }

                dupsSB.Append("Column ").Append(column).Append(" appears on line(s): ");
                for (int i = 0; i < lines.Count; i++) { if (i > 0) { dupsSB.Append(","); } dupsSB.Append(lines[i] + 1); }
                dupsSB.Append(Environment.NewLine);
            }

            //if string was non-empty, there were errors
            return dupsSB.ToString();
        }