Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何以结构化的方式读取.txt文件?_C# - Fatal编程技术网

C# 如何以结构化的方式读取.txt文件?

C# 如何以结构化的方式读取.txt文件?,c#,C#,我的目标摘要: 我正在制作一个简单的游戏来提高我对C#的认识。这是一个猜谜游戏,程序将在控制台上写一个缺少单词的句子。用户必须正确键入缺少的单词,然后加载下一个句子。我将这些句子存储在一个.txt文件中,这样它们就可以随机分组加载。文件的结构使缺少的单词和句子包含在由“[]”分隔的组内的一行中。 我只是想知道我应该用什么来告诉程序在一个带有“[]”的分组中加载行,这样它就可以在一个数组中保持有序。我假设这将是使用文件IO类,但请有人告诉我,如果我错了,给我一个例子,或只是告诉我我应该研究什么。我

我的目标摘要:

我正在制作一个简单的游戏来提高我对C#的认识。这是一个猜谜游戏,程序将在控制台上写一个缺少单词的句子。用户必须正确键入缺少的单词,然后加载下一个句子。我将这些句子存储在一个.txt文件中,这样它们就可以随机分组加载。文件的结构使缺少的单词和句子包含在由“[]”分隔的组内的一行中。

我只是想知道我应该用什么来告诉程序在一个带有“[]”的分组中加载行,这样它就可以在一个数组中保持有序。我假设这将是使用文件IO类,但请有人告诉我,如果我错了,给我一个例子,或只是告诉我我应该研究什么。我一直在广泛地研究和试验文件IO类,但似乎在网上或书中找不到任何能说明我需要什么的示例。

.txt的示例:

cat - the cat purred
dog - the dog barked
[]
cake - I baked a cake
ate - the cake I ate was delicous
[]

欢迎任何建议。

如果您试图在可读和可编辑的文本文件中为数据强加一个易于解析的结构,那么第一条建议是考虑利用为其设计的格式,而不是使用普通文本

JSON或Javascript对象表示法将为您提供一种非常易于使用的方法来创建定义良好的属性,这些属性可以像您所描述的那样分组到集群中。更好的是,C#和.NET框架有许多非常成熟的库,用于将JSON从文件或其他源读入强类型类,例如

数据的JSON表示形式可能如下所示:

[
   {
      'word' : 'cake',
      'beginningFragment' : 'I baked a ',
      'endingFragment' : '.'
    },
    {
      'word" : 'ate',
      'beginningFragment' : 'The cake I ',
      'endingFragment' : ' was delicious.'
    }
]
并且可以在C#中设置相应的列表和类:


不要对文本文件执行一系列任意操作,您的结构已经准备就绪。

file IO良好的开端。与对我们大喊大叫相反,我只是想知道我应该用什么来告诉程序在一个分组中加载带有“[]”的行-我不确定你的问题是什么。您可以使用
var lines=file.ReadAllLines(textFilePath)
读取文件,然后使用
string.Split
获取每个部分,然后替换第二部分中缺少的单词-这样猫的呼噜声就变成了?“答案”是“猫”-但我不明白你想要的
[]
是什么意思?我想[]是要插入单词的占位符。-一般建议:将问题分解成越来越小的部分。这里的答案是JSON。或者XML。或者亚马尔。或者某种结构化数据交换格式,对于这种格式,在各种工具链和语言中都有现成的商品序列化程序和反序列化程序。默认情况下,在NET 4.7.2和NET Core 3.1上使用Newtonsoft 12.0.3似乎可以很好地工作?由于使用了过时的
Newtonsoft.Json
,因此被否决。请改用
System.Text.Json
,因为它是现代设计的、更快的、官方支持的。而且.NET不再缺少.NET Framework,而是.NET 5,它是.NET Core的新版本。只需使用.NET Framework显式指定已过时的框架。调用Newtonsoft obsoleted有点牵强,您会注意到问题并没有指定.NET版本,举一个广泛使用且支持良好的库的例子是非常明智的。@Alsein Newtonsoft.Json不可能过时-八天前更新为3.1.4版,并包含.net core 5的预览版本。
public class Sentence 
{
   public string Word { get; set; }
   public string BeginningFragment { get; set; }
   public string EndingFragment { get; set; }
}