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

C# c从文本文件中拆分整数和字符串,并将它们添加到两个不同的列表框中,c#,string,listbox,split,integer,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

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

文本文件包含以下信息:

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);
        }
    }
这是输出的图片

我只想读取文本文件,将总销售额添加到lstTotalSales列表框中,并将全名添加到lstNames列表框中

谢谢

您应该使用十进制而不是整数,因为您的数字不是整数

您还应该更改循环中的逻辑。我认为应该是这样的:

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

您没有将每行拆分为名称和值

试试这个:

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

非常感谢Marcin,有没有办法在TotalSales中保留货币符号?错误2“NumberStyles”名称在当前上下文中不存在错误3“CultureInfo”名称在当前上下文中不存在您的循环已打开!要修复这两个错误,必须使用System.Globalization;插入;。此外,你不应该只是复制一些代码,假设这是解决方案。总是看一看它,试着理解它的作用。这里的所有人都试图提供帮助并编写一些启动代码,提出解决问题的建议。你说的开环是什么意思?谢谢你,乔,你说得对。我应该先看看解决方案,然后再为自己的懒惰道歉。同样的问题:有没有办法在TotalSales中保留货币符号?
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);
//...