C# 如何将字符串数据转换为datatable?
我需要将字符串数据转换为datatable 在一个字符串中,我得到了整个数据C# 如何将字符串数据转换为datatable?,c#,parsing,datatable,C#,Parsing,Datatable,我需要将字符串数据转换为datatable 在一个字符串中,我得到了整个数据 sffa S.No Name Address Company ---- ---- ------- ------- 1 xxx yyy zzz 2 vvv nnn dsd 下面是获取上述数据的代码 public string Read() { if (!tcpSocket.Connected) return null;
sffa
S.No Name Address Company
---- ---- ------- -------
1 xxx yyy zzz
2 vvv nnn dsd
下面是获取上述数据的代码
public string Read()
{
if (!tcpSocket.Connected) return null;
StringBuilder sb=new StringBuilder();
do
{
ParseTelnet(sb);
System.Threading.Thread.Sleep(TimeOutMs);
} while (tcpSocket.Available > 0);
var strResult=sb.ToString();
return strResult;
}
我想要S.No,Name,Address,Company作为列,这些值应该在相应的列中
请提前提供帮助和感谢。假定选项卡是分隔符:
IEnumerable<string[]> data = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Select(line => line.Split('\t'))
.Where(fields => fields.Length == 4)
.ToList();
DataTable table = new DataTable();
foreach(string col in data.First())
table.Columns.Add(col);
foreach (string[] fields in data.Skip(1))
table.Rows.Add(fields);
IEnumerable data=text.Split(新[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries)
.Select(line=>line.Split('\t'))
.Where(fields=>fields.Length==4)
.ToList();
DataTable=新的DataTable();
foreach(data.First()中的字符串列)
表.列.添加(列);
foreach(data.Skip(1)中的字符串[]字段)
table.Rows.Add(字段);
如果分隔符是一个或多个空格,且值本身不能包含空格:
IEnumerable<string[]> data = text.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries)
.Select(line => line.Trim().Split(new char[]{}, StringSplitOptions.RemoveEmptyEntries))
.Where(fields => fields.Length == 4)
.ToList();
IEnumerable data=text.Split(新[]{Environment.NewLine},StringSplitOptions.RemoveEmptyEntries)
.Select(line=>line.Trim().Split(新字符[]{},StringSplitOptions.RemoveEmptyEntries))
.Where(fields=>fields.Length==4)
.ToList();
string data=@“S.No Name地址公司
---- ---- ------- -------
1 xxx yyy zzz
2 vvv nnn dsd”;
var lines=data.Split(new[]{Environment.NewLine},StringSplitOptions.None);
变量长度=行[1]+“”//我们会认为破折号是列标记。
var insideColumn=假;
int start=0;
var columns=新列表();
for(int i=0;i
请共享一个字符串,其中包含所有数据。分隔符是什么?多个空格还是一个选项卡?请查看更新的question@Raj:那么分隔符是什么?@Raj是数据的“sffa”部分吗?这是什么意思?谢谢你的及时回复。我已经尝试了您的代码,但在数据变量中我看不到任何值。正在调试模式下检查Datacount=0。请给出建议。我希望S.No、Name、Address、Company作为列,并且这些值应该在相应的列中。@Ra:您还没有提到分隔符。它似乎不是制表符。那个么它是什么呢?分隔符是列中每个值之间的空格。@raw:我非常怀疑它。如果值本身包含空格怎么办?然而,编辑了我的答案。
string data = @"S.No Name Address Company
---- ---- ------- -------
1 xxx yyy zzz
2 vvv nnn dsd";
var lines = data.Split(new[] {Environment.NewLine}, StringSplitOptions.None);
var lengths = lines[1] + " "; //We'll think the dashes are the column markers.
var insideColumn = false;
int start = 0;
var columns = new List<Tuple<int, int>>();
for (int i = 0; i < lengths.Length; i++) {
if (insideColumn && lengths[i] == ' ') {
insideColumn = false;
columns.Add(Tuple.Create(start, i));
}
if (!insideColumn && lengths[i] == '-') {
insideColumn = true;
start = i;
}
}
var headers = new List<string>(columns.Count);
for (int i = 0; i < columns.Count; i++) {
headers.Add(lines[0].Substring(columns[i].Item1, columns[i].Item2 - columns[i].Item1).Trim());
}
var table = new List<Dictionary<string,string>>();
for (int i = 2; i < lines.Length; i++) {
var record = new Dictionary<string, string>();
var line = lines[i].PadRight(lengths.Length);
for (int j = 0; j < columns.Count; j++) {
record[headers[j]] = line.Substring(columns[j].Item1, columns[j].Item2 - columns[j].Item1).Trim();
}
table.Add(record);
}