2013-05-06 223 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] : ""; 
    }