2013-05-06 225 views
-1

我需要從文本文件中提取一些數據並插入Excel表格中的列。我知道如何做到這一點,如果行和字符串的長度是已知的。從文本文件中提取數據

try 
{ 
    using (System.IO.StreamReader sr = new System.IO.StreamReader("test.txt") 
    { 
     string line; 
     while ((line = sr.ReadLine()) != null) 
     { 
      listSNR.Items.Add(line.Substring (78,4)); 
     } 
    } 
} 

但特定的文本文件是複雜的,並且不能提供起始索引或長度。但是該行的開始詞(PCPU01)是已知的。 如:PCPU01,T2716,0.00,0.01,0.00,0.00

輸出: T2716 0 0.01 0 0

在這種情況下,可以有人請讓我知道如何提取文本?

+2

您的輸出是***不是輸入的子字符串。這是怎麼回事? – spender 2013-05-06 10:50:39

+0

請僅顯示相關的代碼和註釋。你的問題是「如何解析'PCPU01,T2716,0.00,0.01,0.00,0.00'到'T2716 0 0.01 0 0'請給我看代碼」_「。這不是它的工作原理。您需要顯示輸入內容可能有所不同,您希望發生什麼以及您嘗試解析輸入的內容。 – CodeCaster 2013-05-06 10:52:13

+0

如果你有行,你可以找到起始詞的索引('IndexOf'方法),然後讀取所需的字符數(或者如果你不知道長度 - 你需要知道模式結束和計算所需的長度)。你也可以使用'regex'es,但它會變得更加複雜。嘗試一些這些想法,如果您有任何問題,請更新問題。向我們提供示例輸入和預期輸出以幫助我們獲得工作解決方案 – Pako 2013-05-06 10:52:32

回答

2
using(System.IO.StreamReader sr = new System.IO.StreamReader("test.txt")) 
{ 
    string line; 
    while((line = sr.ReadLine()) != null) 
    { 
     string[] split = line.Split(','); 
     //... 
    } 
} 

split[0]將返回"PCPU01"split[1]"T2716"等。

+0

@lllidan感謝您的答案。這對我很有用 – 2013-05-07 04:40:14

0

我希望這會有所幫助。您可能需要根據自己的需求調整它。但是這是一個更高級別的代碼,可以讓您從記事本中提取數據。

DialogResult result = openFileDialog.ShowDialog(); 

      Collection<Info> _infoCollection = new Collection<Info>(); 
      Collection<string> listOfSubDomains = new Collection<string>(); 

      string[] row; 
      string line; 

      // READ THE FILE AND STORE IT IN INFO OBJECT AND STORE TAHT INFO OBJECT IN COLLECTION 
      try 
      { 
       using (StreamReader reader = new StreamReader(openFileDialog.FileName)) 
       { 
        while((line = reader.ReadLine()) != null) 
        { 
         Info _info = new Info(); 
         row = line.Split(' '); 

         _info.FirstName = row[0]; 
         _info.LastName = row[1]; 
         _info.Email = row[2]; 
         _info.Id = Convert.ToInt32(row[3]); 

         _infoCollection.Add(_info); 

        } 
       } 

catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 
1

您可以將一個字符串拆分爲由給定字符分隔的字符串數組。這樣,您可以用逗號分隔源字符串,並使用生成的字符串構建輸出。例如:

string source = "PCPU01,T2716,0.00,0.01,0.00,0.00"; 
string[] parts = source.Split(','); 
StringBuilder result = new StringBuilder(); 

result.Append(parts[1]); // The second element in the array, i.e. T2716 
result.Append(" "); 
result.Append(parts[2]); // 0.00 
... // And so on... 
return result.ToString() // return a string, not a StringBuilder 
0

感謝您的答案。我想要的是識別文本文件中的特定行,並將行分成多列。所以我可以通過調用函數getline的方法來做到這一點:

string line15=GetLine(@"test.txt",15); 
public string GetLine(string fileName, int line) 
    { 
     using (System.IO.StreamReader ssr = new System.IO.StreamReader("test.txt")) 
     //using (var ssr = new StreamReader("test.txt")) 
     { 
      for (int i = 1; i < line; i++) 
       ssr.ReadLine(); 
      return ssr.ReadLine(); 
     } 
    } 

然後我用分隔符(,)

0

這是我在C#的方式分裂這一行。它需要一個字符串輸入(你可以從一個文本文件中獲得)以及一個你想要獲得哪一行的int。然後它將給定的分隔符字符串中的字符串分開,然後再讀出列表。如果給定行號低於創建列表的計數,則返回該條目。

public string GetLine(string multiline,int line) 
    { 
     List<string> lines = new List<string>(); 
     lines = multiline.Split('\n').ToList<string>(); 

     return lines.Count >= line ? lines[line] : ""; 
    }