所以我创建了一个子程序来读取一些文件......这是代码:
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时,它只是添加了我保存变量的ENTIRE行......这就是我如何从文件中保存一行,例如:
2017 de junho de 2017 | 28 de junho de 2017 | fsdfsdfsd |Não
如您所见,我将所有变量与“|”分开。 总结一下,该程序正常工作,除了变量“relatorio”,只是添加了整个行(28 de junho de 2017 | 28 de junho de 2017 | fsdfsdfsd |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 de junho de 2017 | 28 de junho de 2017 | fwfew |Não
如果你有时间的话,有人可以测试一下吗?
答案 0 :(得分:2)
String类已经有Split方法:
var parts=line.Split('|');
dgv1.Rows.Add(parets[0], parts[1], parts[2], parts[3]);
各种Split重载允许您使用多个分隔符并消除空结果
您应该查看CsvHelper之类的解析器。它可以直接解析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;
}
或者使用LINQ:
var records = csv.GetRecords<MyClass>().Where(it=>it.Data1 >=...).ToList();
答案 1 :(得分:0)
使用IndexOf
,你使事情变得比它们应该更复杂。您只需使用javadoc方法获取值:
foreach (string line in lines)
{
string[] _line = line.Split('|');
string value1 = _line[0];
string value2 = _line[1];
...
dataGridView1.Rows.Add(value1 , value2 , ...);
}