gpt4 book ai didi

c# - 如果行中存在任何特定或更多单词,如何从文本文件中删除整行

转载 作者:行者123 更新时间:2023-11-30 21:33:03 26 4
gpt4 key购买 nike

我创建了一个文本文件,并将数据存储到该文件中。每个单词用'-'分隔

word1-word2-word3-word4.

此外,我正在使用 DataGridView(control) 在单独的列中显示每个单词。

我想从文本文件中删除特定行,让我们说“word1”和“word2”与给定变量匹配

public static string word1; public static string word2;`

我正在尝试实现以下代码,但没有找到合适的解决方案来做到这一点。请帮忙。我是 C# 新手...

 public static string word1; //static to access in another form
public static string word2;
if (e.ColumnIndex == 5) //view
{
string[] lines = File.ReadAllLines(@"info.txt");

word1 = dataGridViewF.Rows[e.RowIndex].Cells[0].Value.ToString();
word2= dataGridViewF.Rows[e.RowIndex].Cells[1].Value.ToString();

string[] newLines = lines.Where(line => !line.Contains(word1));

using (StreamWriter file = new StreamWriter(@"info.txt", true))
{
File.WriteAllLines(@"info.txt"", newLines);
}
}

最佳答案

您的示例文本行:

FirstName-LastName-age-MobileNo.

是一个很大的指标,表明您可能使用了错误的方法。如果 - 分隔您的数据,当电话号码中包含 - 时会发生什么情况?当一个和蔼可亲的已婚人士在他们的新姓氏中加入 - 时会发生什么?你能看出这会有什么问题吗?

更好的方法(如评论中所述)是将您的数据序列化为为此设计的格式。我将在示例中使用 Json。

首先您应该创建一个描述您的数据的类:

public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string MobilePhoneNumber { get; set; }
public int Age { get; set; } //Really should be storing birthday instead...
}

当你将这个对象序列化为 json 时,它看起来像这样:

{
"FirstName": "John",
"LastName": "Doe",
"Age": 42,
"MobilePhoneNumber": "(123) 456-7890"
}

这些列表如下所示:

[{
"FirstName": "John",
"LastName": "Doe",
"Age": 42,
"MobilePhoneNumber": "(123) 456-7890"
},
{
"FirstName": "Jane",
"LastName": "Sanders-Doe",
"Age": 69,
"MobilePhoneNumber": "(890) 555-1234"
}]

现在您获取此数据的代码非常简单(我将使用 Json.NET —— 用于此目的的标准库):

string json = File.ReadAllText(@"info.json");
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);

现在您有了要使用的实际对象,您的代码更加清晰且不易出错:

string fName = dataGridViewF.Rows[e.RowIndex].Cells[0].Value.ToString();
string lName = dataGridViewF.Rows[e.RowIndex].Cells[1].Value.ToString();

string json = File.ReadAllText("info.json");

//'deserializes' which just means turns JSON into a real object
List<Person> persons = JsonConvert.DeserializeObject<List<Person>>(json);

//'persons' is now a list of Persons who's names DONT match
//in other words the names that matched are removed from the output
persons = persons.Where(x => x.FirstName != fName && x.LastName != lName).ToList();

//'serialize' means turns an object into a json string
json = JsonConvert.SerializeObject(persons);

File.WriteAllText("info.json", json);

请注意,我将代码写得有点冗长,以便您能够理解。上面的很多行可以压缩成更少的行。

关于c# - 如果行中存在任何特定或更多单词,如何从文本文件中删除整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51793833/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com