Как разобрать текстовый файл?

По сути, мне нужен кто-то, кто поможет мне или покажет мне код, который позволит мне прочитать имя и цену из файла, который я назвал c1.txt.

Это то, что у меня уже есть.

    TextReader c1 = new StreamReader("c1.txt");
        if (cse == "c1")
        {
            string compc1;
            compc1 = c1.ReadLine();
            Console.WriteLine(compc1);
            Console.WriteLine();
            compcase = compc1;
            compcasecost = 89.99;
        }

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


person Community    schedule 14.01.2010    source источник
comment
Нам понадобится образец строки из текстового файла.   -  person Jader Dias    schedule 15.01.2010
comment
Домашнее задание? Как выглядит текстовый файл?   -  person Seth    schedule 15.01.2010
comment
Можете ли вы опубликовать короткую, но информативную выдержку из вашего входного файла и ожидаемый результат, который вы хотите?   -  person Mark Byers    schedule 15.01.2010
comment
Кажется, вы не понимаете, о чем просите... Пожалуйста, переформулируйте вопрос или, если вы предлагаете достаточно почиститься, прочтите руководство по C++. Если вы не знакомы с C или C++ и ищете быстрый срок реализации, попробуйте использовать VB вместо C/C++/C#. Предположим, что эта ссылка может быть вам полезна: social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/   -  person ThinkJet    schedule 15.01.2010


Ответы (3)


Вы не сказали нам формат текстового файла. Я собираюсь предположить следующее:

Milk|2.69
Eggs|1.79
Yogurt|2.99
Soy milk|3.79

Вы также не указали вывод. Я собираюсь предположить следующее:

Name = Milk, Price = 2.69
Name = Eggs, Price = 1.79
Name = Yogurt, Price = 2.99
Name = Soy milk, Price = 3.79

Затем следующий прочитает такой файл и выдаст желаемый результат.

using(TextReader tr = new StreamReader("c1.txt")) {
    string line;
    while((line = tr.ReadLine()) != null) {
        string[] fields = line.Split('|');
        string name = fields[0];
        decimal price = Decimal.Parse(fields[1]);
        Console.WriteLine(
            String.Format("Name = {0}, Price = {1}", name, price)
        );
    }
}

Если ваш разделитель отличается, вам нужно изменить параметр '|' на метод String.Split (вызывается для экземпляра String с именем line как line.Split('|')).

Если ваш формат должен быть другим, вам нужно поиграть с линией

String.Format("Name = {0}, Price = {1}", name, price)

Дайте знать, если у вас появятся вопросы.

person jason    schedule 14.01.2010

Вы также можете попробовать использовать вспомогательный класс синтаксического анализа в качестве отправной точки, например, описанный в http://www.blackbeltcoder.com/Articles/strings/a-text-parsing-helper-class.

person Jonathan Wood    schedule 23.12.2010

    static void ReadText()
    {
        //open the file, read it, put each line into an array of strings
        //and then close the file
        string[] text = File.ReadAllLines("c1.txt");

        //use StringBuilder instead of string to optimize performance
        StringBuilder name = null;
        StringBuilder price = null;
        foreach (string line in text)
        {
            //get the name of the product (the string before the separator "," )
            name = new StringBuilder((line.Split(','))[0]);
            //get the Price (the string after the separator "," )
            price = new StringBuilder((line.Split(','))[1]);

            //finally format and display the result in the Console
            Console.WriteLine("Name = {0}, Price = {1}", name, price);
        }

Он дает те же результаты, что и метод @Jason, но я думаю, что это оптимизированная версия.

person iChaib    schedule 14.01.2010
comment
Какова оптимизация создания StringBuilder для строки, которой вы вообще не управляете, и выполнения операции разделения дважды, а не один раз? Обычно вы создаете только StringBuilder, чтобы снизить стоимость нескольких добавлений. И вы уже получаете две совершенно хорошие строки в массиве, возвращаемом line.Split. - person JasonTrue; 15.01.2010
comment
Кроме того, при этом файл сразу считывается в память, что также может создавать проблемы (время чтения плюс потенциальные проблемы с памятью). - person jason; 15.01.2010