2010-01-14 7 views
1

Мне нужен кто-то, кто может мне помочь или показать мне код, который позволит мне прочитать имя и цену из файла, который я назвал 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; 
     } 

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

+3

Нам понадобится образец строки из текстового файла. –

+1

Домашнее задание? Как выглядит текстовый файл? – Seth

+0

Можете ли вы опубликовать короткий, но информативный экстракт вашего входного файла и ожидаемый результат, который вы хотите? –

ответ

10

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

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) 

Позвольте мне знать, если у вас есть какие-либо вопросы.

0
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); 
     } 

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

+2

Что такое оптимизация при создании StringBuilder на строке, которую вы вообще не манипулируете, и выполняете операцию split дважды, а не один раз? Обычно вы создаете только StringBuilder, уменьшая стоимость нескольких добавлений. И у вас уже есть две отличные строки в массиве, возвращаемые line.Split. – JasonTrue

+2

Кроме того, это считывает файл в память сразу, что также может создавать проблемы (время для чтения плюс потенциальная проблема с памятью). – jason

 Смежные вопросы

  • Нет связанных вопросов^_^