C# 从本地文本文件中查找变量数据

C# 从本地文本文件中查找变量数据,c#,C#,我现在正试图写一个地下城和龙的程序 我试图将数据写入一个在应用程序启动时读取的文件。该应用程序当前是一个控制台应用程序,如果这有什么区别的话。我还希望该文件能够被更新,或者完全重写该文件,或者在文件末尾添加新信息 目前,文本文件的位置如下: Character: Harvey MaxHP : 120 CurrentHP: 80 STR: 10 DEX: 8 CON: 6 INT: 4 WIS: 9 CHA: 12 Character: Dent MaxHP : 182 CurrentHP: 1

我现在正试图写一个地下城和龙的程序

我试图将数据写入一个在应用程序启动时读取的文件。该应用程序当前是一个控制台应用程序,如果这有什么区别的话。我还希望该文件能够被更新,或者完全重写该文件,或者在文件末尾添加新信息

目前,文本文件的位置如下:

Character: Harvey
MaxHP : 120
CurrentHP: 80
STR: 10
DEX: 8
CON: 6
INT: 4
WIS: 9
CHA: 12

Character: Dent
MaxHP : 182
CurrentHP: 120
STR: 10
DEX: 1
CON: 8
INT: 10
WIS: 18
CHA: 20
如何读取信息,以便从文件中获取ABC的统计数据并存储到列表中,然后获取DEF的start并单独存储,以便我能够调用它们

我对C#比较陌生,这是我第一次尝试读写文件。我曾尝试过谷歌搜索,但无法理解如何在文件中查找信息

任何帮助都将不胜感激


谢谢。

我建议您存储json格式的字符,如下所示

[
  {
    "Name" : "Harvey",
    "MaxHP" : 120,
    "CurrentHP" : 80,
    "STR" : 10,
    "DEX" : 8,
    "CON" : 6,
    "INT" : 4,
    "WIS" : 9,
    "CHA" : 12
  },
  {
    "Name" : "Dent",
    "MaxHP" : 182,
    "CurrentHP" : 120,
    "STR" : 10,
    "DEX" : 1,
    "CON" : 8,
    "INT" : 10,
    "WIS" : 18,
    "CHA" : 20
  },
]
有这样一个匹配的类

public class Character
{
  public string Name { get; set; }
  public int MaxHP { get; set; }
  public int CurrentHP { get; set; }
  public int STR { get; set; }
  public int DEX { get; set; }
  public int CON { get; set; }
  public int INT { get; set; }
  public int WIS { get; set; }
  public int CHA { get; set; }
}
//Synchronous
string fileText = File.ReadAllText(@"C:\Path\To\File.txt");
List<Character> characters = JsonSerializer.Deserialize<List<Character>>(fileText);
然后,您可以使用库来解析它,或者使用新添加的。然后您将有一个
列表
可供使用。通过这种方式,您可以直接访问每个角色的各种统计信息,而不是试图在每个角色的统计信息列表中查找它

编辑

如果您使用的是Dotnet Core 3+,我建议您使用
System.Text.Json
,因为它是新的内置库。您可以找到反序列化的用法。举个例子,你可以这样使用它

public class Character
{
  public string Name { get; set; }
  public int MaxHP { get; set; }
  public int CurrentHP { get; set; }
  public int STR { get; set; }
  public int DEX { get; set; }
  public int CON { get; set; }
  public int INT { get; set; }
  public int WIS { get; set; }
  public int CHA { get; set; }
}
//Synchronous
string fileText = File.ReadAllText(@"C:\Path\To\File.txt");
List<Character> characters = JsonSerializer.Deserialize<List<Character>>(fileText);

我建议用json格式存储字符,如下所示

[
  {
    "Name" : "Harvey",
    "MaxHP" : 120,
    "CurrentHP" : 80,
    "STR" : 10,
    "DEX" : 8,
    "CON" : 6,
    "INT" : 4,
    "WIS" : 9,
    "CHA" : 12
  },
  {
    "Name" : "Dent",
    "MaxHP" : 182,
    "CurrentHP" : 120,
    "STR" : 10,
    "DEX" : 1,
    "CON" : 8,
    "INT" : 10,
    "WIS" : 18,
    "CHA" : 20
  },
]
有这样一个匹配的类

