anon271334
anon271334

Reputation:

Linq To Text Files

I have a Text File (Sorry, I'm not allowed to work on XML files :(), and it includes customer records. Each text file looks like:

Account_ID: 98734BLAH9873
User Name: something_85
First Name: ILove
Last Name: XML
Age: 209

etc... And I need to be able to use LINQ to get the data from these text files and just store them in memory.

I have seen many Linq to SQL, Linq to BLAH but nothing for Linq to Text. Can someone please help me out abit?

Thank you

Upvotes: 3

Views: 10833

Answers (3)

Kaerber
Kaerber

Reputation: 1653

You can use the code like that

var pairs = File.ReadAllLines("filename.txt")
    .Select(line => line.Split(':'))
    .ToDictionary(cells => cells[0].Trim(), cells => cells[1].Trim())

Or use the .NET 4.0 File.ReadLines() method to return an IEnumerable, which is useful for processing big text files.

Upvotes: 12

Rob Fonseca-Ensor
Rob Fonseca-Ensor

Reputation: 15621

Filehelpers is a really great open source solution to this:

http://filehelpers.sourceforge.net/

You just declare a class with attributes, and FileHelpers reads the flat file for you:

[FixedLengthRecord]
public class PriceRecord
{
    [FieldFixedLength(6)]
    public int ProductId;

    [FieldFixedLength(8)]
    [FieldConverter(typeof(MoneyConverter))]
    public decimal PriceList;

    [FieldFixedLength(8)]
    [FieldConverter(typeof(MoneyConverter))]
    public decimal PriceOnePay;
}

Once FileHelpers gives you back an array of rows, you can use Linq to Objects to query the data

We've had great success with it. I actually think Kaerber's solution is a nice simple solution, maybe stave of migrating to FileHelpers till you really need the extra power.

Upvotes: 5

Marcelo Cantos
Marcelo Cantos

Reputation: 185852

The concept of a text file data source is extremely broad (consider that XML is stored in text files). For that reason, I think it is unlikely that such a beast exists.

It should be simple enough to read the text file into a collection of Account objects and then use LINQ-to-Objects.

Upvotes: 6

Related Questions