c#从文本文件中拆分整数和字符串,并将它们添加到两个不同的列表框中

时间:2013-11-09 06:44:32

标签: c# string listbox split integer

我试图从文本文件中解析销售信息并将它们放到两个列表框中

文本文件包含以下信息:

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

谢谢

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分: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);
        }

修改

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

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);
//...