3

これらはvaluesからのものですtextfile

1245.67
1189.55
1098.72
1456.88
2109.34
1987.55
1872.36

彼らは明らかdecimal

何が欠けているのかわかりませんが、デバッグすると、入力文字列が正しい形式ではありませんでした。

それが私がこれまでにコーディングしたものです

    private void getValuesButton_Click(object sender, EventArgs e)
    {
        try
        {
            //create an array to hold items read from the file.
            const int SIZE = 7;
            double[] numbers = (double[])ois.readObject();

            // Counter variable to use in the loop
            int index = 0;

            //Declare a StreamReader variable 
            System.IO.StreamReader inputFile;

            //Open the file and get a StreamReader object.
            inputFile = File.OpenText("Values.txt");

            //Read the file contents into the array.
            while (index < numbers.Length && !inputFile.EndOfStream)
            {
                numbers[index] = int.Parse(inputFile.ReadLine());
                index++;
            }

            //Close the file.
            inputFile.Close();

            //Display the array elements in the list box.
            foreach (double value in numbers)
            {
                outputListbox.Items.Add(value);
            }
        }
        catch (Exception ex)
        {
            //Display an error message.
            MessageBox.Show(ex.Message);
        }
4

2 に答える 2

1

ファイルが UTF8 形式で、1 行に 1 つの浮動小数点数しか含まれていない場合、それらをすべて (現在のロケールで) シーケンスに解析できます。

var fileNumbers = File.ReadLines(filename).Select(double.Parse);

これは、ファイルから各文字列を順番に返す を返すFile.ReadLines()ため機能します。IEnumerable<string>次に、Linq を使用して各行Select()に適用します。これにより、文字列のシーケンスが double のシーケンスに効果的に変換されます。double.Parse()

次に、次のようなシーケンスを使用できます。

int index = 0;

foreach (var number in fileNumbers)
    numbers[index++] = number;

または、中間numbers配列を省略して、リスト ボックスに直接配置することもできます。

foreach (var number in fileNumbers)
    outputListbox.Items.Add(number);

すべてを 2 行で行うこともできますが、これは読みにくくなります。

foreach (var number in File.ReadLines("filename").Select(double.Parse))
    outputListbox.Items.Add(number);

最後に、以下の Ilya Ivanov が指摘したように、リストボックス内の文字列のみが必要な場合は、次のように簡単に実行できます。

outputListbox.Items.AddRange(File.ReadAllLines(filename));
于 2013-06-04T11:38:14.437 に答える