SARAVANAN PONNUSAMY
SARAVANAN PONNUSAMY

Reputation: 67

How to Read This Text File and store in a list using C#

The Text File Data is Like Below:

S.No    Name        Description Quantity    Rate    Discount    Amount
1       Apple       Friut is    12      24.02       0           242
                    Good for
                    health
2       Orange      Friut       5       12.22       3           128
3       Banana      Friut       5       12.22       3           128
4       Grapes      Friut       5       12.22       3           128

I want to add all the Rows& Columns in list but Description column have multiple Rows in single item. How can I Solve this. I add My Existing Code Here:

My Existing Code is as follows:

class Program
{
    static void Main(string[] args)
    {
        var dd = File.ReadAllLines(                    
                "C:\\Users\\Trainee\\Desktop\\Saravanan_Test\\27.8.2018\\Inputfile.txt")
                     .Skip(1)
                     .Where(s => s.Length > 1)
                     .Select(x => splits(x)).ToList();

        foreach (var item in dd)
        {
            Console.WriteLine(item.id+"\t" 
                              + item.Name+"\t"
                              + item.Description+"\t"
                              + item.Quantity+"\t"
                              + item.Rate+"\t"
                              + item.Discount+"\t"
                              + item.Amount);
        }

        Console.ReadKey();

    }

    private static Class1 splits(string x)
    {
        var columns = x.Split('\t').Where(c => c != "").ToList();
        return new Class1
        {
            id = Convert.ToInt32(columns[0]),
            Name = columns[1],
            Description = columns[2],
            Quantity = Convert.ToInt32(columns[3]),
            Rate = Convert.ToDouble(columns[4]),
            Discount = Convert.ToInt32(columns[5]),
            Amount = int.Parse(columns[6])
        };
    }
}    

class Class1
{
    public int id { get; set; }
    public string Name { get; set; }
    public String Description { get; set; }
    public int Quantity { get; set; }
    public double Rate { get; set; }
    public int Discount { get; set; }
    public int Amount { get; set; }
}

I want to store data into list like:

list.Add(new{ sno=1, Name="Apple", 
              Description="Friut is good for Health", 
              Quantity=12, Rate=24.02, Discount=0,
              Amount=242 });

Thanks in Advance.

Upvotes: 2

Views: 750

Answers (1)

Gaurang Dave
Gaurang Dave

Reputation: 4046

NOTE: This solution is based on the file shared in question. Data is separated by spaces and format is not advisable to use. Answering to help person with content format he has. Tested and working.

static void Main(string[] args)
{
    List<Data> list = new List<Data>();

    var dd = File.ReadAllLines(@"C:\Users\XXXX\Desktop\test.txt")
     .Skip(1)
     .Where(s => s.Length > 1).ToList();

    foreach (var item in dd)
    {
        var columns = item.Split('\t').Where(c => c.Trim() != string.Empty).ToList();

        if (columns != null && columns.Count > 0)
        {
            int id;

            if (int.TryParse(columns[0], out id))
            {
                list.Add(new Data()
                {
                    id = Convert.ToInt32(columns[0]),
                    Name = columns[1],
                    Description = columns[2],
                    Quantity = Convert.ToInt32(columns[3]),
                    Rate = Convert.ToDouble(columns[4]),
                    Discount = Convert.ToInt32(columns[5]),
                    Amount = int.Parse(columns[6])
                });
            }
            else
            {
                list.Last().Description += columns[0];
            }
        }
    }

    Console.ReadLine();
}

Upvotes: 2

Related Questions