2013-11-09 1 views
1

Я пытаюсь разобрать информацию о продажах из текстового файла и поместить их в два ListBoxesC# разбить целые числа и строки из текстового файла и добавить их к двум разным ListBox

Текстовый файл содержит следующую информацию:

Sam West $10,000.00 
Mae West $125,900.00 
North West $2,000.00 
Michelle Smith $25,000.00 
John Smith $12,500.00 
Martin Smith $19,900.00 
David Sampson $32,500.00 
Joan Sampson $5,990.00 
Sam Sampson $10,000.00 
Mae Sampson $125,500.00 
North Sampson $2,000.00 
Michelle West $25,000.00 
John Johnson $12,500.00 
Martin Johnson $19,900.00 
David Johnson $32,500.00 
Joan Johnson $5,990.00 
Sam Hartmann $10,000.00 
Mae Hartmann $125,100.00 
North Hartmann $2,000.00 
Michelle Hartmann $25,000.00 
John Johnson $12,500.00 
Martin Hartmann $19,900.00 
David Hartmann $32,500.00 
Joan Hartmann $5,990.00 

и мой код здесь

private void btnReadInSalesData_Click(object sender, EventArgs e) 
{ 
    StreamReader reader = new StreamReader("SalesNumbers.txt"); 
    List<int> numbers = new List<int>(); 
    int intTotal = 0; 

    while (!reader.EndOfStream) 
    { 
     string line = reader.ReadLine(); 
     string[] tokens = line.Split(new char[] { '$' }, StringSplitOptions.RemoveEmptyEntries); 

     foreach (string s in tokens) 
     { 
      if (int.TryParse(s, out intTotal)) 
       numbers.Add(intTotal); 
      lstTotalSales.Items.Add(s); 
     } 
    } 

а вот картина выхода http://s24.postimg.org/ylm8vl9at/output.jpg

Просто я хочу прочитать текстовый файл и добавить общий объем продаж в список lstTotalSales и добавить полное имя в список lstNames.

Спасибо

ответ

0

Вы пропустили разделение каждой строки на имя и значение.

Попробуйте это:

 string[] lines = File.ReadAllLines("SalesNumbers.txt"); 
     foreach (string line in lines) { 
      string[] s = line.Split("$".ToCharArray()); 
      if (s.Length<2) { /* */ } 
      double d; 
      if (!double.TryParse(s[1], NumberStyles.Float, CultureInfo.CurrentCulture, out d)) {     
       // Handle if not a number 
      } 
      lstNames.Items.Add(s[0]); 
      lstTotalSales.Items.Add(d); 
     } 

EDIT

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

string text = "$" + value.ToString(); 

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

Если предположить, что несколько символов валют, вы должны следить за символом раскола:

string currencySymbols = "$€Y"; 
//... 
int index = line.IndexOfAny(currencySymbols.ToCharArray()); 
if (index<0) {} //Nothing found 
char usedSymbol = line[index];   // <- found symbol 
string name = line.Substring(0, index); 
string value = line.Substring(index+1); 
//... 
+0

Ошибка 2 Имя «NumberStyles» не существует в текущем контексте \t Ошибка 3 Название «CultureInfo» не существует в текущем контексте Также ваш цикл открыт! – Med1a

+0

Чтобы исправить обе ошибки, вам нужно вставить 'using System.Globalization;'. Также вы никогда не должны просто копировать код, assuimg это решение. ВСЕГДА посмотрите на это и попытайтесь понять, что он делает. Все люди здесь пытаются помочь и сделать некоторый код запуска, сделав предложение, как решить вещи. Что вы подразумеваете под открытым циклом? – joe

+0

Спасибо, Джо, ты прав, я должен заманить на решение, прежде чем спросить, жаль, что ты ленив. Тот же вопрос: есть ли способ сохранить символ валюты в TotalSales? – Med1a

0

Вы должны использовать decimal вместо int, потому что ваши номера не являются целыми числами.

Вы также должны изменить свою логику в цикле. Я думаю, что это должно быть больше:

foreach (string s in tokens) 
{ 
    if (decimal.TryParse(s, out decTotal)) 
    { 
     numbers.Add(decTotal); 
     lstTotalSales.Items.Add(s); 
    } 
    else 
    { 
     lstNames.Items.Add(s); 
    } 
} 
+0

Спасибо большое Marcin, Есть ли способ, чтобы сохранить символ валюты в TotalSales? – Med1a

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