AjK
AjK

Reputation: 11

How do I create a subset of an array?

I have 1 array with many string lines.

For every line in that array, if a condition is met, I have a console app that displays the line from the array, with some modifications (I call this the outputLine).

How do I make an array from the list of outputLines ?

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;            

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                string[] outputArray = linesArray;

                string outputLine = "yes    " + outputArray[i];
                Console.WriteLine(outputLine);

            }

        }

        Console.ReadLine();
    }
}

Upvotes: 1

Views: 148

Answers (4)

George Kerwood
George Kerwood

Reputation: 1306

Try working with Lists instead of arrays if you're wanting to make dynamic additions. For example;

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;
        // Delcare your list here
        List<string> outputList = new List<string>();            

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                // You can "Add" to lists easily like this
                outputList.Add(linesArray[i]);

                // This will return you the last item in the list
                string outputLine = "yes    " + outputList.Last();
                Console.WriteLine(outputLine);
            }
        }

        // Then if you specifically want it back to an Array
        string[] outputArray = outputList.ToArray();

        Console.ReadLine();
    }
}

Hope this helps :)

Upvotes: 0

Sufian Saory
Sufian Saory

Reputation: 892

why not first filter your lines with desired condition by using linq? then you can output in console.

string[] lines = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
string[] filteredLines = lines.Where(line => line.Contains("2008/12")).ToArray();
foreach(string line in filteredLines){
    Console.WriteLine("yes    " + line);
}

Upvotes: 1

sokkyoku
sokkyoku

Reputation: 2221

Rather than an array, which has to define its size at declaration in C#, you're looking for a List<string>. You might want to refer to this answer about adding elements to an array to better understand the difference between List and array

Add using System.Collections.Generic at the top of your file and modify your code as such:

class Program
{
    static void Main(string[] args)
    {
        string[] linesArray = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT");
        int linecount = File.ReadAllLines(@"C:\Users\AK1\Desktop\CC2_B.TXT").Length;            
        List<string> outputLines = new List<string>();

        for (int i = 0; i < linecount; i++)
        {
            if (linesArray[i].Contains("2008/12"))
            {
                string outputLine = "yes    " + linesArray[i];
                outputLines.Add(outputLine);
                Console.WriteLine(outputLine);
            }

        }
        Console.ReadLine();
    }
}

Then if you really need it to be an array (like to pass it to another function), you can call outputLines.ToArray()

Upvotes: 1

MKougiouris
MKougiouris

Reputation: 2861

Declare an array with a capacity of linecount, in case you need to add every single line. I suppose this is c++? so you can not increase an array size in runtime.

static void Main(string[] args)
{
    int outputCounter=0;
    .......
        if (linesArray[i].Contains("2008/12"))
        {
            string outputLine = "yes    " + outputArray[i];

             outputArray[outputCounter]= outputLine;
             outputCounter++;  
             Console.WriteLine(outputLine);   
        }

    }

Update: For c# just do something like this

static void Main(string[] args)
{
    List<string> outputList = new List<string>();
    .......
        if (linesArray[i].Contains("2008/12"))
        {
            string outputLine = "yes    " + outputArray[i];

             outputList.Add(outputLine);
             Console.WriteLine(outputLine);   
        }

    }

Upvotes: 0

Related Questions