需要帮助读取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();
为什么不直接使用?为什么不直接使用?