c# - 使用 StreamReader 生成 ID(最后一行)

标签 c# .net winforms linq stream

我正在尝试在我的 .CSV 文件(它必须是 .csv 文件)上使用 StreamReader 生成项目 ID。 Item ID 应从 1000 开始向上(1001、1002 等)

现在,如果用户按下“生成 ID”,它将在整个文件中搜索值“1000”,如果不存在,它将在文本框中写入“1000”。

这是我需要帮助的:如果文件包含“1000”,我希望它读取最后一行,将其增加 1,然后将值写入文本框。所以,如果我在 .csv 文件中的最后一个值是 1005,我希望它在文本框中写入 1006。

    private void GenerateID_Click(object sender, EventArgs e)
    {
        try
        {
            string searchString = "1000";
            using (StreamReader sr = new StreamReader("file.csv"))
            {
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                    if (line.Contains(searchString))
                    {
                        /* If file contains 1000, read the LAST line
                         * (Whatever number that may be: 1001, 1002, 1003, etc.)
                         * and increase that number by 1, then write to textbox. */
                    }
                    else
                    {
                        invItemIDField.Text = Convert.ToString("1000");
                    }
                }
            }
        }
        catch (Exception)
        {
            MessageBox.Show("The file could not be read");
        }
    }

最佳答案

我建议你使用 FileHelpers .它是最适合读取 CSV 文件的库。

要安装这个,你需要先安装NuGet .安装后,转到工具 > 库包管理器 > 包管理器控制台:

NuGet Package Manager

然后,输入:Install-Package Filehelpers

一切顺利!

进口FileHelpers到你的代码

using FileHelpers;

创建一个描述 CSV 结构的类:

DelimitedRecord("'")]
public class MyCsv
{
    public int Column1; // Your ID column
    public string SomeOtherColumn; 
}

创建一个 List<MyCsv> :

List<MyCsv> myList;

然后,加载您的 CSV:

FileHelperEngine<MyCsv> engine = new FileHelperEngine<MyCsv>();
myList = new List<MyCsv>(engine.ReadFile("my.csv")); // replace with your filename or variable containing the filename

您现在可以通过访问列表 myList 来阅读您的 CSV :

foreach(MyCsv line in myList) {
    // Do something;
}

该列表中的每个对象对应于 CSV 中的每一行。为了访问一行的第一列(给定上面的 foreach 循环):

line.Column1

因此,如果您需要比较值,您可以使用 LINQ 或进行传统的循环搜索:

foreach(MyCsv line in myList) {
    if (txtId.Text == line.Column1.ToString()) {
        found = true;
        break;
    }
}

然后,获取最后一行的id:

myList.[myList.Count - 1].Column1

您可以完成剩下的工作。干杯!

关于c# - 使用 StreamReader 生成 ID(最后一行),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13793377/

相关文章:

c# - 如何在 asp.net 图像控件上绘制几何形状以创建图像映射?

c# - urlmon.dll FindMimeFromData() 在 64 位桌面/控制台上完美运行,但在 ASP.NET 上生成错误

c# - LINQ - .Split(new[] { ' ' }) 字符串并在发现 null 时设置默认值

c# - 如何在表单应用程序中显示控制台输出/窗口?

c# - 在 DataGridViewComboBoxColumn SelectedIndexChanged 期间触发的事件

c# - 在 ModelState.Errors 中使用 [JsonProperty ("name")]

java - java 和 .net 之间的 WS-A

c# - 多么简单的得到;放;在一个类意味着?

.net - Azure WebJob QueueTrigger 消息未从队列中删除

c# - 使用正弦创建跳跃算法