Kulstad
Kulstad

Reputation: 81

Create list of arrays from text file in C#

I have a number of text files that all follow the same content format:

"Title section","Version of the app"
10
"<thing 1>","<thing 2>","<thing 3>","<thing 4>","<thing 5>","<thing 6>","<thing 7>","<thing 8>","<thing 9>","<thing 10>"

'Where:
'  first line never changes, it always contains exactly these 2 items
'  second line is a count of how many "line 3s" there are
'  line 3 contains a command to execute and (up to) 9 parameters
'      - there will always be 10 qoute-delimited entries, even if some are blank
'      - there can be N number of entries (in this example, there will be 10 commands to read)

I am reading each of these text files in, using StreamReader, and want to set each file up in its own class.

public class MyTextFile{
    public string[] HeaderLine { get; set; }
    public int ItemCount { get; set; }
    List<MyCommandLine> Commands { get; set;}
}

public class MyCommandLine{
    public string[] MyCommand { get; set; }
}

private void btnGetMyFilesiles_Click(object sender, EventArgs e){
    DirectoryInfo myFolder = new DirectoryInfo(@"C:\FileSpot");

    FileInfo[] myfiles = myfolder.GetFiles("*.ses");

    string line = "";
    foreach(FileInfo file in Files ){
        str = str + ", " + file.Name;

        // Read the file and display it line by line.
        System.IO.StreamReader readingFile = new System.IO.StreamReader(file.Name);
        MyTextFile myFileObject = new MyTextFile()

        while ((line = readingFile.ReadLine()) != null){
            ' create the new MyTextFile here
        }
        file.Close();
        }
    }
}

The objective is to determine what the actual command being called is (""), and if any of the remaining parameters point to a pre-existing file, determine if that file exists. My problem is that I can't figure out how to read N number of "line 3" into their own objects and append these objects to the MyTextFile object. I'm 99% certain that I've led myself astray in reading each file line-by-line, but I don't know how to get out of it.

Upvotes: 0

Views: 614

Answers (2)

mrogal.ski
mrogal.ski

Reputation: 5920

If all of the is separated with coma sign , you can just do something like :

int length = Convert.ToInt32 (reader.ReadLine ()); string line = reader.ReadLine (); IEnumerable <string> things = line.Split (',').Select (thing => thing. Replace ('\"'', string.Empty).Take(length);

Take indicates how many things to take from the line.

Upvotes: 0

Joseph Mawer
Joseph Mawer

Reputation: 298

So, addressing the specific issue of getting N number of line 3 items into your class, you could do something like this (obviously you can make some changes so it is more specific to your application).

public class MyTextFile
{
    public List<Array> Commands = new List<Array>();

    public void EnumerateCommands()
    {
        for (int i = 0; i < Commands.Count; i++)
        {
            foreach (var c in Commands[i])
                Console.Write(c + " ");
            Console.WriteLine();
        }
    }
}


class Program
{
    static void Main(string[] args)
    {
        string line = "";
        int count = 0;
        MyTextFile tf = new MyTextFile();
        using (StreamReader sr = new StreamReader(@"path"))
        {
            while ((line = sr.ReadLine()) != null)
            {
                count += 1;

                if (count >= 3)
                {
                    object[] Arguments = line.Split(',');
                    tf.Commands.Add(Arguments);
                }
            }
        }
        tf.EnumerateCommands();
        Console.ReadLine();
    }
}

At least now you have a list of commands within your 'MyTextFile' class that you can enumerate through and do stuff with.

** I added the EnumerateCommands method so that you could actually see the list is storing the line items. The code should run in a Console application with the appropriate 'using' statements.

Hope this helps.

Upvotes: 1

Related Questions