Solved

Parse a text file based on column numbers c#

Posted on 2009-03-31
2
722 Views
Last Modified: 2013-12-17
Hello Experts,

I have a large text file of data which is not delimited.  It appears that each field begins a specific number of characters into each line.

Like so:
Field001             Field002            Field003Field004       Field005
Field0010003     Field00234        Field003Field004       Field005
Field00123         Field0030          Field004Field004       Field005

I am comfortable workng with CSV and other delimited files.  What is the best way to clean this file up using C#?

Thanks for any help.
0
Comment
Question by:soapygus
2 Comments
 
LVL 85

Expert Comment

by:Mike Tomlinson
ID: 24035266
0
 
LVL 6

Accepted Solution

by:
HarryNS earned 500 total points
ID: 24037195
Check this code. I have got this sometime back from online.

DataSet data = BuildDataSet("C:\\Test.txt","Table",",");
 #region BuildDataSet

        /// <summary>

        /// method to read a text file into a DataSet

        /// </summary>

        /// <param name="file">file to read from</param>

        /// <param name="tableName">name of the DataTable we want to add</param>

        /// <param name="delimeter">delimiter to split on</param>

        /// <returns>a populated DataSet</returns>

        public DataSet BuildDataSet(string file, string tableName, string delimeter)

        {

            //create our DataSet

            DataSet domains = new DataSet();

            //add our table

            domains.Tables.Add(tableName);

            try

            {

                //first make sure the file exists

                if (File.Exists(file))

                {

                    //create a StreamReader and open our text file

                    StreamReader reader = new StreamReader(file);

                    //read the first line in and split it into columns

                    string[] columns = reader.ReadLine().Split(delimeter.ToCharArray());

                    //now add our columns (we will check to make sure the column doesnt exist before adding it)

                    foreach (string col in columns)

                    {

                        //variable to determine if a column has been added

                        bool added = false;

                        string next = "";

                        //our counter

                        int i = 0;

                        while (!(added))

                        {

                            string columnName = col;

                            //now check to see if the column already exists in our DataTable

                            if (!(domains.Tables[tableName].Columns.Contains(columnName)))

                            {

                                //since its not in our DataSet we will add it

                                domains.Tables[tableName].Columns.Add(columnName, typeof(string));

                                added = true;

                            }

                            else

                            {

                                //we didnt add the column so increment out counter

                                i++;

                            }

                        }

                    }

                    //now we need to read the rest of the text file

                    string data = reader.ReadToEnd();

                    //now we will split the file on the carriage return/line feed

                    //and toss it into a string array

                    string[] rows = data.Split("\r".ToCharArray());

                    //now we will add the rows to our DataTable

                    foreach (string r in rows)

                    {

                        string[] items = r.Split(delimeter.ToCharArray());

                        //split the row at the delimiter

                        domains.Tables[tableName].Rows.Add(items);

                    }

                }

                else

                {

                    throw new FileNotFoundException("The file " + file + " could not be found");

                }
 

            }

            catch (FileNotFoundException ex)

            {

                //_message = ex.Message;

                return null;

            }

            catch (Exception ex)

            {

                //_message = ex.Message;

                return null;

            }
 

            //now return the DataSet

            return domains;

        }

        #endregion

Open in new window

0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
groupNoAdj 7 85
Help with Query not working in client's PC 1 35
Anyway to make "All" the default in the dropdown? 6 34
Entity Framework 7 30
Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
The purpose of this article is to demonstrate how we can use conditional statements using Python.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.
The viewer will learn how to user default arguments when defining functions. This method of defining functions will be contrasted with the non-default-argument of defining functions.

912 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

17 Experts available now in Live!

Get 1:1 Help Now