拆分列表<>每个项目包含逗号分隔的字符串,并将其格式化

本文关键字:字符串 格式化 分隔 列表 包含逗 项目 拆分 | 更新日期: 2023-09-27 18:10:19

我有一个像这样的简单类:

class QuickReport
{
    public string DeviceName { get; set; }
    public string GroupName { get; set; }
    public string PinName { get; set; }
    public override string ToString()
    {            
        return DeviceName + "," + GroupName + "," + PinName;
    }
}

之后,我用这个类创建了一个项目列表:

List<QuickReport> QR = new List<QuickReport>();

之后在我的程序中,它会被填满,当我把它保存在一个文本文件中时,它会像这个例子一样:

HBM'D1,GND,10
HBM'D1,GND,12
HBM'D1,NT_IOp,115
HBM'D1,NT_IOp,117
HBM'D2,GND,8
HBM'D2,NT_IOp,115
HBM'D2,NT_IOp,116

现在我想让一个函数以更可读的方式保存文本文件。这是格式化它的设备,组和pin。所以上面的例子会产生:

HBM'D1
GND: 10, 12
NT_IOp: 115, 117
HBM'D2
GND: 8
NT_IOp: 115, 116

你能帮忙给点主意吗?

谢谢!

拆分列表<>每个项目包含逗号分隔的字符串,并将其格式化

var query = QR.ToLookup(i=>i.DeviceName, i => new {i.GroupName, i.PinName})
              .Select(i=> 
                     new {DeviceName = i.Key, 
                          Groups = i.ToLookup(g=>g.GroupName, g=>g.PinName)});
        var sb = new StringBuilder();
        foreach ( var device in query)
        {
            sb.AppendLine(device.DeviceName);
            foreach ( var gr in device.Groups)
            {
               sb.Append(gr.Key + ": ");
               sb.Append(String.Join(", ", gr.ToArray()));
               sb.AppendLine();
            }
            sb.AppendLine();
        }
        var stringToWrite = sb.ToString();

据我所知,您有树形结构,其中设备有子组,组有子引脚。您可以创建这样的自定义类:

class Group
{
    string Name;
    //pins that belong to this group
    List<string> pins; 
}
class Device
{
    string Name;
    //groups that belong to this device
    List<Group> Groups;
}

然后将其收集到List<Device>并使用XML序列化对其进行序列化。

这还不完整,但应该可以让您继续。您仍然需要添加换行符,并删除尾随逗号等。

// Make your key the device name
var qrHash = new Dictionary<string, List<QuickReport>>();
// Populate your QR Dictionary here.
var output = new StringBuilder();
foreach (var keyValuePair in qrHash)
{
    output.Append(keyValuePair.Key);
    var gnd = new StringBuilder("GND: ");
    var nt = new StringBuilder("NT_IOp: ");
    foreach (var qr in keyValuePair.Value)
    {
        gnd.Append(qr.GroupName);
        nt.Append(qr.PinName);
    }
    output.Append(gnd);
    output.Append(nt);
}

如何使用XmlSerializer来序列化和反序列化您的类?这应该提供一些可读的输出。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

我能想到的最快的方法是在List<>上循环3次,每次检查一个单独的访问器,将其写入StringBuilder,然后从函数返回StringBuilder. tostring()。

或者,您可以使用3个stringbuilder来保存每个访问器类型,然后在返回时从函数中推入所有3个。