替换csv文件中的特定数据

时间:2016-04-27 14:42:05

标签: c# csv

我正在尝试替换我的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。

我试图尽可能地解释这一点,但如果有人需要更多信息,请告诉我。

有人知道我做错了什么吗?

2 个答案:

答案 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();
            }
        }
    }
}