2016-02-29 47 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); 
相關問題