【解決方法】入力文字列の形式が正しくありません

[ad_1]

フォーマットの瞬間に少し問題があります。
与えられた例に正確に従いましたが、特定の行がエラーとして表示される理由をまだ見つけていません。 星との線は私が問題を抱えているものです。 System.FormatException が発生するだけです。 ありがとうございます!

float.Parse ステートメントが正しく実行されていないときに、私が読もうとしているドキュメントの 2 行を次に示します。
****クイックストップ|イクラ|31|24|
クイックストップ|ゴルゴンゾーラテリーノ|12.5|15|****

private void cmboboxlist_SelectedIndexChanged(object sender, EventArgs e)
{
    string [] names = new string[10];
    float[] subtotals = new float[10];
    string [] fields;
    int index = 0;
    float subtotal;
    string frmStr, currentLine;
    StreamReader ReportReader = new StreamReader("PurchaseReport.txt");
    lstboxdisplay.Items.Clear();
    frmStr = "{0,-20}{1,10}{2,10}{3,20:N1}";

    while (ReportReader.EndOfStream == false)
    {

        currentLine = ReportReader.ReadLine();
        fields = currentLine.Split('|');

     ****   subtotal = float.Parse(fields[2]) + float.Parse(fields[3]);
        names[index] = fields[0];
        subtotals[index] = subtotal;
        index = index + 1;

        lstboxdisplay.Items.Add(String.Format(frmStr, fields[0], fields[1], fields[2], fields[3], subtotal));
    }

私が試したこと:

出力の形式を変更しようとしましたが、形式が正しくないと言い続けていますが、例として持っている別のドキュメントでは、この形式は正常に機能します。

解決策 1

fields[2] および/または fields[3] あなたがそうであると思うものではありません。 その行にブレークポイントを設定し、コードを実行します。 デバッガーがその行で停止したら、コンテンツを解析しようとしている各変数の上にマウスを置き、それらに何が含まれているかを確認します。

解決策 2

C#
****   subtotal = float.Parse(fields[2]) + float.Parse(fields[3]);

使用しないでください Parse、データが正しくない場合にアプリケーションをクラッシュさせるだけです。 に変更します TryParse:

C#
float temp = 0;
if (!float.TryParse(fields[2], out temp)
{
    // display a message showing the invalid data, and return from the method
}
subtotal = temp;
if (!float.TryParse(fields[3], out temp)
{
    // display a message showing the invalid data, and return from the method
}
subtotal += temp;

見る Single.TryParse メソッド (システム) | マイクロソフト ラーン[^].

[ad_2]

コメント

タイトルとURLをコピーしました