/// <summary> /// This turns a properly formed delimeted string into a dataset. The method expects the first row to be column names. Each successive line should be data until EOF. /// </summary> /// <param name="rawContents"></param> /// <returns></returns> public virtual DataSet ImportData(string rawContents) { if (string.IsNullOrEmpty(rawContents)) { throw new ArgumentNullException(rawContents); } //Prepare result DataSet result = new DataSet(); try { result.Tables.Add(TableName); //split file into lines string[] dataRowsArray = rawContents.Split(RowDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries); //////////////////////////////////////////////// //create DataSet out of file data //Headings foreach (FixedWidthColumn col in Columns) { result.Tables[TableName].Columns.Add(col.Name); } //determine max line length we are going to parse int maxLineLength = Columns[Columns.Count - 1].BeginningCharacter + Columns[Columns.Count - 1].FieldLength; //Import data foreach (string fileRow in dataRowsArray) { string fileRowFixed = fileRow; if (fileRowFixed.Length < maxLineLength) { fileRowFixed = fileRowFixed.PadRight(maxLineLength, ' '); } DataRow newRow = result.Tables[0].NewRow(); foreach (FixedWidthColumn col in Columns) { string rawString = fileRowFixed.Substring(col.BeginningCharacter, col.FieldLength); rawString = StringFormatter.RemoveInvisibleCharacters(rawString); rawString = rawString.Trim(); newRow[col.Name] = rawString; } result.Tables[0].Rows.Add(newRow); } } catch { result.Dispose(); throw; } return(result); }
public static string RowDelimiterToString(RowDelimiters Rowdelimiter) { string strRet = string.Empty; switch (Rowdelimiter) { case RowDelimiters.CarriageReturnLineFeed: strRet = System.Environment.NewLine; break; case RowDelimiters.CarriageReturn: strRet = "\r"; break; case RowDelimiters.LineFeed: strRet = "\n"; break; case RowDelimiters.Semicolon: strRet = ";"; break; case RowDelimiters.Colon: strRet = ":"; break; case RowDelimiters.Comma: strRet = ","; break; case RowDelimiters.Tab: strRet = "\t"; break; case RowDelimiters.VerticalBar: strRet = "|"; break; default: strRet = ""; break; } return(strRet); }
/// <summary> /// This turns a properly formed delimited string into a dataset. The method expects the first row to be column names. Each successive line should be data until EOF. /// </summary> /// <param name="rawContents"></param> /// <returns></returns> public virtual DataSet ImportData(string rawContents) { //validate parameters if (string.IsNullOrEmpty(rawContents)) { throw new ArgumentNullException("rawContents"); } //Prepare result DataSet result = new DataSet(); try { result.Tables.Add(TableName); //split file into lines string[] dataRowsArray = rawContents.Split(RowDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries); //Create generic list from string array List <string> dataRows = new List <string>(); foreach (string row in dataRowsArray) { dataRows.Add(row); } //////////////////////////////////////////////// //create DataSet out of file data //Headings //First row has column names if (FirstRowContainsColumnNames) { //Create columns with headings from first row string[] columns = dataRows[0].Split(FieldDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries); foreach (string columnName in columns) { result.Tables[TableName].Columns.Add(columnName); } //Remove header row from dataRows list dataRows.RemoveAt(0); } //Column names in Columns property else if (Columns.Count > 0) { int numberOfDataColumns = dataRows[0].Split(FieldDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries).Length; if (Columns.Count != numberOfDataColumns) { throw new ArgumentOutOfRangeException("rawContents", "Number of columns defined in Columns is not the same as the number of columns in the rawContents."); } foreach (Column col in Columns) { result.Tables[TableName].Columns.Add(col.Name); } } //No column names defined else { //Create columns string[] columns = dataRows[0].Split(FieldDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries); int rowCounter = 1; foreach (string columnName in columns) { result.Tables[TableName].Columns.Add("column" + rowCounter.ToString()); rowCounter++; } } //Import data foreach (string fileRow in dataRows) { //Populate Data result.Tables[TableName].Rows.Add(fileRow.Split(FieldDelimiters.ToArray(), StringSplitOptions.RemoveEmptyEntries)); } } catch { result.Dispose(); throw; } return(result); }