我有以下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 :(得分: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;