目前,我已经编写了代码,如果文本文件只包含非整数
,则会正确显示错误消息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整数和非整数的文件,但只是完全忽略非整数,只能使用整数。
我想通过结合我可以实现的两个代码,但显然不是这样。
实现这一目标的方法是什么?
答案 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选项更优雅,但它只是展示了实现相同目标的其他方式:)
编辑:方法没有返回任何内容-_-