работа с текстовым файлом с разделителями - PullRequest
6 голосов
/ 11 августа 2011

начал работать с чтением текстового файла, разделенным подчеркиванием и каналом - | _ | попробовал следующий код. не дает желаемого результата. условие разделения должно быть изменено, но как. пожалуйста, порекомендуйте. Спасибо всем - теперь это работает.

class Program
{
    static void Main(string[] args)
    {
        string filePath = @"J:\dot\emp.dat";


        var query = 
            from line in File.ReadLines(filePath)
            let empRecord = line.Split(new string[] {"|_|"},StringSplitOptions.None)

            select new datFile()
            {
                name = empRecord[0],
                employeeid = empRecord[1],
                income = empRecord[2],
                expenses = empRecord[3]

            };

        foreach (var item in query)
        {
            Console.WriteLine(item.name, item.employeeid, 
                 item.income, item.expenses);
        }
        Console.ReadLine();
    }

    public class datFile
    {
        public string name { get; set; }
        public string employeeid { get; set; }
        public string income { get; set; }
        public string expenses { get; set; }

      }
   }

Содержимое файла:

name|_|employeeid|_|income|_|expenses
emp1|_|201501|_|100000|_|50000
emp2|_|20000|_|90000|_|30000
emp3|_|34234|_|100000|_|23000

Выход:

 name
 emp1
 emp3
 emp3   
 ----- 

Ответы [ 4 ]

15 голосов
/ 11 августа 2011

Проблема на самом деле здесь:

Console.WriteLine(item.name, item.employeeid, item.income, item.expenses);

Используется item.name в качестве строки формата, которая не включает {0}, {1} или {2}, поэтому остальные аргументы эффективно бесполезны.Попробуйте это, который задает строку формата и затем значения для заполнения:

Console.WriteLine("{0} {1} {2} {3}", 
                  item.name, item.employeeid, item.income, item.expenses);
0 голосов
/ 11 августа 2011

Мне стыдно сказать, что мне пришлось немного протестировать это, чтобы выяснить, что было не так, но это потому, что то, что было неправильно, было так очевидно.

Все в этом примере правильно, кроме этой строки:

Console.WriteLine(item.name, item.employeeid, item.income, item.expenses);

Попробуйте:

Console.WriteLine("name={0}, employeeid={1}, income={2}, expenses={3}",
   item.name, item.employeeid, item.income, item.expenses);
0 голосов
/ 11 августа 2011

Я мало работаю с консольными приложениями, но попробуйте изменить ваш код следующим образом:

foreach (var item in query)
{
    Console.WriteLine("{0}, {1}, {2}, {3}",
        item.name, item.employeeid, item.income, item.expenses);
}
0 голосов
/ 11 августа 2011

Вы пробовали разбивать символ [] вместо строки []?

let empRecord = line.Split(new char[] {'|', '_', '|'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...