C# 将.txt文件内容读取到DataTable,列标题位于第一行
我正在尝试从一个C# 将.txt文件内容读取到DataTable,列标题位于第一行,c#,winforms,datagridview,datatable,C#,Winforms,Datagridview,Datatable,我正在尝试从一个.txt文件加载数据,该文件如下所示: |ABC|DEF|GHI| |111|222|333| |444|555|666| 代码为: using (StringReader reader = new StringReader(new StreamReader(fileStream, Encoding.Default).ReadToEnd())) { string line; //reader.ReadLine(); //skip first line w
.txt
文件加载数据,该文件如下所示:
|ABC|DEF|GHI|
|111|222|333|
|444|555|666|
代码为:
using (StringReader reader = new StringReader(new StreamReader(fileStream, Encoding.Default).ReadToEnd()))
{
string line;
//reader.ReadLine(); //skip first line
while (reader.Peek() != -1)
{
line = reader.ReadLine();
if (line == null || line.Length == 0)
continue;
string[] values = line.Split('|').Skip(1).ToArray();
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
}
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
products++;
}
}
使用(StringReader=new StringReader(new StreamReader(fileStream,Encoding.Default).ReadToEnd())
{
弦线;
//reader.ReadLine();//跳过第一行
while(reader.Peek()!=-1)
{
line=reader.ReadLine();
if(line==null | | line.Length==0)
继续;
string[]values=line.Split(“|”).Skip(1.ToArray();
如果(!isColumnCreated)
{
对于(int i=0;i
问题是,当我生成一个数据表时,我有第一行作为列,但第一行:
|ABC | DEF | GHI|
在以下行中也可见:
如何将第一行作为列标题,其余作为行
如果可能的话,我不想使用CSVHelper
。我认为您需要添加列或添加行
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
}
}
else
{
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
}
如果(!isColumnCreated)
{
对于(int i=0;i
我认为您需要添加列或行
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
}
}
else
{
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
}
如果(!isColumnCreated)
{
对于(int i=0;i
创建标题后的第一行时只需跳过即可
string line;
bool bheader= false;
//reader.ReadLine(); //skip first line
while (reader.Peek() != -1)
{
line = reader.ReadLine();
if (line == null || line.Length == 0)
continue;
string[] values = line.Split('|').Skip(1).ToArray();
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
bheader = true;
}
if(bheader ==false){
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
products++;
}
}
bheader = false;
}
字符串行;
bool bheader=false;
//reader.ReadLine()//跳过第一行
while(reader.Peek()!=-1)
{
line=reader.ReadLine();
if(line==null | | line.Length==0)
继续;
string[]values=line.Split(“|”).Skip(1.ToArray();
如果(!isColumnCreated)
{
对于(int i=0;i
创建标题后的第一行时只需跳过即可
string line;
bool bheader= false;
//reader.ReadLine(); //skip first line
while (reader.Peek() != -1)
{
line = reader.ReadLine();
if (line == null || line.Length == 0)
continue;
string[] values = line.Split('|').Skip(1).ToArray();
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
bheader = true;
}
if(bheader ==false){
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
products++;
}
}
bheader = false;
}
字符串行;
bool bheader=false;
//reader.ReadLine()//跳过第一行
while(reader.Peek()!=-1)
{
line=reader.ReadLine();
if(line==null | | line.Length==0)
继续;
string[]values=line.Split(“|”).Skip(1.ToArray();
如果(!isColumnCreated)
{
对于(int i=0;i
这会有用的
DataTable dt = new DataTable();
using (System.IO.StreamReader sr = new System.IO.StreamReader("PathToFile"))
{
string currentline = string.Empty;
bool doneHeader = false;
while ((currentline = sr.ReadLine()) != null)
{
if (!doneHeader)
{
foreach (string item in currentline.Split('YourDelimiter'))
{
dt.Columns.Add(item);
}
doneHeader = true;
continue;
}
dt.Rows.Add();
int colCount = 0;
foreach (string item in currentline.Split('YourDelimiter'))
{
dt.Rows[dt.Rows.Count - 1][colCount] = item;
colCount++;
}
}
}
这会管用的
DataTable dt = new DataTable();
using (System.IO.StreamReader sr = new System.IO.StreamReader("PathToFile"))
{
string currentline = string.Empty;
bool doneHeader = false;
while ((currentline = sr.ReadLine()) != null)
{
if (!doneHeader)
{
foreach (string item in currentline.Split('YourDelimiter'))
{
dt.Columns.Add(item);
}
doneHeader = true;
continue;
}
dt.Rows.Add();
int colCount = 0;
foreach (string item in currentline.Split('YourDelimiter'))
{
dt.Rows[dt.Rows.Count - 1][colCount] = item;
colCount++;
}
}
}
当前代码的问题是,当isColumnCreated为false而不是true时,您将进行处理。如果您更改此选项:
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
}
DataRow row = table.NewRow();
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
products++;
如果(!isColumnCreated)
{
对于(int i=0;i
对此
if (!isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
table.Columns.Add(values[i]);
}
isColumnCreated = true;
}
DataRow row = table.NewRow();
else if (isColumnCreated)
{
for (int i = 0; i < values.Count(); i++)
{
row[i] = values[i];
}
table.Rows.Add(row);
}
如果(!isColumnCreated)
{
对于(int i=0;i