2012-05-30 69 views
0

文件的值我有每個包含存儲這樣RowKey值:如何可以解析出現一些地方在使用C#

data-RowKey=029 

這在每個文件中只出現一次。有什麼方法可以用C#函數獲取數字,或者我必須自己編寫某種選擇。我有一位建議linq的隊友,但我不確定這是否可以用於字符串,我不知道如何使用它。

更新:

對不起,我改變了這種從文件的字符串。

+0

你知道這樣的值總是要上? –

回答

1

假設它僅在存在一次一個文件,我甚至會拋出一個異常,否則:

String rowKey = null; 
try 
{ 
    rowKey = File.ReadLines(path) 
       .Where(l => l.IndexOf("data-RowKey=") > -1) 
       .Select(l => l.Substring(12 + l.IndexOf("data-RowKey="))) 
       .Single(); 
} 
catch (InvalidOperationException) { 
    // you might want to log this exception instead 
    throw; 
} 

編輯:用繩子簡單的方法,以第一次出現這始終是一個長度爲3:

rowKey = text.Substring(12 + text.IndexOf("data-RowKey="), 3); 
+0

如果它在字符串而不是文件中,我怎麼能這樣做? – Alan2

+0

@Gemma:編輯我的答案。 –

2

Linq在這裏並沒有真正幫助你。使用正則表達式來提取數:

data-Rowkey=(\d+) 

更新:

Regex r = new Regex(@"data-Rowkey=(\d+)"); 

string abc = //; 
Match match = r.Match(abc); 
if (match.Success) 
{ 
    string rowKey = match.Groups[1].Value; 
} 

代碼:

public string ExtractRowKey(string filePath) 
{ 
    Regex r = new Regex(@"data-Rowkey=(\d+)"); 

    using (StreamReader reader = new StreamReader(filePath)) 
    { 
    string line; 
    while ((line = reader.ReadLine()) != null) 
    { 
     Match match = r.Match(line); 
     if (match.Success) return match.Groups[1].Value; 
    } 
    } 
} 
+0

對不起Stefan你能告訴我,如果它只是一個字符串變量,我該如何做到這一點?例如string abc =「..........」;是來源。 – Alan2

1
Regex g = new Regex(@"data-RowKey=(?<Value>\d+)"); 

using (StreamReader r = new StreamReader("myFile.txt")) 
{ 
    string line; 
    while ((line = r.ReadLine()) != null) 
    { 
     Match m = g.Match(line); 
     if (m.Success) 
     { 
      string v = m.Groups["Value"].Value; 
      // ... 
     } 
    } 
} 
+0

如果它不在文件中並且僅在變量中。我怎麼能這樣做? – Alan2

+0

string myVar =「」;匹配m = g.Match(myVar);如果(m.Succes){...} –

1

假設以下

  1. 文件必須包含的數據行(具有包括殼體精確匹配)
  2. 號長度爲3

以下是代碼片段

 var fileNames = Directory.GetFiles("rootDirPath"); 

     var tuples = new List<Tuple<String, int>>(); 
     foreach(String fileName in fileNames) 
     { 
      String fileData =File.ReadAllText(fileName) ; 
      int index = fileData.IndexOf("data-RowKey="); 
      if(index >=0) 
      { 
       String numberStr = fileData.Substring(index+12,3);// ASSUMING data-RowKey is always found, and number length is always 3 
       int number = 0; 
       int.TryParse(numberStr, out number); 
       tuples.Add(Tuple.Create(fileName, number)); 
      } 
     } 
相關問題