接受整数并忽略文件C#中的非整数

时间:2016-02-17 00:17:09

标签: c#

目前,我已经编写了代码,如果文本文件只包含非整数

,则会正确显示错误消息
foreach (var line in System.IO.File.ReadLines(fileName))
  if (fileContents.Any(char.IsDigit))
  {
    return;
  }
    else
  {
    MessageBox.Show("Warning: File does not contain integers.");
    return;
  }

此外,我编写的代码只将包含整数的文本文件从字符串转换为整数

string[] eachString = fileContents.Split(new char[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
int[] eachInt = new int[eachString.Length];
for (int i = 0; i < eachString.Length; i++)
   eachInt[i] = int.Parse(eachString[i]);

我当前的问题是尝试接受一个具有BOTH整数和非整数的文件,但只是完全忽略非整数,只能使用整数。

我想通过结合我可以实现的两个代码,但显然不是这样。

实现这一目标的方法是什么?

2 个答案:

答案 0 :(得分:2)

这个怎么样?

此代码段从文件中读取内容,使用指定的分隔符拆分内容并验证数字。

var onlyints = File.ReadLines(filename)
                .SelectMany(line => line.Split(new char[] {' ', '\t', '\r', '\n' ,','}, StringSplitOptions.RemoveEmptyEntries))
                .Where(num => num => Regex.IsMatch(num, @"^\d+$"));

当文件中没有数字时,您可以弹出警告消息,如...

if(!onlyints.Any()) MessageBox.Show("Warning: File does not contain integers.");

答案 1 :(得分:0)

在linq之前的一个“老派”方法中,我们把所有的屁股从这种事情中解救出来。因为我在移动设备上没有编译(在移动设备上执行代码很难,所以你知道)。

private List<int> test()
{
    var intResults = new List<int>();
    var file = File.ReadLines("blah");
    foreach (var line in file)
    {
       var lineSplit = line.Split(
            new char[] { ' ', '\t', '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

         foreach (var item in lineSplit)
         {
             var result = 0;
             if (int.TryParse(item, out result))
                 intResults.Add(result); 
         }
    }
    return intResults;
}

我不认为这是答案,因为linq选项更优雅,但它只是展示了实现相同目标的其他方式:)

编辑:方法没有返回任何内容-_-