我正在尝试替换我的csv文件中的特定数据字段但是遇到了问题。
我的csv文件结构如下:
user, password, role, id,
1, abc, 2, 3
2, def, 2, 4
3, ghi, 5, 5
我可以正常阅读该文件但是当我想使用Windows窗体中的文本框和按钮替换密码时,我遇到了问题。
private void resetBtn_Click(object sender, EventArgs e)
{
var encoding = Encoding.GetEncoding("iso-8859-1");
var csvLines = File.ReadAllLines("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", encoding);
foreach (var line in csvLines)
{
var values = line.Split(',');
if (values[0].Contains(form2value))
{
values[1] = confirmPass.Text;
}
}
}
Form2value是他们的用户名,所以我要做的是:如果第一列包含在form2value中输入的内容,它将转到该行的第二列。
我试过这个
var values = line.Split(',');
if (values[0].Contains(form2value))
{
MessageBox.Show(values[1]);
values[1] = confirmPass.Text;
MessageBox.Show(values[1]);
}
}
只是为了查看值是否正在改变它是否正在显示每个值[1]当我只想要它时如果找到form2value。
我试图尽可能地解释这一点,但如果有人需要更多信息,请告诉我。
有人知道我做错了什么吗?
答案 0 :(得分:0)
如果使用数据表,生活会更容易..........
这是摘录...... DT是一个DataTable。 拆分文件的第一行,然后使用dt.Columns.Add添加列标题....
private void AddDataToDataTable()
{
using (StreamReader sr = new StreamReader(new MemoryStream(this.FileContents)))
{
//Igone headings & blank Lines
string line = string.Empty;
while ((line = sr.ReadLine()) != null)
{
//If blank line then skip line
if (line == string.Empty)
{
continue;
}
dt.Rows.Add(line.Split(this.Delimeter));
}
}
}
希望这有帮助
答案 1 :(得分:0)
您正在更改代码中使用的values
内部数组,而不是文件本身。事实上,你不是在任何地方写文件,只是阅读它。
您需要:读取文件,获取用户名所在的行(如果存在),然后使用密码编写该特定行。
以下是您可以这样做的方法:
private void resetBtn_Click(object sender, EventArgs e)
{
var encoding = Encoding.GetEncoding("iso-8859-1");
var csvLines = File.ReadAllLines("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", encoding);
for (int i = 0; i < csvLines.Length; i++)
{
var values = csvLines[i].Split(',');
if (values[0].Contains(form2value))
{
values[1] = confirmPass.Text;
using (FileStream stream = new FileStream("C:\\Users\\hughesa3\\Desktop\\test environment\\users.csv", FileMode.Create))
{
using (StreamWriter writer = new StreamWriter(stream, encoding))
{
for (int currentLine = 0; currentLine < csvLines.Length; ++currentLine)
{
if (currentLine == i)
{
writer.WriteLine(string.Join(",", values));
}
else
{
writer.WriteLine(csvLines[i]);
}
}
writer.Close();
}
stream.Close();
}
}
}
}