我正在尝试保存listView的内容。 但是我遇到了一些问题。在我的文本文件中,它将如下所示:
ListViewItem: {1234};ListViewSubItem: {daily};ListViewSubItem: {Backup};ListViewSubItem: {Every 2 days at: 23:0};ListViewSubItem: {};ListViewSubItem: {}
但我不喜欢它将“ListViewItem:”和“ListViewSubItem:”等添加到我的数据中......我只想在{}中找到这些字符串。
这是我的代码:
FileStream file = new FileStream(dataFolder + "\\BukkitGUI\\schedule.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(file);
foreach (ListViewItem listItem in listView1.Items)
{
sw.WriteLine(listItem + ";" + listItem.SubItems[1] + ";" + listItem.SubItems[2] + ";" + listItem.SubItems[3] + ";" + listItem.SubItems[4] + ";" + listItem.SubItems[5]);
}
sw.Close();
file.Close();
对此有何帮助?
编辑:我的listView图片:
答案 0 :(得分:1)
您的代码执行此操作:
foreach (ListViewItem listItem in listView1.Items)
{
sw.WriteLine(listItem + ";" + listItem.SubItems[1] + ";" + listItem.SubItems[2] + ";" + listItem.SubItems[3] + ";" + listItem.SubItems[4] + ";" + listItem.SubItems[5]);
}
这是在执行以下操作:
foreach (ListViewItem listItem in listView1.Items)
{
string listItemString = listItem.ToString();
// etc.
}
您认为listItem.ToString()
的价值是什么?
object.ToString()
的默认实现只输出该类型的名称。 ListViewItem
和ListViewSubItem
的实现显然输出了类型的名称,以及项目或子项目的内容。
如果你想要不同的输出,那么你需要自己做。输入listItem.Text
和listItem.SubItems[n].Text
代替。
答案 1 :(得分:0)
问:如果您的输入数据是JSON格式,那么您最好的选择是获得JSON解析器吗?
例如:
否则,如果它只是一个有趣的格式",请查看.Net TextFieldParser:
答案 2 :(得分:0)
将它发布为评论太长了所以我会写一个答案。我希望至少它会给你一个很好的方向来处理它。一般来说,你需要一些方法来操纵字符串。我想到了很多选项,但在你的情况下,我认为使用regex
或正则表达式是最好的选择,因为它们功能强大,你对.txt
文件中应包含的内容有明确的标准不是,你使用相对少量的数据,所以即使正则表达式被认为比其他选项慢,在你的情况下我认为这不会是一个问题。
这是我尝试过的 - 只是创建了一个静态方法(某种辅助方法),它将为您清理字符串,以便您只获得所需的信息。方法本身是:
public static string ParseListView(string ListViewText)
{
var regex = new System.Text.RegularExpressions.Regex("{.*?}");
var match = regex.Match(ListViewText);
return match.ToString().TrimStart('{').TrimEnd('}');
}
非常简单的方法。如果需要更好地适应您的情况,您可以调整很多事情。例如,我使用的regex.Match()
仅返回第一个匹配项,但您可能会发现regex.Matches()
更适合您。当您在C#
中使用正则表达式时,还有很多其他选项,所以请务必查看它们。
然后在你foreach
循环你:
foreach (ListViewItem listItem in listView1.Items)
{
sw.WriteLine(ParseListView(listItem) + ";" + ParseListView(listItem.SubItems[1]) + ";" + ParseListView(listItem.SubItems[2]) + ";" + ParseListView(listItem.SubItems[3]) + ";" + ParseListView(listItem.SubItems[4]) + ";" + ParseListView(listItem.SubItems[5]));
}
当然这看起来很难看,所以foreach
循环中的逻辑最有可能得到改善,但我认为这会让你顺利。