From 6e8ca99ed7a32ec632e532f9999e77cfc3affd4d Mon Sep 17 00:00:00 2001 From: jkpete <1031139173@qq.com> Date: Thu, 24 Oct 2024 15:53:37 +0800 Subject: [PATCH] update doc --- Example/UsingTest/Script/EGSaveTest.cs | 49 +++--- addons/EGFramework/Manual/EGSave.md | 142 +++++++++++++++--- addons/EGFramework/Module/SaveTools/EGSave.cs | 20 +-- 3 files changed, 155 insertions(+), 56 deletions(-) diff --git a/Example/UsingTest/Script/EGSaveTest.cs b/Example/UsingTest/Script/EGSaveTest.cs index 7941de6..d02cc4f 100644 --- a/Example/UsingTest/Script/EGSaveTest.cs +++ b/Example/UsingTest/Script/EGSaveTest.cs @@ -4,11 +4,11 @@ using LiteDB; namespace EGFramework.Examples.Test{ public partial class EGSaveTest : Node,IEGFramework { - public override void _Ready() - { - base._Ready(); - TestCode(); - } + public override void _Ready() + { + base._Ready(); + TestCode(); + } public void TestSqlite(){ // string result = this.EGSqlite().CreateTable(); @@ -30,16 +30,16 @@ namespace EGFramework.Examples.Test{ // string Path2 = "Data1.json".GetGodotResPath(); // this.EGSave().LoadObjectFile(Path2); - // // this.EGSave().SetObject(CardPath1,"Customer1",new Customer() { Name = "Andy" }); - // // this.EGSave().SetObject(CardPath1,"Customer3",new Customer() { Name = "Terry" }); + // this.EGSave().SetObject(Path2,"Customer1",new Customer() { Name = "Andy" }); + // this.EGSave().SetObject(Path2,"Customer3",new Customer() { Name = "Terry" }); // string CardPath1 = "Card1"; // FileAccess fileAccess = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read); // GD.Print(fileAccess.GetAsText()); - FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlags.Read); - this.EGSave().ReadObject("TestJson",testJson.GetAsText()); - Customer customer = this.EGSave().GetObject("TestJson","Customer3"); - GD.Print("ReadName is "+customer.Name); + // FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlags.Read); + // this.EGSave().ReadObject("TestJson",testJson.GetAsText()); + // Customer customer = this.EGSave().GetObject("TestJson","Customer3"); + // GD.Print("ReadName is "+customer.Name); // FileAccess testCSV = FileAccess.Open("res://SaveData/TestCSV.json", FileAccess.ModeFlags.Read); @@ -54,21 +54,26 @@ namespace EGFramework.Examples.Test{ // IsActive = true // }; // csvSave.SetData("",testData,2) - // string Path1 = "Test.csv".GetGodotResPath(); - // this.EGSave().LoadDataFile(Path1); - - // FileAccess testCsv = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read); - // this.EGSave().ReadData("TestCsv",testCsv.GetAsText()); - // IEnumerable allResult = this.EGSave().GetAllData(CardPath1,""); - // GD.Print("Get result " + allResult.Count()); + + string Path1 = "SaveData/TestCsv.csv".GetGodotResPath(); + this.EGSave().LoadDataFile(Path1); + this.EGSave().SetData(Path1,"Customer1",new Customer() { Name = "Andy" },9); + // IEnumerable allResult = this.EGSave().GetAllData(Path1,""); // foreach(Customer customer in allResult){ // GD.Print(customer.Id +"|" + customer.Name); // } + // Customer customer1 = this.EGSave().GetData(Path1,"",0); + // GD.Print(customer1.Id +"|" + customer1.Name); + + + // FileAccess testCsv = FileAccess.Open("res://SaveData/TestCsv.csv", FileAccess.ModeFlags.Read); + // this.EGSave().ReadData("TestCsv",testCsv.GetAsText()); + - this.EGSave().LoadObjectFile("SaveData/testDat.dat"); - // this.EGSave().SetObject("SaveData/testDat.dat","",testData); - CustomerByte testDat = this.EGSave().GetObject("SaveData/testDat.dat",""); - GD.Print(testDat.Id); + // this.EGSave().LoadObjectFile("SaveData/testDat.dat"); + // // this.EGSave().SetObject("SaveData/testDat.dat","",testData); + // CustomerByte testDat = this.EGSave().GetObject("SaveData/testDat.dat",""); + // GD.Print(testDat.Id); // System.Linq.Expressions.Expression> expr = i => i.Name == "Creature"; // IEnumerable linqResult = csvSave.FindData("",expr); diff --git a/addons/EGFramework/Manual/EGSave.md b/addons/EGFramework/Manual/EGSave.md index 7946f88..b9bc1a9 100644 --- a/addons/EGFramework/Manual/EGSave.md +++ b/addons/EGFramework/Manual/EGSave.md @@ -2,9 +2,11 @@ --- +注:下述`数据`无特殊声明默认指代:对象的集合。 + SaveTools使用了两种数据格式,一种是表式存储,一种是对象存储,统一使用key-value方式存储数据,通过唯一key值锁定对应的数据。如果是只读数据,则需指定唯一标识key,读写数据,这个key值则为文件路径(唯一)。 -在使用该库时,一定要保证该数据被加载。可以重复读取数据文件,如果外部进行了修改,新读取的数据会覆盖掉原来的数据。 +在使用该库时,一定要保证该数据被加载。可以重复读取数据文件,如果外部进行了修改,新读取的数据会覆盖掉原来的数据。使用流程:加载数据->读写数据或者其他操作 需要在对应Godot的Node类下实现接口 `IEGFramework` @@ -50,14 +52,10 @@ public partial class EGSaveTest : Node,IEGFramework{ # EGSave - - ## 属性 暂无 - - ## 方法 | 方法名 | 简介 | @@ -73,13 +71,11 @@ public partial class EGSaveTest : Node,IEGFramework{ | void SetObject(string path,string objectKey,TObject obj) | 设置对象(写入文件) | | TObject GetObject(string path,string key) | 获取对象(读取文件) | | void SetData(string path,string dataKey,TData data,int id) | 设置数据(写入文件) | -| TData GetData(string path,string key,int id) | 获取单个数据(读取文件) | -| IEnumerable GetAllData(string path,string key) | 获取全部数据(读取文件) | +| TData GetData(string keyOrPath,string key,int id) | 获取单个数据(读取文件) | +| IEnumerable GetAllData(string keyOrPath,string key) | 获取全部数据(读取文件) | | OpenResPath() | 打开Res文件目录 | | OpenUserPath() | 打开User文件目录 | - - ## 扩展方法 | 方法名 | 简介 | @@ -88,14 +84,10 @@ public partial class EGSaveTest : Node,IEGFramework{ | [string].GetGodotResPath(this string path) | 转为res文件下的相对路径 | | [string].GetGodotUserPath(this string path) | 转为User文件下的相对路径 | - - ## 属性说明 暂无 - - ## 方法说明 ### LoadDataFile(string path) @@ -111,8 +103,6 @@ string Path1 = "Data/Test1.csv".GetGodotResPath(); this.EGSave().LoadDataFile(Path1); ``` - - ### ReadData(string key,string data) ### ReadData(string key,byte[] data) @@ -130,8 +120,6 @@ FileAccess testCsv = FileAccess.Open("res://TestCsv.csv", FileAccess.ModeFlags.R this.EGSave().ReadData("TestCsv",testCsv.GetAsText()); ``` - - ### LoadObjectFile(string path) 从路径中加载对象文件,因为是可读写,所以必须指定对应的文件路径位置,如果不存在该文件则会新建对应数据文件。 @@ -145,8 +133,6 @@ string Path2 = "Data1.json".GetGodotResPath(); this.EGSave().LoadObjectFile(Path2); ``` - - ### ReadObject(string key,string data) ### ReadObject(string key,byte[] data) @@ -164,8 +150,6 @@ FileAccess testJson = FileAccess.Open("res://TestJson.json", FileAccess.ModeFlag this.EGSave().ReadObject("TestJson",testJson.GetAsText()); ``` - - ### Unload(string keyOrPath) 卸载已读取或者加载的数据,并删除对应key值下的数据,此方法执行后,不再能获取对应的数据,也不能写入文件,需要重新加载。 @@ -176,8 +160,6 @@ this.EGSave().ReadObject("TestJson",testJson.GetAsText()); this.EGSave().Unload("TestCsv"); ``` - - ### List GetKeys() 获取所有加载过的key值或者路径值。 @@ -186,13 +168,125 @@ this.EGSave().Unload("TestCsv"); List keys = this.EGSave().GetKeys(); ``` +### SetObject(string path,string objectKey,TObject obj) + +把对象写入文件中。需要先加载再写入。 + +- T:指代任何一个对象工具类 + +- path:对象文件的路径值 + +- objectKey:对象文件的key值 + +- obj:要写入的对象 + +```csharp +public class Customer +{ + [CsvParam("ID")] + public int Id { get; set; } + [CsvParam("Name")] + public string Name { get; set; } + public string[] Phones { get; set; } + [CsvParam("是否启用")] + public bool IsActive { get; set; } +} +public partial class EGSaveTest : Node,IEGFramework{ + public override void _Ready() + { + string Path2 = "Data1.json".GetGodotResPath(); + this.EGSave().LoadObjectFile(Path2); +        this.EGSave().SetObject(Path2,"Customer1",new Customer() +            { Name = "Andy" }); + } +} +``` + +### TObject GetObject(string path,string key) + +从文件中获取对象,同样需要先加载再获取。 + +- TObject:要获取的对象类型。 + +- path:对象文件的路径值 + +- key:对象的key值 + +```csharp +string Path2 = "Data1.json".GetGodotResPath(); +this.EGSave().LoadObjectFile(Path2); +Customer customer = this.EGSave(). + GetObject("Data1.json","Customer1"); +``` + + + +### SetData(string path,string dataKey,TData data,int id) + +把一条数据写入文件中的指定位置。特别注意,如果写入的位置超出了文件中的数据量,则会进行追加数据,否则覆盖对应位置的数据。 + +- T:指代任何一个数据工具类 + +- path:数据文件的路径值 + +- dataKey:数据文件的key值 + +- data:要写入的数据 + +- id:指代第x条数据 + +```csharp +string Path2 = "TestCsv.csv".GetGodotResPath(); +this.EGSave().LoadObjectFile(Path2); +this.EGSave().SetData(Path1,"Customer1", +    new Customer() { Name = "Andy" },9); +``` +### TData GetData(string keyOrPath,string key,int id) + +获取文件中特定key值的列表里,第x条数据。 + +- keyOrPath:文件的路径,或者读取后存储的key值。 + +- key:文件中的数据列表对应的key值。 + +- id:第【id】条 + +```csharp +string Path1 = "SaveData/TestCsv.csv".GetGodotResPath(); +this.EGSave().LoadDataFile(Path1); +Customer customer1 = this.EGSave().GetData(Path1,"",0); +GD.Print(customer1.Id +"|" + customer1.Name); +``` + +### IEnumerable GetAllData(string keyOrPath,string key) + +获取文件中特定key值的全部数据。 + +- keyOrPath:文件的路径,或者读取后存储的key值。 + +- key:文件中的数据列表对应的key值。 + +```csharp +string Path1 = "SaveData/TestCsv.csv".GetGodotResPath(); +this.EGSave().LoadDataFile(Path1); +IEnumerable allResult = this.EGSave().GetAllData(Path1,""); +foreach(Customer customer in allResult){ + GD.Print(customer.Id +"|" + customer.Name); +} +``` + +### OpenResPath() + +打开godot对应的res文件夹 +### OpenUserPath() +打开godot对应的user文件夹 -# 接口说明 +# 接口说明与扩展建议 --- diff --git a/addons/EGFramework/Module/SaveTools/EGSave.cs b/addons/EGFramework/Module/SaveTools/EGSave.cs index 4273ff5..5e3107e 100644 --- a/addons/EGFramework/Module/SaveTools/EGSave.cs +++ b/addons/EGFramework/Module/SaveTools/EGSave.cs @@ -154,21 +154,21 @@ namespace EGFramework throw new Exception("File not loaded, you should use LoadDataFile(path) first."); } } - public TData GetData(string path,string key,int id) where TData : new(){ - if(DataBaseFiles.ContainsKey(path)){ - return DataBaseFiles[path].GetData(key,id); - }else if(DataBaseReadOnly.ContainsKey(path)){ - return DataBaseReadOnly[path].GetData(key,id); + public TData GetData(string keyOrPath,string key,int id) where TData : new(){ + if(DataBaseFiles.ContainsKey(keyOrPath)){ + return DataBaseFiles[keyOrPath].GetData(key,id); + }else if(DataBaseReadOnly.ContainsKey(keyOrPath)){ + return DataBaseReadOnly[keyOrPath].GetData(key,id); }else{ throw new Exception("File not loaded, you should use LoadDataFile(key) or ReadData(key,data) first."); } } - public IEnumerable GetAllData(string path,string key) where TData : new(){ - if(DataBaseFiles.ContainsKey(path)){ - return DataBaseFiles[path].GetAll(key); - }else if(DataBaseReadOnly.ContainsKey(path)){ - return DataBaseReadOnly[path].GetAll(key); + public IEnumerable GetAllData(string keyOrPath,string key) where TData : new(){ + if(DataBaseFiles.ContainsKey(keyOrPath)){ + return DataBaseFiles[keyOrPath].GetAll(key); + }else if(DataBaseReadOnly.ContainsKey(keyOrPath)){ + return DataBaseReadOnly[keyOrPath].GetAll(key); }else{ throw new Exception("File not loaded, you should use LoadDataFile(key) or ReadData(key,data) first."); }