C# Linq question -
i have text file in storing entries address book. layout so:
name:
contact:
product:
quantity:
i have written linq code grab name plus next 4 lines, search name feature. want able search contact. challenge match contact info, grab next 3 lines, , grab line prior match. way if search contact used, full list of info returned.
private void buttonsearch_click(object sender, eventargs e) { string[] lines = file.readalllines("c:/addressbook/customers.txt"); string name = textboxsearchname.text; string contact = textboxcontact.text; if (name == "" && contact == "") { return; } var byname = line in lines line.contains(name) select lines.skipwhile(f => f != line).take(4); //var bycontact = line in lines // line.contains(name) // select lines.skipwhile(f => f != name).take(4); if (name != "") { foreach (var item in byname) foreach (var line in item) { listbox2.items.add(line); } listbox2.items.add(""); } //if (contact != "") //{ // foreach (var item in bycontact) // foreach (var line in item) { listbox2.items.add(line); } //listbox2.items.add(""); } }
firstly recommend changing data storage approach if can.
secondly recommend reading file object, this:
public class contact { public string name {get; set;} public string contact {get; set;} public string product {get; set;} public int quantity {get; set;} } ... public ienumerable<contact> getcontacts() { //make read line line if big! string[] lines = file.readalllines("c:/addressbook/customers.txt"); (int i=0;i<lines.length;i += 4) { //add error handling/validation! yield return new contact() { name = lines[i], contact = lines[i+1], product = lines[i+2], quantity = int.parse(lines[i+3] }; } } private void buttonsearch_click(object sender, eventargs e) { ... var results = c in getcontacts() c.name == name || c.contact == contact select c; ... }
Comments
Post a Comment