1

我正在尝试从文本文件中解析销售信息并将它们放入两个列表框

文本文件包含以下信息:

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 列表框。

谢谢

4

2 回答 2

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);
    }
}
于 2013-11-09T06:48:45.723 回答
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);
        }

编辑

当我们将值转换为双精度值时,您必须在显示值时添加货币符号:

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);
//...
于 2013-11-09T06:51:16.250 回答