public class Character
{
  public string Name { get; set; }
  public int MaxHP { get; set; }
  public int CurrentHP { get; set; }
  public int STR { get; set; }
  public int DEX { get; set; }
  public int CON { get; set; }
  public int INT { get; set; }
  public int WIS { get; set; }
  public int CHA { get; set; }
}
//Synchronous
string fileText = File.ReadAllText(@"C:\Path\To\File.txt");
List<Character> characters = JsonSerializer.Deserialize<List<Character>>(fileText);
然后,您可以使用库来解析它,或者使用新添加的。然后您将有一个
列表
可供使用。通过这种方式,您可以直接访问每个角色的各种统计信息,而不是试图在每个角色的统计信息列表中查找它

编辑

如果您使用的是Dotnet Core 3+,我建议您使用
System.Text.Json
,因为它是新的内置库。您可以找到反序列化的用法。举个例子,你可以这样使用它

public class Character
{
  public string Name { get; set; }
  public int MaxHP { get; set; }
  public int CurrentHP { get; set; }
  public int STR { get; set; }
  public int DEX { get; set; }
  public int CON { get; set; }
  public int INT { get; set; }
  public int WIS { get; set; }
  public int CHA { get; set; }
}
//Synchronous
string fileText = File.ReadAllText(@"C:\Path\To\File.txt");
List<Character> characters = JsonSerializer.Deserialize<List<Character>>(fileText);

如果您只是从文本文件读取数据行,那么
file.ReadAllLines()
听起来是一个合理的起点:它会将整个文件读入字符串数组。然后,您可以循环遍历数组,并将需要的数据解析到模型结构中。如果不绑定到该格式,请考虑使用更标准的格式,如XML或JSON。例如,您可以创建一个
列表
,将其传递给Newtonsoft JSON序列化程序,并最终得到可解析的JSON(您可以使用相应的反序列化程序读入)。让其他人使用经过测试的序列化程序和解析器为您完成这项工作是一件好事。强大的库可以将JSON反序列化为对象。然而,以这种方式使用文本文件可能是一个很好的学习练习。老实说,这取决于你的目标,使用JSON似乎是最好的选择。但我还想更多地了解如何用C#遍历数据。我在Microsoft上看到了
文件.ReadAllLines()
,但我不确定如何遍历每个字符串并告诉它有一个数字,它是STR属性的数字,或者这个数字是DEX属性的数字。我非常希望能够解释这一点,因为这将极大地提高我对C#的了解。如果您只是从文本文件中读取数据行,那么
file.ReadAllLines()
听起来是一个合理的起点:它将整个文件读入字符串数组。然后,您可以循环遍历数组,并将需要的数据解析到模型结构中。如果不绑定到该格式,请考虑使用更标准的格式,如XML或JSON。例如,您可以创建一个
列表
,将其传递给Newtonsoft JSON序列化程序,并最终得到可解析的JSON(您可以使用相应的反序列化程序读入)。让其他人使用经过测试的序列化程序和解析器为您完成这项工作是一件好事。强大的库可以将JSON反序列化为对象。然而,以这种方式使用文本文件可能是一个很好的学习练习。老实说,这取决于你的目标,使用JSON似乎是最好的选择。但我还想更多地了解如何用C#遍历数据。我在Microsoft上看到了
文件.ReadAllLines()
,但我不确定如何遍历每个字符串并告诉它有一个数字,它是STR属性的数字,或者这个数字是DEX属性的数字。我真的很感激你能解释这一点,因为这将大大提高我对C#的了解。谢谢你的回复。我对JSON或Newtonsoft一点也不熟悉。你能给我举一个使用这两种语言的例子吗,比如语法?在我的回答中添加了一些用法的例子谢谢你的回答。我对JSON或Newtonsoft一点也不熟悉。你能举一个使用这两种语言的例子吗,比如语法?在我的回答中添加了一些用法的例子