从文本文件输入C#文件

时间:2009-12-11 02:37:16

标签: c#

我有这样的功能:

   List<float> myList = new List(float);

     public void numbers(string filename)
    {
        string input;
        float number;

        if (System.IO.File.Exists(filename) == true)
        {
            System.IO.StreamReader objectReader;
            objectReader = new System.IO.StreamReader(filename);

            while ((input = objectReader.ReadLine()) != null)
            {
                number = Convert.ToSingle(input);
                myList.Add(number);
            }
            objectReader.Close();
        }
        else
        {
            MessageBox.Show("No Such File" + filename);
        }
    }

我试图将文本文件中的数字(浮点数)添加到List中。但我一直在说错误的格式错误。文本文件中的数字是每行一个数字......任何帮助?

6 个答案:

答案 0 :(得分:4)

我建议你像这样做一个Trim电话

number = Convert.ToSingle(input.Trim());

然而,更好的代码将使用TryParse调用

float tmp;
if(float.TryParse(input.Trim(), out tmp)
{
   mylist.Add(tmp);
}

答案 1 :(得分:3)

你的代码对我来说没问题,除了换行的情况(当然对于完全不是数字的条目)

这是一个适合您的版本,使用tryParse检查每行是否可以转换为单个版本):

    public void Numbers(string filename)
    {
        List<float> myList = new List<float>();     

        string input;

        if (System.IO.File.Exists(filename) == true)
        {
            System.IO.StreamReader objectReader;
            objectReader = new System.IO.StreamReader(filename);
            while ((input = objectReader.ReadLine()) != null)
            {
                Single output;
                if (Single.TryParse(input, out output ))
                {
                    myList.Add(output);
                }
                else
                {
                   // Huh? Should this happen, maybe some logging can go here to track down why you couldn't just use the .Convert()
                }
            }
            objectReader.Close();

        }
        else
        {
            MessageBox.Show("No Such File" + filename);
        }
    }

正如Mike C正确指出的那样,这可能存在风险 - 吞噬已被输出过程破坏的良好数据。 tryParse方法在失败时返回false,因此您可以添加一个else分支和一些日志记录来检查导致失败的原因,并查看是否还有其他错误可以纠正。

答案 2 :(得分:0)

文件中是否有空行或转换失败?我的猜测是你有一条不能从其当前格式浮出的线。你应该确保在读取行之前清理行(使用正则表达式删除所有不是数字的行)并在检查失败时抛出行。

您可能会做的一件事是使用double而不是Convert.ToDouble()。

答案 3 :(得分:0)

是否有空格或逗号或其他内容?最好的办法是在

上设置断点
number = Convert.ToSingle(input);

在尝试转换之前查看输入实际上是什么。

答案 4 :(得分:0)

有一个很棒的免费软件包FileHelpers,可以帮助从各种文本文件中导入数据。这样做的好处是已经有很多更深层次的错误处理。

答案 5 :(得分:0)

顺便说一下, if(System.IO.File.Exists(filename)== true) 可以缩短为 if(System.IO.File.Exists(filename))