0

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.

2 Answers 2

1

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.

Sign up to request clarification or add additional context in comments.

1 Comment

Exactly what I was looking for. It continues to astonish me just how the simple solutions are the most often overlooked ones. Thank you.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.