2016-02-29 54 views
2

我有一个读取.HRM文件的程序,我希望它通过文本文件搜索并在任何状态后检索整数值。我有阅读文本文件的其他东西,我只是无法弄清楚这一个。如下例如:在文本文件中找到字符串后保存一个整数值

if (line.Contains("Version=")) 
{ 
    //Get the integer after 'Version=' 
} 

我不太清楚如何得到这个整数值并存储它。

的HRM文件读取如下:

[Params] 
Version=106 
Monitor=34 
SMode=111111100 
Date=20130205 
StartTime=15:46:20.0 
Length=01:06:18.9 
Interval=1 
Upper1=0 
Lower1=0 
Upper2=0 
Lower2=0 
Upper3=180 
Lower3=170 
Timer1=00:00:00.0 
Timer2=00:00:00.0 
+1

嗯,我想将其更改为'StartsWith'第一......未来,你有两个步骤考虑:a)在“=”之后获得文本; b)将一个字符串转换为一个整数。您遇到哪些问题? –

+0

可能的重复:[最简单的可能的键/值对文件解析在.NET中](http://stackoverflow.com/a/284881/1260204) – Igor

回答

4

之后你会发现这一行包含Version=

var number = int.Parse(line.Split('=')[1]); 
+1

这将试图解析“版本”,并会导致运行时错误 – Ben

+0

@Ben不,第一个索引是拆分字符串中的第二项,而不是第一个。 – juharr

+0

'var'太过分了.. – Neijwiert

1
var versionNumber = int.Parse(line.Replace("Version=", string.Empty)); 

或者你可以做正则表达式等。

+0

我不认为这会是一个好主意'Version = 1Version = 2'解析,就好像它真的是'Version = 12'。 –

+2

只有一个参数的'string.Replace'没有重载。我认为你的意思是'line.Replace(“Version =”,string.Empty)' – juharr

+0

我的不好! @Jon Skeet我不明白你在说什么:/ –

2

怎么样

int Version = int.Parse(line.Split('=')[1]); 
0

你可以使用字符串方法IndexOfSubstring,例如与此LINQ查询:

IEnumerable<String> versions = 
    from line in File.ReadAllLines(@"filename.HRM") // go through all the lines 
    let index = line.IndexOf("Version=") // returns -1 if the line doesn't contain "Version=" 
    where index >= 0 // return also those which contain it 
    select line.Substring(index + "Version=".Length); // return just the version after the '=' sign 

foreach (string version in versions) 
    Console.WriteLine(version); 

如果你期望只有一个你coul d还使用string version = versions.FirstOrDefault();

如果要将其转换为int请使用int.Parse

0

如果你希望能够提取刚刚从任何字符串的数字,你这样做:

int versionNumber = int.Parse(Regex.Match(line, @"\d+").Value); 
相关问题