我试图找到我在C#中阅读的.txt中的整数并将它们分开,但我尝试过的所有东西都没有用。有小费吗? 这个txt的值如下:
但他们每秒都会改变
码
int value;
string text = System.IO.File.ReadAllText(@"N:\doc\mytext.txt");
if (int.TryParse(text, out value))
{
value/10000;
}
Console.ForegroundColor = ConsoleColor.Red;
System.Console.WriteLine(text);
感谢
答案 0 :(得分:1)
您的代码需要执行以下操作:
对于这个答案,我假设您对第1步和第5步的实施感到满意,因此我将只讨论第2,3和4步。
第2步:找到目标值
要在输入中查找目标值,您必须先定义它们的内容。根据您的问题和后续评论,您的输入字符串如下所示,目标值以粗体显示:
queue1 6000 ,queue2 54888 ,queue3 1
这些是整数值,它们作为离散词嵌入文本中。
找到它们的最简单方法是使用正则表达式。让你的案件变得棘手的一件事是你的文本中嵌入了你不想要的数字(例如在“queue1”中)。幸运的是,.NET regular expressions有一些快捷方式,可以很容易地编写必要的表达式:
var re = new Regex(@"\b\d+\b");
\ b 匹配字边界
\ d 匹配任何十进制数字
+ 匹配前面一个或多个字符
因此,这个正则表达式将匹配不同的整数,如“6000”,同时忽略其他单词中嵌入的数字,如“queue1”。
第3步 - 转换为所需结果
此步骤有几个子步骤
要将字符串解析为数字,您使用int.TryParse
,这是一种方法。由于正则表达式只能找到有效的整数,我们可以使用Parse
方法。
您的计算除以10000,并且您希望结果为浮点数。如果使用10000
作为文字,结果将是一个整数,因此您需要做一些事情以确保结果是浮点数。一种简单的方法是使用10000.0
作为您的文字,如下所示:
int value = 6000;
var result = value / 10000.0; // typeof(result) == double
格式化输出有多种选择。最简单的出发点是使用ToString
方法。默认行为通常足够好,但如果要指定格式,可以使用the variant that takes a format string。
因此,解析,计算和格式化的结果代码如下:
(Int64.Parse(value) / 10000.0).ToString()
第4步:替换输入中的目标值
由于正则表达式对于查找事物很有用,因此它们也可用于替换事物。在您的情况下,替换需要一些可能不由直接正则表达式处理的逻辑(即,步骤2)。 .NET正则表达式Replace
方法仅为此方案提供overload with a MatchEvaluator
parameter。
正则表达式找到的每个匹配都将传递给匹配评估程序,该评估程序负责返回要用作替换的字符串。为简单起见,您可以使用lambda表达式来提供匹配评估程序。
所以,当你把它们放在一起时,你会得到这样的东西:
string text = @"queue1 6000, queue2 54888, queue3 1";
var re = new Regex(@"\b\d+\b");
string output = re.Replace(text, m => (Int64.Parse(m.Value) / 10000.0).ToString());
// output == "queue1 0.6, queue2 5.4888, queue3 0.0001"
答案 1 :(得分:0)
您可以使用正则表达式:
Regex.Matches(text, @"(?<=^|\s)[0-9]+(?=$|\s)").Cast<Match>().Select(m => int.Parse(m.Value));
首先,选择字符串中与整数相似的所有部分,然后将生成的字符串转换为整数。
(?=$|\s)
是零宽度前瞻性断言。它会在匹配结束时检查是否有空格或字符串结尾。
(?<=^|\s)
是一个零宽度正向背后断言。它会在匹配开始时检查是否有空格或字符串的开头。
您可以找到关于here的文档。
这些是必要的,因此匹配不包括空格。如果它们是,那么如果只用一个空格分隔,你只能得到两个整数中的一个。
答案 2 :(得分:0)
您可以使用Regular expressions获取字符串中的所有数字。该字符串可以是您从System.IO.File.ReadAlltext
获得的文件的内容(例如)。
您可以使用"[0-9]+"
获取所有整数,或"[0-9]+(.[0-9]+)?"
获取整数和浮点数。
var pattern = "[0-9]" // or "[0-9]+(.[0-9]+)?"
int[] integers = System.Text.RegularExpressions.Regex.Matches(text, pattern).Cast<Match>().Select(m => int.Parse(m.Value)).ToArray();
// for floats
//float[] floats = System.Text.RegularExpressions.Regex.Matches(text, pattern).Cast<Match>().Select(m => float.Parse(m.Value)).ToArray();
在正则表达式中,您可以定义一个模式,然后在字符串中搜索回答该模式的标记。如果我们需要搜索整数,那么我们可以使用"[0-9]+"
模式。此模式将搜索0-9(包括)与至少一个字符(一个数字 - &#39; +&#39;确保)之间的所有标记。
如果我们需要搜索浮点数,那么我们需要使用由整数模式("[0-9]+(.[0-9]+)?"
)组成的"[0-9]+"
以及可选浮点("(.[0-9]+)?"
)。 &#39;?&#39; sign表示此令牌可以存在零次或一次。
您可以找到有关正则表达式和模式here
的更多信息