尝试获取文件每行中最大的int并对结果求和

时间:2012-01-16 17:37:45

标签: c# .net file list

当我尝试运行我的代码时,我收到错误:

  

输入字符串的格式不正确。

我试图在文本文件的每一行中找到最大的int,然后将它们全部添加。

我确信此文件中没有字母,所有内容都以空格分隔。

这是我的代码:

int counter = 0;
string line;

List<int> col = new List<int>();

// Read the file and display it line by line.
System.IO.StreamReader file =
    new System.IO.StreamReader(label3.Text);
while ((line = file.ReadLine()) != null)
{
    int[] storage = new int[10000];

    Console.WriteLine(line);
    counter++;
    string s = line;

    string[] words = s.Split(' ');

        for (int i = 0; i < words.Length; i++)
        {
            storage[i] = Convert.ToInt32(words[i]);

        }

        int large = storage.Max();

        col.Add(large);
        Console.WriteLine(" ");

        foreach (int iii in col)
        { 
            Console.WriteLine(iii); 
        }

        int total = col.Sum();
        Console.WriteLine(total);

}

file.Close();

// Suspend the screen.
Console.ReadLine();

4 个答案:

答案 0 :(得分:2)

目标字符串可能无法存储在32位整数中。您可以尝试解析为ulong类型。请查看Integral Types TableFloating-Point Types Table

而不是Convert.ToInt32(),请尝试int.TryParse()。它将返回一个bool值,告诉你操作是否成功,并且它有一个out参数,它将放置解析操作的结果。如果您确定需要,TryParse操作也可用于其他数字类型。

E.g。

int val;
string strVal = "1000";
if (int.TryParse(strVal, out val))
{
  // do something with val
}
else
{
  // report error or skip
}

答案 1 :(得分:0)

我做了一个快速测试,你可能会在行

中得到错误
 storage[i] = Convert.ToInt32(words[i]);

如果是这样,请确保您要转换的内容是整数,而不是空字符串,例如。

答案 2 :(得分:0)

我相信您的代码中可能导致此错误的行是

Convert.ToInt32(words[i]);

现在,当你在visual studio中以调试模式(你可能是)运行这个应用程序时,你有办法检查异常发生时程序中发生了什么。

在屏幕的最底部会有一些标签。这些选项卡包括您的错误列表等。我喜欢使用的是“本地人”和“观看”。您可以使用“本地”选项卡。

单击“局部”选项卡时,应该会看到程序中所有局部变量的树结构。如果展开单词变量,则应该看到数组的所有单个成员。你还应该能够看到变量我检查你的单词数组的第i个成员,并确保它是一个整数,而不是其他东西。

答案 3 :(得分:0)

您要么转换为超出规模,要么尝试解析回车'/ r'

确保您正在修改输入。

我的解决方案:

    static void Main(string[] args)
    {
        int linecount = 100;

        string path = @"C:\test\test.txt";
        Random rand = new Random();

        //Create File
        StreamWriter writer = new StreamWriter(path, false);
        for (int i = 0; i < linecount; i++)
        {
            for (int j = 0; j < rand.Next(10, 15); j++)
            {
                writer.Write(rand.Next() + " ");
            }
            writer.WriteLine("");
        }

        writer.Close();


        //Sum File
        long sum = Enumerable.Sum<string>(
            (new StreamReader(path)).ReadToEnd().Split(new char[] { '\n' }, StringSplitOptions.RemoveEmptyEntries),
            l => Enumerable.Max(
                l.Split(' '),
                i => String.IsNullOrEmpty(i.Trim()) ? 0 : long.Parse(i.Trim())
                )
            );
    }