C# 要在c中将字符串数组中的数据填充到datatable中吗#
我已经解密了文件的内容,现在我想将数据填充到C# 要在c中将字符串数组中的数据填充到datatable中吗#,c#,C#,我已经解密了文件的内容,现在我想将数据填充到DataTable。文件内容的格式为: public void DecryptFile(string filePath, string CompanyName) { using (var fileStream = new FileStream(filePath, FileMode.Open)) { using (var gzStream = new GZipStream(fileStre
DataTable
。文件内容的格式为:
public void DecryptFile(string filePath, string CompanyName)
{
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
using (var gzStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
using (var outputStream = new MemoryStream())
{
gzStream.CopyTo(outputStream);
byte[] outputBytes = outputStream.ToArray();
// DeserailizeByteArrayToDatatable(outputBytes, CompanyName);
string FileContents = Encoding.ASCII.GetString(outputBytes);
DataTable dt = new DataTable();
string[] arrayList = FileContents.Split("\n");
}
}
}
}
因此,我想将第一行填充为
DataTable
中的列,其余全部填充为行,此外,我还想将开始时间
和停止时间更改为正确的格式我将遵循的一般概念是:
f.Columns.Add()
将列添加到数据表中serial_number,peak_period_start_time,stop_time
15AA01AF361903PC,1602619200,1602615600
15AA01AF361902QB,1602619200,1602615600
15AA01AF361906YL,1602619200,1602630000
09AA01AF32190YXP,1602619200,1602630000
(尚未测试代码)您可以使用下面的函数创建数据表。我不确定你想要什么格式的开始时间和结束时间,所以我在评论中提到了它,你可以这样做
public void DecryptFile(string filePath, string CompanyName)
{
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
using (var gzStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
using (var outputStream = new MemoryStream())
{
gzStream.CopyTo(outputStream);
byte[] outputBytes = outputStream.ToArray();
//DeserailizeByteArrayToDatatable(outputBytes, CompanyName);
string FileContents = Encoding.ASCII.GetString(outputBytes);
DataTable newTable = new DataTable();
string[] arrayList = FileContents.Split('\n');
int rowIndex = 0;
foreach (string line in arrayList)
{
// Assuming comma separated columns
string[] columns = line.Split(',');
int columnIndex = 0;
DataRow row = (rowIndex == 0 ? null : newTable.NewRow());
foreach (string columnValue in columns)
{
if (rowIndex == 0)
{
newTable.Columns.Add(new DataColumn(columnValue));
}
else
{
row[columnIndex] = columnValue;
}
}
rowIndex ++;
}
}
}
}
公共静态数据表ArrayOfStringToDataTable(字符串[]stringArray)
{
DataTable=新的DataTable();
如果(stringArray.Length==0)
{
返回数据表;
}
var headers=stringArray[0]。拆分(',');
foreach(标头中的var标头)
{
dataTable.Columns.Add(header,typeof(string));
}
if(stringArray.Length==1)
{
返回数据表;
}
对于(var i=1;i
我建议您首先创建一个方法,该方法将接受一个数据表
和一个列数组,并将列添加到数据表
public static DataTable ArrayOfStringToDataTable(string[] stringArray)
{
DataTable dataTable = new DataTable();
if (stringArray.Length == 0)
{
return dataTable;
}
var headers = stringArray[0].Split(',');
foreach (var header in headers)
{
dataTable.Columns.Add(header, typeof(string));
}
if (stringArray.Length == 1)
{
return dataTable;
}
for (var i = 1; i < stringArray.Length; i++) {
var rows = stringArray[i].Split(',');
var dataRow = dataTable.NewRow();
dataRow[0] = rows[0];
dataRow[1] = rows[1]; // do required formatting
dataRow[2] = rows[2]; // do required formatting
dataTable.Rows.Add(dataRow);
}
return dataTable;
}
然后,创建一个将数据填充到该数据表中的方法:
public DataTable AddColumns(DataTable dt, string[] columns)
{
if (dt == null) dt = new DataTable();
foreach (string column in columns)
{
dt.Columns.Add(column.Trim());
}
return dt;
}
注意:我明白了,您的文件头行中有4列,但它提供了3个不正确的值,您必须提供相等的列及其值,否则,您可能希望以不同的方式处理行创建。使用datatable有什么特殊原因吗?我可能会建议创建一个方法,将字符串解析为对象列表。请查看DataTable的示例。此外,我想将开始时间和停止时间更改为正确的格式-不要同时解析为DateTime
类型,并将其另存为数据库中的DateTime
。
public DataTable PopulateData(DataTable dt, string[] dataLines)
{
if (dataLines == null || dataLines.Length == 0) return dt;
foreach (string line in dataLines)
{
var splittedLine = line.Split(',');
var row = dt.NewRow();
for (int i = 0; i < splittedLines.Length; i++)
{
row[i] = splittedLines[i].Trim();
}
dt.Rows.Add(row);
}
return dt;
}
public void DecryptFile(string filePath, string CompanyName)
{
using (var fileStream = new FileStream(filePath, FileMode.Open))
{
using (var gzStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
using (var outputStream = new MemoryStream())
{
gzStream.CopyTo(outputStream);
byte[] outputBytes = outputStream.ToArray();
// DeserailizeByteArrayToDatatable(outputBytes, CompanyName);
string FileContents = Encoding.ASCII.GetString(outputBytes);
DataTable dt = new DataTable();
string[] arrayList = FileContents.Split("\n");
// Usage
if (arrayList.Length > 0)
{
var columns = arrayList[0].Split(',');
var data = arrayList.AsEnumerable().Skip(1).ToArray(); // skip the first line.
dt = PopulateData(AddColumns(dt, columns), data);
}
}
}
}
}