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

当我从应用程序复制剪贴板中的原始数据时,它看起来像这样


Trade Info


NE62 -- NE62


Symbol      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\r

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

foreach (string b in ColArray)

{

    d.Columns.Add(b);

}

剩余的字符串存储在另一个变量中,以填充到数据表中,这是我无法弄清楚的。以下是我需要填充到数据表中的剩余值。


月关宝盒
浏览 159回答 3
3回答

BIG阳

所以我设计了一个似乎效果很好的解决方案。我使用解析器来解析字符串并在格式化字符串后添加到数据表中,以便解析友好。只需在此处发布,以防其他人将来需要帮助。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 datatableusing (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;
打开App,查看更多内容
随时随地看视频慕课网APP