3

这些是valuestextfile

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 格式并且每行只包含一个浮点数,您可以将它们全部解析成这样的序列(在当前语言环境中)

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

这是有效的,因为File.ReadLines()返回一个IEnumerable<string>按顺序从文件中返回每个字符串的返回。然后我使用 LinqSelect()应用double.Parse()到每一行,它有效地将字符串序列转换为双精度序列。

然后你可以使用这样的序列:

int index = 0;

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

或者您可以省略中间numbers数组并将它们直接放入列表框中:

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

你可以用两行代码完成整个事情,但这可读性要差得多:

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 回答
0

看起来你做了int.parse,但你试图解析一个double,而不是一个int,所以在你读入数组的地方使用Double.Parse,这应该可以正常工作。

于 2013-06-04T12:25:11.043 回答