使用 C# 从 .txt 文件中过滤特定数字
Filtering specific numbers from a .txt file with C#
我一直在尝试弄乱 AutoCAD LT 命令行,希望将它与 C# 程序链接起来。我专注于命令行,因为在为 LT 版本编码时存在严格的限制。在我的探索中,我想出了如何将命令记录到日志文件中(另存为 .txt 文件)。
日志文件:
Command: _dimlinear
Specify first extension line origin or select object:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 712.75
Command: DIMLINEAR
Specify first extension line origin or <select object>:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 628.70
我试图只提取以 "Dimension text = " 开头的行中的数字。我如何使用 C# 实现此目的?
FileInfo fi = new FileInfo("FILE LOCATION");
StreamReader reader = new StreamReader( fi.ToString() );
String Line = "";
while ( ( Line = reader.ReadLine() ) != null )
{
if ( !Line.Contains("Dimension text") {
continue;
}
String Property = Line.Split( '=' )[0];
String Value = Line.Substring( Property.Length + 1, Line.Length - Property.Length - 1 );
Console.WriteLine( Value ); // This line will print value of Dimension text
}
希望这对你有用。
您可以使用 File.ReadLines 和 LINQ 查询文件并将您感兴趣的行拆分为 select 维度。如果文件很大,我不确定它会如何执行,但它应该工作得很好。
var logFile = File.ReadLines("your_file_path")
var dimensions = (from entry in logFile
where entry.StartsWith("Dimension text")
let parts = entry.Split(' ')
select decimal.Parse(parts.Last())).ToList();
您可以使用正则表达式。
var input = @"Command: _dimlinear
Specify first extension line origin or select object:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 712.75
Command: DIMLINEAR
Specify first extension line origin or <select object>:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 628.70
Dimension text = 628";
var regex = new Regex( @"Dimension text = (\d+(\.\d*)?)" );
foreach( Match match in regex.Matches( input ) ) {
var num = decimal.Parse( match.Groups[ 1 ].Value );
Console.WriteLine( "Num: " + num );
}
您可以使用 Linq 和 Regex 来完成。
var array = str.Split(new []{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
var regex = new Regex(@"(Dimension)\s+(text)\s+(=)\s+(?<Value>([+-]?(\d*\.)?\d+)+)",RegexOptions.Compiled);
var resultArray = from entry in array
let match = regex.Match(entry)
where match.Success
select decimal.Parse(match.Groups["Value"].Value);
OP
中给定示例的输出
712.75
628.70
我对@AnuViswan 发布的答案进行了微小的更改,以获取每个条目:
string str = richTextBox1.Text;
var array = str.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var regex = new Regex(@"(?<Value>([+-]?(\d*\.)?\d+)+)", RegexOptions.Compiled);
MatchCollection matches = regex.Matches(str);
foreach (Match la in matches)
{
Console.writeLine(la);
}
我一直在尝试弄乱 AutoCAD LT 命令行,希望将它与 C# 程序链接起来。我专注于命令行,因为在为 LT 版本编码时存在严格的限制。在我的探索中,我想出了如何将命令记录到日志文件中(另存为 .txt 文件)。
日志文件:
Command: _dimlinear
Specify first extension line origin or select object:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 712.75
Command: DIMLINEAR
Specify first extension line origin or <select object>:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 628.70
我试图只提取以 "Dimension text = " 开头的行中的数字。我如何使用 C# 实现此目的?
FileInfo fi = new FileInfo("FILE LOCATION");
StreamReader reader = new StreamReader( fi.ToString() );
String Line = "";
while ( ( Line = reader.ReadLine() ) != null )
{
if ( !Line.Contains("Dimension text") {
continue;
}
String Property = Line.Split( '=' )[0];
String Value = Line.Substring( Property.Length + 1, Line.Length - Property.Length - 1 );
Console.WriteLine( Value ); // This line will print value of Dimension text
}
希望这对你有用。
您可以使用 File.ReadLines 和 LINQ 查询文件并将您感兴趣的行拆分为 select 维度。如果文件很大,我不确定它会如何执行,但它应该工作得很好。
var logFile = File.ReadLines("your_file_path")
var dimensions = (from entry in logFile
where entry.StartsWith("Dimension text")
let parts = entry.Split(' ')
select decimal.Parse(parts.Last())).ToList();
您可以使用正则表达式。
var input = @"Command: _dimlinear
Specify first extension line origin or select object:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 712.75
Command: DIMLINEAR
Specify first extension line origin or <select object>:
Specify second extension line origin:
Specify dimension line location or
[Mtext/Text/Angle/Horizontal/Vertical/Rotated]:
Dimension text = 628.70
Dimension text = 628";
var regex = new Regex( @"Dimension text = (\d+(\.\d*)?)" );
foreach( Match match in regex.Matches( input ) ) {
var num = decimal.Parse( match.Groups[ 1 ].Value );
Console.WriteLine( "Num: " + num );
}
您可以使用 Linq 和 Regex 来完成。
var array = str.Split(new []{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries);
var regex = new Regex(@"(Dimension)\s+(text)\s+(=)\s+(?<Value>([+-]?(\d*\.)?\d+)+)",RegexOptions.Compiled);
var resultArray = from entry in array
let match = regex.Match(entry)
where match.Success
select decimal.Parse(match.Groups["Value"].Value);
OP
中给定示例的输出712.75
628.70
我对@AnuViswan 发布的答案进行了微小的更改,以获取每个条目:
string str = richTextBox1.Text;
var array = str.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
var regex = new Regex(@"(?<Value>([+-]?(\d*\.)?\d+)+)", RegexOptions.Compiled);
MatchCollection matches = regex.Matches(str);
foreach (Match la in matches)
{
Console.writeLine(la);
}