通过Streamreader获取部分线路

时间:2014-01-19 16:53:44

标签: c#

我有以下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.

2 个答案:

答案 0 :(得分: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) );

                    }
                }
            }

这会将所有数字写入控制台。也可以将它缩短为:

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

答案 1 :(得分: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;