使用 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);
        }