C# 如何读取特定位置文本文件中的所有行并使用数据?
我需要做的是:C# 如何读取特定位置文本文件中的所有行并使用数据?,c#,.net,winforms,C#,.net,Winforms,我需要做的是: 每次行以ComboBox开头,然后仅从行中获取ComboBox名称,例如cmbxOption 由于我在我的表单1设计器中已经有了这个组合框,我需要确定CMBX选项的开始和结束位置,以及下一个组合框开始CMBX存储的时间 要获取当前组合框的所有行,例如,这些行属于cmbxOption: 类Win32_1394控制器 类Win32_1394控制器设备 要从每一行创建一个键和值,例如从该行创建: 类Win32_1394控制器 然后键将是Win32_1394; 1394Controlle
ComboBox
开头,然后仅从行中获取ComboBox
名称,例如cmbxOption
表单1
设计器中已经有了这个组合框
,我需要确定CMBX选项
的开始和结束位置,以及下一个组合框
开始CMBX存储
的时间
cmbxOption
:
类Win32_1394控制器
类Win32_1394控制器设备1394Controller
然后第二行键是Win32_1394; Controller Device和value only1394Controller Device
1394Controller
添加到正确的归属组合框中组合框中选择时,例如在cmbxOption
中选择项目1394Controller
时,它将像我选择的Win32\u 1394Controller
一样
ComboBox Name cmbxOption
Classes Win32_1394Controller
Classes Win32_1394ControllerDevice
ComboBox Name cmbxStorage
Classes Win32_LogicalFileSecuritySetting
Classes Win32_TapeDrive
需要时,SelectedItem
将是Win32\u 1394Controller
,但用户将在cmbx选项中看到1394Controller
,而不使用Win32\u
这是InsertInfo方法的开始
private void cmbxOption_SelectedIndexChanged(object sender, EventArgs e)
{
InsertInfo(cmbxOption.SelectedItem.ToString(), reflstDisplayHardware, chkHardware.Checked);
}
这就是为什么我需要的密钥将是Win32_1394; Controller,但我希望用户在组合框中只看到1394Controller
,而没有Win32_
,下面是一些快速丑陋的代码:
private void InsertInfo(string Key, ref ListView lst, bool DontInsertNull)
{
以及它产生的输出:
var lines = @"ComboBox Name cmbxOption
Classes Win32_1394Controller
Classes Win32_1394ControllerDevice
ComboBox Name cmbxStorage
Classes Win32_LogicalFileSecuritySetting
Classes Win32_TapeDrive".Split('\n').Select(l => l.TrimEnd('\r')).ToArray();
lines.GroupByComboboxName().ForEach(g =>
{
Console.WriteLine(g.Key + ":");
g.ForEach(l => Console.WriteLine(" " + l));
});
这应该能让你走了。太好了。到目前为止,您尝试了什么?您的具体问题是什么?stackoverflow并不是免费为您完成工作,而是帮助程序员解决特定问题。在这里添加您的努力,以表明您已经尝试了一些东西(至少)。这个地方不是雇个人来完成你的工作的。
class Group<T> : List<T>, IGrouping<T, T>
{
public T Key { get; private set; }
public Group(T key)
{
Key = key;
}
}
static class Extensions
{
public static IEnumerable<IGrouping<string, string>> GroupByComboboxName(this IEnumerable<string> lines)
{
Group<string> group = null;
foreach (var line in lines)
{
if (string.IsNullOrWhiteSpace(line)) continue;
var parts = line.Split(' ');
if (parts.Length == 3 && parts[0] == "ComboBox" && parts[1] == "Name")
{
if (group != null) yield return group;
group = new Group<string>(parts[2]);
}
else if (group != null)
{
group.Add(line);
}
}
if (group != null) yield return group;
}
}
var lines = @"ComboBox Name cmbxOption
Classes Win32_1394Controller
Classes Win32_1394ControllerDevice
ComboBox Name cmbxStorage
Classes Win32_LogicalFileSecuritySetting
Classes Win32_TapeDrive".Split('\n').Select(l => l.TrimEnd('\r')).ToArray();
lines.GroupByComboboxName().ForEach(g =>
{
Console.WriteLine(g.Key + ":");
g.ForEach(l => Console.WriteLine(" " + l));
});
cmbxOption:
Classes Win32_1394Controller
Classes Win32_1394ControllerDevice
cmbxStorage:
Classes Win32_LogicalFileSecuritySetting
Classes Win32_TapeDrive