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