需要帮助读取C#中文件中的子字符串吗?

需要帮助读取C#中文件中的子字符串吗?,c#,file,substring,C#,File,Substring,所以我创建了一个子程序来读取一些文件。。。代码如下: dataGridView1.Rows.Clear(); string[] lines = File.ReadAllLines(Application.StartupPath + listBox1.Text + ".txt"); foreach (string line in lines) { int posicion1 = line.IndexOf(

所以我创建了一个子程序来读取一些文件。。。代码如下:

dataGridView1.Rows.Clear();

            string[] lines = File.ReadAllLines(Application.StartupPath + listBox1.Text + ".txt");

            foreach (string line in lines)
        {

            int posicion1 = line.IndexOf("|") + 1;
            int posicion2 = line.IndexOf("|", posicion1) + 1;
            int posicion3 = line.IndexOf("|", posicion2) + 1;
            int posicion4 = line.IndexOf("|", posicion3) + 1;


            data1 = line.Substring(0, posicion1 - 1);
            data2 = line.Substring(posicion1, posicion2 - posicion1 - 1);
            formacao = line.Substring(posicion2, posicion3 - posicion2 - 1);
            relatorio = line.Substring(posicion3, posicion4 - posicion3 -1);

            dataGridView1.Rows.Add(data1, data2, formacao, relatorio);


        }
但是,当要将变量“relatorio”添加到dataGridView时,它只会添加我保存变量的整行。。。下面是我如何从文件中保存一行,例如:

2017年6月28日| 2017年6月28日| FSDFSD | N|o

如您所见,我用“|”分隔所有变量。 综上所述,除了变量“relatorio”之外,该程序工作正常,该变量仅添加整行(28 de junho de 2017 | 28 de junho de 2017 | fsdfsd | Não),而此时应添加“Não”

有人能帮我吗?如果问题不够清楚,很抱歉

--更新

所以我试着用这个来代替:

 foreach (string line in lines)
        {

            string[] _line = line.Split('|');
            string value1 = _line[0];
            string value2 = _line[1];
            string value3 = _line[2];
            string value4 = _line[3];
            dataGridView1.Rows.Add(value1, value2, value3, value4);


        }
但我的程序仍然存在同样的错误。。。 我开始认为我没有正确地保存我的文件,但我真的看不到任何地方我搞砸了。。。关闭程序时,文件的类型保持不变:

2017年6月28日| 2017年6月28日| N|o


如果你有时间的话,有人能测试一下吗?

使用
IndexOf
,你把事情弄得有点复杂了。您可以使用该方法获取您的值:

foreach (string line in lines)
{
     string[] _line = line.Split('|');
     string value1 = _line[0];
     string value2 = _line[1];
     ...

     dataGridView1.Rows.Add(value1 , value2 , ...);
}

使用
IndexOf
,会使事情变得比应该的复杂一些。您可以使用该方法获取您的值:

foreach (string line in lines)
{
     string[] _line = line.Split('|');
     string value1 = _line[0];
     string value2 = _line[1];
     ...

     dataGridView1.Rows.Add(value1 , value2 , ...);
}

String类已具有一个方法:

各种拆分重载允许您使用多个分隔符并消除空结果

您可能应该像这样看待解析器。它可以直接解析CSV数据并将其映射到对象,允许自定义映射和转换,例如:

public class MyClass { public string Data1{get;set;} ...}

using(var reader=File.OpenText(csvPath))
{
    var csv = new CsvReader( textReader );
    csv.Configuration.Delimiter = "|";
    var records = csv.GetRecords<MyClass>().ToList();
    dgv1.DataSource=records;
}
public class MyClass{public string Data1{get;set;}…}
使用(var reader=File.OpenText(csvPath))
{
var csv=新的CsvReader(文本阅读器);
csv.Configuration.Delimiter=“|”;
var records=csv.GetRecords().ToList();
dgv1.DataSource=记录;
}
或者使用LINQ:

    var records = csv.GetRecords<MyClass>().Where(it=>it.Data1 >=...).ToList();
var records=csv.GetRecords().Where(it=>it.Data1>=…).ToList();

字符串类已经有了一个方法:

各种拆分重载允许您使用多个分隔符并消除空结果

您可能应该像这样看待解析器。它可以直接解析CSV数据并将其映射到对象,允许自定义映射和转换,例如:

public class MyClass { public string Data1{get;set;} ...}

using(var reader=File.OpenText(csvPath))
{
    var csv = new CsvReader( textReader );
    csv.Configuration.Delimiter = "|";
    var records = csv.GetRecords<MyClass>().ToList();
    dgv1.DataSource=records;
}
public class MyClass{public string Data1{get;set;}…}
使用(var reader=File.OpenText(csvPath))
{
var csv=新的CsvReader(文本阅读器);
csv.Configuration.Delimiter=“|”;
var records=csv.GetRecords().ToList();
dgv1.DataSource=记录;
}
或者使用LINQ:

    var records = csv.GetRecords<MyClass>().Where(it=>it.Data1 >=...).ToList();
var records=csv.GetRecords().Where(it=>it.Data1>=…).ToList();
为什么不直接使用?为什么不直接使用?