コード例 #1
0
        /// <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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        /// <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);
        }