1

テキスト ファイルから販売情報を解析し、それらを 2 つのリストボックスに配置しようとしています。

テキスト ファイルには、次の情報が含まれています。

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);
        }

編集

値を 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);
//...
于 2013-11-09T06:51:16.250 に答える