C# 用另一个数据表的标题行替换数据表的标题行
我有两个文本文件,一个标题和一个数据。标题包含第二行的标题行,即数据。我使用以下方法将它们加载到两个单独的数据表中:C# 用另一个数据表的标题行替换数据表的标题行,c#,.net,linq,datatable,C#,.net,Linq,Datatable,我有两个文本文件,一个标题和一个数据。标题包含第二行的标题行,即数据。我使用以下方法将它们加载到两个单独的数据表中: private static DataTable SwitchColumnHeadersInDatatable(string file) { char Delimiter = '#'; string whole_file = System.IO.File.ReadAllText(file);
private static DataTable SwitchColumnHeadersInDatatable(string file)
{
char Delimiter = '#';
string whole_file = System.IO.File.ReadAllText(file);
whole_file = whole_file.Replace('\n', '\r').Replace("\"", "");
string[] Lines = whole_file.Split(new char[] { '\r' },
StringSplitOptions.RemoveEmptyEntries);
List<string[]> FileRows = Lines.Select(line =>
line.Split(new[] { Delimiter }, StringSplitOptions.None)).ToList(); //StringSplitOptions.RemoveEmptyEntries --> To remove nulls
DataTable dt = new DataTable();
dt.Columns.AddRange(FileRows[0].Select(col => new DataColumn() { ColumnName = col }).ToArray());
FileRows.RemoveAt(0);
FileRows.ForEach(row => dt.Rows.Add(row));
return dt;
}
但找不到指定要粘贴到数据表中的行索引(0)的方法。(也不要认为这是最好的方法)。还需要在标题上指定一些需要删除的额外字段。(“title1”#“Title2”#“Title3”#“type1”#“type2”#“type3”->只需要删除标题和类型)将LINQ与
IEnumerable
一起使用,而不是处理内存中的所有内容。从一个文件读取标题,从另一个文件读取数据:
private static IEnumerable<string[]> ReadNonEmptyLinesUnquoteAndSplit(string file, char delimiter) =>
File.ReadLines(file).Where(l => !String.IsNullOrEmpty(l)).Select(l => l.Replace("\"", "").Split(delimiter));
private static DataTable LoadDataTable(string titlePath, string dataPath) {
char Delimiter = '#';
var TitleRow = ReadNonEmptyLinesUnquoteAndSplit(titlePath, Delimiter).Skip(1).First();
var DataRows = ReadNonEmptyLinesUnquoteAndSplit(dataPath, Delimiter).Skip(1);
DataTable dt = new DataTable();
dt.Columns.AddRange(TitleRow.Select(col => new DataColumn() { ColumnName = col }).ToArray());
foreach (var dataRow in DataRows)
dt.Rows.Add(dataRow);
return dt;
}
private static IEnumerable readNonemptylineUnquoteAndSplit(字符串文件,字符分隔符)=>
File.ReadLines(File).Where(l=>!String.IsNullOrEmpty(l)).Select(l=>l.Replace(“\”,”).Split(分隔符));
私有静态数据表LoadDataTable(字符串标题路径、字符串数据路径){
字符分隔符='#';
var TitleRow=readNonemptylineUnquoteAndSplit(titlePath,分隔符).Skip(1).First();
var DataRows=readNonemptylineUnquoteAndSplit(数据路径,分隔符)。跳过(1);
DataTable dt=新的DataTable();
AddRange(TitleRow.Select(col=>newdatacolumn(){ColumnName=col}).ToArray());
foreach(DataRows中的var dataRow)
dt.Rows.Add(数据行);
返回dt;
}
为什么有两个表?首先将标题读入表中。然后用第二个文件归档,并在索引1(不是零)处删除。感谢您的建议#jdweng。您能否给出一个关于“用第二个文件归档”的简短提示\示例" ? 恐怕我不明白什么是SwitchColumnHeadersInDatatable
与LoadTextInDataTable
?你能重新写“现在我想替换”吗?这对我来说似乎是错误的,或者可能是倒退的。更改了方法名称(是相同的),然后重新写NetMage的那个部分。谢谢
private static IEnumerable<string[]> ReadNonEmptyLinesUnquoteAndSplit(string file, char delimiter) =>
File.ReadLines(file).Where(l => !String.IsNullOrEmpty(l)).Select(l => l.Replace("\"", "").Split(delimiter));
private static DataTable LoadDataTable(string titlePath, string dataPath) {
char Delimiter = '#';
var TitleRow = ReadNonEmptyLinesUnquoteAndSplit(titlePath, Delimiter).Skip(1).First();
var DataRows = ReadNonEmptyLinesUnquoteAndSplit(dataPath, Delimiter).Skip(1);
DataTable dt = new DataTable();
dt.Columns.AddRange(TitleRow.Select(col => new DataColumn() { ColumnName = col }).ToArray());
foreach (var dataRow in DataRows)
dt.Rows.Add(dataRow);
return dt;
}