我创建了一个文本文件,其一些随机浮点数在743.6到1500.4之间。 我想出一种方法来读取文本文件(我已经这样做了)并包括一个数字范围:让说(743.6 <= x <= 800)并删除超出范围的数字,并最终将最终值存储在一个文本文件。
我设法编写了一些代码来读取文本文件,以便在编译时在文本文件中显示数字。现在我不知道该如何进一步发展。这是我的代码,可以运行编译。这段代码现在可以读取文本文件。
743.6
742.8
744.7
743.2
1000
1768.6
1750
1767
1780
1500
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ReadTextFile
{
class Program
{
static void Main(string[] args)
{
string filePath = "C:\\Users\\Student\\Desktop\\ConsoleApp1\\ConsoleApp1\\Data\\TextFile.txt"; // File Direcotry
List<string> lines = File.ReadAllLines(filePath).ToList();
foreach (string line in lines)
{
Console.WriteLine(line);
}
Console.ReadLine();
}
}
}
答案 0 :(得分:0)
您需要阅读所有行,并用空字符串替换最小值和最大值之间的所有值:
float min = 800.5F, max = 850.5F;
float currentValue;
var lines = File.ReadAllLines(usersPath);
var separator = ';'; // Change this according to which separator you're using between your values (if any)
foreach (var line in lines)
{
foreach (string word in line.Trim().Split(separator))
{
if (float.TryParse(word.Trim(), out currentValue))
{
if (currentValue < min || currentValue > max)
{
line.Replace(word, "");
}
}
}
}
File.WriteAllLines(usersPath, lines);
答案 1 :(得分:0)
这会将文件读取到内存中,进行解析,过滤,然后使用新数据覆盖现有文件。
File.WriteAllLines(filePath,
File.ReadAllLines(filePath)
.Select(x => double.Parse(x))
.Where(x => x >= 800.5 && x <= 850.5)
.Select(x => x.ToString()));
答案 2 :(得分:0)
这是我的解决方案,带有基本的错误检测功能,并且由于使用了正则表达式而具有一定的鲁棒性。 作为一个序言:使用正则表达式可能会非常昂贵,并且并非总是可行的方式。
在这种情况下,我认为它们还可以,因为您正在处理用户生成的输入(可能)。 可以通过预编译来优化正则表达式!
/*
using System;
using System.IO;
using System.Text.RegularExpressions;
*/
void ReadFile(string filePath) {
var fileInfo = default(FileInfo);
var separator = @"[;\s:,]"; // This is a simple RegEx, can be done otherwise. This allows for a little more robustness IMO
// VERY rudimentary error detection
if (string.IsNullOrEmpty(filePath))
throw new ArgumentNullException(nameof(filePath), "The path to the file must not be null or empty!");
try {
fileInfo = new FileInfo(filePath);
} catch {
throw new ArgumentException(nameof(filePath), "A valid path must be given!");
}
if (!fileInfo.Exists) {
throw new IOException(string.Format("The file {0} does not exist!", filePath));
}
// END VERY rudimentary error checking
var numberStrings = Regex.Split(File.ReadAllText(fileInfo.FullName), separator);
// numberStrings is now an array of strings
foreach (var numString in numberStrings) {
if (decimal.TryParse(numString, out var myDecimal)) {
// Do something w/ number
} else {
Debug.WriteLine("{0} is NaN!", numString);
}
}
}
这就是代码的作用(写在我头上,请不要只是对它进行C&P。请先对其进行测试):
首先,我们要定义正则表达式。这会匹配范围内(方括号之间)的任何字符。
然后我们执行非常基本的错误检查:
接下来,我们将整个文本文件读取到内存中(不是逐行!),并使用我们定义的正则表达式将整个字符串拆分为一个字符串数组。
最后,我们遍历字符串数组并将每个数字解析为浮点数(这就是您想要的。我个人将使用double或decimal以获得更高的精度。请参阅{{ 3}}。)。
如果字符串没有解析为浮点数,则可以相应地处理错误。否则,请使用变量myFloat进行操作。
编辑: 我以为我读过您想使用浮点数的信息。我的错;我将数据类型更改为十进制。