From 2ed83eaa9bab5983dcc383b4fc17215b6bd89779 Mon Sep 17 00:00:00 2001 From: jkpete <1031139173@qq.com> Date: Fri, 25 Oct 2024 17:38:27 +0800 Subject: [PATCH] fixed doc and add findData --- Example/UsingTest/Script/EGSaveTest.cs | 6 +- addons/EGFramework/Manual/EGSave.md | 118 ++++++++++++++---- addons/EGFramework/Module/SaveTools/EGSave.cs | 10 ++ 3 files changed, 107 insertions(+), 27 deletions(-) diff --git a/Example/UsingTest/Script/EGSaveTest.cs b/Example/UsingTest/Script/EGSaveTest.cs index d02cc4f..f6cbbce 100644 --- a/Example/UsingTest/Script/EGSaveTest.cs +++ b/Example/UsingTest/Script/EGSaveTest.cs @@ -57,7 +57,11 @@ namespace EGFramework.Examples.Test{ string Path1 = "SaveData/TestCsv.csv".GetGodotResPath(); this.EGSave().LoadDataFile(Path1); - this.EGSave().SetData(Path1,"Customer1",new Customer() { Name = "Andy" },9); + IEnumerable allResult = this.EGSave().FindData(Path1,"",cus=>cus.Id==0); + foreach(Customer customer in allResult){ + GD.Print(customer.Id +"|" + customer.Name); + } + // 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); diff --git a/addons/EGFramework/Manual/EGSave.md b/addons/EGFramework/Manual/EGSave.md index b9bc1a9..4e44411 100644 --- a/addons/EGFramework/Manual/EGSave.md +++ b/addons/EGFramework/Manual/EGSave.md @@ -50,7 +50,7 @@ public partial class EGSaveTest : Node,IEGFramework{ --- -# EGSave +# EGSave 使用说明 ## 属性 @@ -58,23 +58,24 @@ public partial class EGSaveTest : Node,IEGFramework{ ## 方法 -| 方法名 | 简介 | -| ----------------------------------------------------------------- | ---------------- | -| void LoadDataFile(string path) | 加载数据文件(需要路径) | -| void ReadData(string key,string data) | 读取数据(需获取字符串原始值) | -| void ReadData(string key,byte[] data) | 读取数据(需获取字节流原始值) | -| void LoadObjectFile(string path) | 加载对象文件(需要路径) | -| void ReadObject(string key,string data) | 读取对象(需获取字符串原始值) | -| void ReadObject(string key,byte[] data) | 读取对象(需获取字节流原始值) | -| void Unload(string keyOrPath) | 卸载数据 | -| List GetKeys() | 获取所有加载过的key或者路径值 | -| 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 keyOrPath,string key,int id) | 获取单个数据(读取文件) | -| IEnumerable GetAllData(string keyOrPath,string key) | 获取全部数据(读取文件) | -| OpenResPath() | 打开Res文件目录 | -| OpenUserPath() | 打开User文件目录 | +| 方法名 | 简介 | +| -------------------------------------------------------------------------------------------------------- | ---------------- | +| void LoadDataFile(string path) | 加载数据文件(需要路径) | +| void ReadData(string key,string data) | 读取数据(需获取字符串原始值) | +| void ReadData(string key,byte[] data) | 读取数据(需获取字节流原始值) | +| void LoadObjectFile(string path) | 加载对象文件(需要路径) | +| void ReadObject(string key,string data) | 读取对象(需获取字符串原始值) | +| void ReadObject(string key,byte[] data) | 读取对象(需获取字节流原始值) | +| void Unload(string keyOrPath) | 卸载数据 | +| List GetKeys() | 获取所有加载过的key或者路径值 | +| 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 keyOrPath,string key,int id) | 获取单个数据(读取文件) | +| IEnumerable GetAllData(string keyOrPath,string key) | 获取全部数据(读取文件) | +| IEnumerable FindData(string keyOrPath,string key,Expression> expression) | 查找符合条件的对应数据 | +| OpenResPath() | 打开Res文件目录 | +| OpenUserPath() | 打开User文件目录 | ## 扩展方法 @@ -219,8 +220,6 @@ Customer customer = this.EGSave(). GetObject("Data1.json","Customer1"); ``` - - ### SetData(string path,string dataKey,TData data,int id) 把一条数据写入文件中的指定位置。特别注意,如果写入的位置超出了文件中的数据量,则会进行追加数据,否则覆盖对应位置的数据。 @@ -242,9 +241,7 @@ this.EGSave().SetData(Path1,"Customer1",     new Customer() { Name = "Andy" },9); ``` - - -### TData GetData(string keyOrPath,string key,int id) +### T GetData(string keyOrPath,string key,int id) 获取文件中特定key值的列表里,第x条数据。 @@ -278,6 +275,25 @@ foreach(Customer customer in allResult){ } ``` +### IEnumerable FindData (string keyOrPath,string key,Expression> expression) + +查找文件中特定key值的全部符合条件的数据。 + +- keyOrPath:文件的路径,或者读取后存储的key值。 + +- key:文件中的数据列表对应的key值。 + +- Expression : 查询条件 + +```csharp +string Path1 = "SaveData/TestCsv.csv".GetGodotResPath(); +this.EGSave().LoadDataFile(Path1); +IEnumerable findResult = this.EGSave().FindData(Path1,"",cus=>cus.Id==0); +foreach(Customer customer in findResult){ + GD.Print(customer.Id +"|" + customer.Name); +} +``` + ### OpenResPath() 打开godot对应的res文件夹 @@ -286,7 +302,7 @@ foreach(Customer customer in allResult){ 打开godot对应的user文件夹 -# 接口说明与扩展建议 +# IEGSave 接口说明与扩展建议 --- @@ -301,8 +317,8 @@ foreach(Customer customer in allResult){ | IEGSave | 读写数据加载 | | IEGSaveReadOnly | 只读数据加载 | | IEGSaveObjectReadOnly | 只读对象 | -| IEGSaveDataReadOnly | 只读数据 | | IEGSaveObject | 读写对象 | +| IEGSaveDataReadOnly | 只读数据 | | IEGSaveData | 读写数据 | ## IEGSave @@ -313,8 +329,58 @@ foreach(Customer customer in allResult){ ### 方法说明 -void InitSaveFile(string path) +### void InitSaveFile(string path) > 通过文件路径加载存储文件 ## IEGSaveReadOnly + +只读文件的数据加载接口,通过字符串或者字节流加载成对应的数据对象。 + +### void InitReadOnly(string data); + +> 通过字符串加载文件内容,需要先从文本文件中读取,请求服务或者其他方式获取内容。 + +### void InitReadOnly(byte[] data); + +> 通过字节流加载文件内容,需要先从字节流文件中读取,请求服务或者其他方式获取内容。 + +## IEGSaveObjectReadOnly + +只读对象文件的获取数据接口 + +### T GetObject(string objectKey) where T: new(); + +> 通过键获取对应的对象,如果是单个对象文件的话,则传空字符串即可。 + +## IEGSaveObject : IEGSaveObjectReadOnly + +对象文件的获取&写入数据接口 + +### void SetObject(string objectKey,T obj); + +> 将key值与key对应的对象写入到该文件下。 + +## IEGSaveDataReadOnly + +只读数据文件的获取数据接口 + +### T GetData(string dataKey,object id) where T : new(); + +> 用于获取指定条目的数据对象。 + +### IEnumerable GetAll(string dataKey) where T : new(); + +> 用于获取key值下的所有列表数据 + +### IEnumerable FindData(string dataKey,Expression> expression) where T : new(); + +> 用于查找key值下的所有满足条件的列表数据 + +## IEGSaveData + +数据文件的获取&写入数据接口 + +### void SetData(string dataKey,TData data,object id); + +> 将key值与key对应的对象的写入到该文件对应的位置(id)下,如果存在数据则进行覆盖。 diff --git a/addons/EGFramework/Module/SaveTools/EGSave.cs b/addons/EGFramework/Module/SaveTools/EGSave.cs index 5e3107e..c6a0b9e 100644 --- a/addons/EGFramework/Module/SaveTools/EGSave.cs +++ b/addons/EGFramework/Module/SaveTools/EGSave.cs @@ -174,6 +174,16 @@ namespace EGFramework } } + public IEnumerable FindData(string keyOrPath,string key,System.Linq.Expressions.Expression> expression) where TData : new(){ + if(DataBaseFiles.ContainsKey(keyOrPath)){ + return DataBaseFiles[keyOrPath].FindData(key,expression); + }else if(DataBaseReadOnly.ContainsKey(keyOrPath)){ + return DataBaseReadOnly[keyOrPath].FindData(key,expression); + }else{ + throw new Exception("File not loaded, you should use LoadDataFile(key) or ReadData(key,data) first."); + } + } + //------------------------------------------------------------------------------//