我正在尝试在我的 .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 .安装后,转到工具 > 库包管理器 > 包管理器控制台:
然后,输入: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/