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();
}