获取

2014-01-19 33 views
-1

我有以下StreamReader线通过的StreamReader的部分:获取

using (StreamReader sr = new StreamReader("TestFile.txt")) 
{ 
    while (!sr.EndOfStream) 
    { 
     String line = sr.ReadLine(); 
     if (line != null && line.Contains(":")) 
      Console.WriteLine(line.Split(':')[1]); 
    } 
} 

我想知道如何做的是:

我怎样才能提取此行的一部分吗?

111033 @@的Item1 @@ 21 @@ 0 @@ 37 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 1000

我想111033,21,37,1000,并把它放在一个文本框这样

textbox_1 = 111033 etc. 
+0

组合框行总是这样的格式? – JaredPar

+0

是的,我得到了大约3000行SameFormat – DaRkS

回答

0

我假设在字符(@)处的广告是将行分隔成列的分隔符。如果你需要的部分总是在同一列中,你就知道他们的索引。因此,通过在隔板分割线开始走的列你有兴趣:

string[] parts = line.Split('@'); 
textBox_1 = part[0]; // 111033 
textBox_2 = part[4]; // 21 
textbox_3 = part[8]; // 37 
... 

做这些线代表什么呢?既然我不知道,我只是以一个人的地址为例(这里可能不是这种情况,但这不重要)。

创建一个可以存储对象的类。 (为了简单起见,我没有包括有效性测试)。

public class Address 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string City { get; set; } 

    public static Addess FromLine(string line) 
    { 
     var a = new Address(); 

     string[] parts = line.Split('@'); 

     a.ID = Int32.Parse(parts[0]); 
     a.FirstName = parts[3]; 
     a.LastName = parts[4]; 
     a.City = parts[8]; 
     return a; 
    } 

    public override string ToString() 
    { 
     return String.Format("{0} {1}, {3}", FirstName, LastName, City); 
    } 
} 

现在您可以将这些对象添加到组合框中。它们将根据ToString方法自动显示。你可以用

Address a = (Address)myComboBox.SelectedItem; 

获得所选择的项目可以填补这样

var items = new List<Address>(); 
while (!sr.EndOfStream) { 
    string line = sr.ReadLine(); 
    if (line != null && line.Contains("@")) { 
     Address a = Address.FromLine(line); 
     items.Add(a); 
    } 
} 
myComboBox.DataSource = items; 
+0

为我工作,但不是所有的行,并没有在同一顺序我可以在组合框中输入零件[0],并显示整行,行开始与combobox.text? – DaRkS

+0

关键问题是要显示的零件的选择标准是什么?他们总是处于相同的位置(在同一列中),还是总是希望显示不是零的数字,而与他们的位置无关?请明确说明! –

+0

我想这部分的 0int,1string,4,37 0也许在组合框中,并在文本框中显示1,4,37基于Combobox Coz i有线充满@@很难找到任何东西 ex:5060720 @ @ @@眼镜蛇0 @@ 0 @@ 140 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 3000 @@ 3000 @@ 0 @@ 0 @@ 0 @@ 0 @@ 0 @@ 1 @@ 1 @@ 0 @@ 0 @@ 0 @@ 601 @@ 4 @@ 0 @@ 1 @@ 0 @@ 0 @@ 1 @@ 800 @@ 0 @@ 0 @@ 1 @@ 9亿@@ 0 @@ 0 @@ 1000 @@ 0 @@ 0 @@ 0 @@ 0 @@ 300 @@ 0 @@ 0 @@ 0 @@ 0 @@ @ 0 @ 0 @@ 0 @@灵魂@@文字在这里@@ 9 @@ 6 @@ 30 @@ 0 @@ 12000 @@ 500 @@ – DaRkS

0
using (StreamReader sr = new StreamReader("TestFile.txt")) 
      { 
       while (!sr.EndOfStream) 
       { 
        String line = sr.ReadLine(); 
        if (line != null && line.Contains(":")) 
        { 
         line.Split(new [] { '@' }, StringSplitOptions.RemoveEmptyEntries) 
           .Where(x => !x.Any(c => char.IsLetter(c))) 
           .ToList() 
           .ForEach((ln) => Console.WriteLine(ln)); 

        } 
       } 
      } 

这将写入所有号码的console.Also你可以把它缩短这样的:

line.Split(new [] { '@' }, StringSplitOptions.RemoveEmptyEntries) 
    .Where(x => !x.Any(char.IsLetter)) 
    .ToList() 
    .ForEach(Console.WriteLine);