我试图从文本文件中解析销售信息并将它们放到两个列表框中
文本文件包含以下信息:
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 :(得分: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);
//...