为了账号安全,请及时绑定邮箱和手机立即绑定

将制表符分隔的值从剪贴板复制到 datagridview

将制表符分隔的值从剪贴板复制到 datagridview

C#
月关宝盒 2021-10-24 16:56:34
当我从应用程序复制剪贴板中的原始数据时,它看起来像这样Trade InfoNE62 -- NE62Symbol      Side        Quantity        Avg Price       ClientAcct      ESU8        BUY     100     2809.2500       35199008        FLT.V       SELL        15,000      1.7040      tB324aV     TRST.TO     SELL        4,850       7.1500      tB324aVV        YGR.TO      SELL        5,200       5.3806      tB324aV string s = Clipboard.GetText();output(s) >> Trade Info\r\n\r\nNE62 -- NE62\r\n\r\nSymbol\t\tSide\t\tQuantity\t\tAvg Price\t\tClientAcct\t\t\r\n\r\nESU8\t\tBUY\t\t100\t\t2809.2500\t\t35199008\t\t\r\nFLT.V\t\tSELL\t\t15,000\t\t1.7040\t\tPRBCOAV\t\t\r\nTRST.TO\t\tSELL\t\t4,850\t\t7.1500\t\tPRBCOAV\t\t\r\nYGR.TO\t\tSELL\t\t5,200\t\t5.3806\t\tPRBCOAV\t\t\r\n"我使用正则表达式删除了第一行(Trade Info NE62 -- NE62),因为它对于每个用户都是可变的。然后我使用以下字符串动态分配列。每个用户都有可变长度的列,具体取决于他们需要什么信息string columnarray = s.Substring(0, s.LastIndexOf("\t\t\r\n\r\n"));output(columnarray) >> Symbol\t\tSide\t\tQuantity\t\tAvg Price\t\tClientAcct\t\t\r\n\rstring[] ColArray = Regex.Split(columnarray, "\t\t");foreach (string b in ColArray){    d.Columns.Add(b);}剩余的字符串存储在另一个变量中,以填充到数据表中,这是我无法弄清楚的。以下是我需要填充到数据表中的剩余值。
查看完整描述

3 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

所以我设计了一个似乎效果很好的解决方案。我使用解析器来解析字符串并在格式化字符串后添加到数据表中,以便解析友好。只需在此处发布,以防其他人将来需要帮助。


string[] ColArray = Regex.Split(columnarray, "\t\t");

string[] DatArray = Regex.Split(dataArray, "\t\t");

DatArray = DatArray.Where(x => !string.IsNullOrEmpty(x)).ToArray();


//Join all the split string using (+)

string datstring = string.Join("+", DatArray);


//Remove the additional (+) symbol infront of the \r\n\ to match array length        

datstring = Regex.Replace(datstring, @"[+\\r\\]\B", "");

DataTable d = new DataTable();


foreach (string b in ColArray{

    d.Columns.Add(b);                

    }

// use a parser to parse through the string and add the items to your datatable

using (var reader = new StringReader(datstring))

    {

        TextFieldParser parser = new TextFieldParser(reader)

        { HasFieldsEnclosedInQuotes = false, Delimiters = new string[] { "+" } };

        while(!parser.EndOfData)

        {

            var drow = d.NewRow();

            drow.ItemArray = parser.ReadFields();

            d.Rows.Add(drow);

        }

     }

DGV.Datasource = d;


查看完整回答
反对 回复 2021-10-24
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信