【发布时间】:2017-11-16 08:05:31
【问题描述】:
我正在将一些数据从 SAP GUI 屏幕复制到剪贴板。当我将它粘贴到记事本或任何文本编辑器上时,它如下所示。
我只想要剪贴板文本表字符串中的 3 个字段[创建者、采购订单日期、文档]。
目前我正在设法读取如下数据。
public class DocData
{
public string CreatedBy { get; set; }
public string PODate { get; set; }
public string Document { get; set; }
}
private void GetDocumentData()
{
var clipboardData = Clipboard.GetText(TextDataFormat.Text);
List<DocData> docDataList = new List<DocData>();
for (int separatorCounter = 20; separatorCounter < clipboardData.Count(); separatorCounter = separatorCounter + 13)
{
DocData docData = new DocData();
int index = GetNthIndex(clipboardData, '|', separatorCounter);
if (index != -1)
{
var dataString = clipboardData.Substring(index + 1);
var sepIndex = dataString.IndexOf('|');
if (sepIndex != -1)
{
docData.CreatedBy = dataString.Substring(0, sepIndex).Trim();
}
}
index = GetNthIndex(clipboardData, '|', separatorCounter + 2);
if (index != -1)
{
var dataString = clipboardData.Substring(index + 1);
var sepIndex = dataString.IndexOf('|');
if (sepIndex != -1)
{
docData.PODate = dataString.Substring(0, sepIndex).Trim();
}
}
index = GetNthIndex(clipboardData, '|', separatorCounter + 4);
if (index != -1)
{
var dataString = clipboardData.Substring(index + 1);
var sepIndex = dataString.IndexOf('|');
if (sepIndex != -1)
{
docData.Document = dataString.Substring(0, sepIndex).Trim();
}
}
if (!string.IsNullOrEmpty(docData.Document))
{
docDataList.Add(docData);
}
}
}
任何人都可以提出更好的方法来做到这一点而无需过多地操作字符串。
【问题讨论】:
-
Split怎么样 -
用子程序代替复制/粘贴怎么样?
-
String.Split(将为您提供每一行的数组)和 .Trim(清除各个字段中的空白)应该可以很好地为您完成大部分繁重的工作!
-
更清楚一点:使用 CR 或 CRLF 作为分隔符(取决于您的文件行终止符)的剪贴板文本上的 String.Split 将为您提供单独的行,然后在这些行上使用 String.Split “|” (这将为您提供每一行的数组)和 .Trim(清除各个字段中的空白)。
-
@MohitShrivastava Split 完美。非常感谢您的指导。