使用C#从.txt文件中过滤特定数字

时间:2019-01-16 23:47:39

标签: c# text autocad

我一直试图弄乱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#实现呢?

5 个答案:

答案 0 :(得分:0)

        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
        }

希望这对您有用。

答案 1 :(得分:0)

您可以使用File.ReadLines和LINQ来查询文件并拆分感兴趣的行,以选择尺寸。我不确定如果文件很大,它将如何执行,但是应该可以很好地工作。

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();

答案 2 :(得分:0)

您可以使用正则表达式。

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

答案 3 :(得分:0)

您可以使用Linq和Regex来实现。

712.75 
628.70 

OP中给定示例的输出

struct

答案 4 :(得分:0)

我对@AnuViswan发布的答案做了微小的更改,以获取所有条目:

using namespace