{"id":19991383,"url":"https://github.com/terrynoya/LiteCSV","last_synced_at":"2025-05-04T10:31:32.730Z","repository":{"id":143562342,"uuid":"174286439","full_name":"terrynoya/LiteCSV","owner":"terrynoya","description":"a lightweight csv table parser in C# mainly for unity but also use in .net","archived":false,"fork":false,"pushed_at":"2019-03-31T02:14:32.000Z","size":42,"stargazers_count":11,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-13T04:53:36.106Z","etag":null,"topics":["csharp","csv","dotnet","lightweight","parser","unity"],"latest_commit_sha":null,"homepage":null,"language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/terrynoya.png","metadata":{"files":{"readme":"Docs/README_CN.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-07T06:37:07.000Z","updated_at":"2022-08-09T04:11:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"79594c73-295b-4b0b-87ba-c4fb6797470c","html_url":"https://github.com/terrynoya/LiteCSV","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terrynoya%2FLiteCSV","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terrynoya%2FLiteCSV/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terrynoya%2FLiteCSV/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/terrynoya%2FLiteCSV/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/terrynoya","download_url":"https://codeload.github.com/terrynoya/LiteCSV/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252320316,"owners_count":21729105,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","csv","dotnet","lightweight","parser","unity"],"created_at":"2024-11-13T04:51:43.879Z","updated_at":"2025-05-04T10:31:32.723Z","avatar_url":"https://github.com/terrynoya.png","language":"C#","funding_links":[],"categories":["C\\#"],"sub_categories":[],"readme":"# LiteCSV\n轻量级csv解析类库，可以使用在unity和.net中\n=====\n# 如何使用\n\n# 读取\n假设addressbook.csv中需要处理以下内容\n\nId,Name,Desc,Data0,Data1,Data2\n\n1,User0,Todo,0,0.1,TRUE\n\n2,User1,Todo,1,0.2,FALSE\n\n3,User2,Todo,2,0.3,TRUE\n\n# 方法一 CSVFile-\u003eCSVMapper\n\n## 1.使用CSVfile读取csv\n```csharp\nTextAsset txtAssest = Resources.Load\u003cTextAsset\u003e(path);\nstring content = txtAssest.text;\nint dataStartLineNumber = 1;\nCSVFile file = new CSVFile(dataStartLineNumber);\nfile.Parse(content);\n```\n\nCSVFile构造函数中接受三个参数：\n\n\n**dataStartLineNumber**：数据从第几行开始，这个案例中数据从第二行开始，所以dataStartLineNumber=1。\n\n**lineToken**：行分隔符，默认是\"\\r\\n\"。\n\n**columnToken**：列分隔符，默认是\",\"。\n\n\n因此可以支持解析非csv风格的文件\n比如行分隔符是\"\\r\"，列分隔符是\"\\t\"。\n\nCSVFile会将行数据解析为CSVLine，所以CSVLine对应着相应的行数据\n\n## 2.序列化\n\n### a.新建一个AddressBookData.cs用来保存序列化的数据\n```csharp\npublic class AddressBookData\n{\n    public string Id;\n    public string Name;\n    public string Desc;\n    public string Data0;\n    public string Data1;\n    public string Data2;\n}\n```\n### b.新建并实现一个CSVParser的子类，读取CSLineData\n```csharp\npublic class AddressBookDataParser:CSVParser\n{\n    //在这里实现解析逻辑\n    public override object GetData(List\u003cstring\u003e datas)\n    {\n        AddressBookData rlt = new AddressBookData();\n        rlt.Id = datas[0];\n        rlt.Name = datas[1];\n        rlt.Desc = datas[2];\n        rlt.Data0 = datas[3];\n        rlt.Data1 = datas[4];\n        rlt.Data2 = datas[5];\n        return rlt;\n    }\n}\n```\n\n### c.使用CSVMapper.Map进行序列化\n\n```csharp\nList\u003cAddressBookData\u003e list = CSVMapper.Map\u003cAddressBookData\u003e(new AddressBookDataParser(), file);\n```\n\n# 方法二 直接使用CSVMapper\n\n如果你不需要保存csvfile的所有结构信息，也可以直接使用CSVMapper进行序列化\n\n```csharp\nCSVMapper.Map\u003cAddressBookData\u003e(new AddressBookDataParser(), content,1);\n```\n\n# 方法一和方法二的区别\n当你想要保存CSVFile的完整结构，比如Header信息，以便今后还可以将csvfile保存成文件的时候，使用方法一\n\n如果你不需要保存csvfile的所有结构信息，使用方法二\n\n方法二比方法一少遍历一次\n\n方法一因为需要构建CSVFile的信息，所以需要遍历一次，序列化时CSVMapper会再遍历一次。\n\n如果不希望2次遍历，请使用方法二\n\n# 反序列化，修改CSVFile内容和保存\n\n## 新建和实现CSVDataWriter的子类，用于将AdressBookData写回CSVLineData\n\n```csharp\n\npublic class AdressBookDataWriter:CSVDataWriter\n{\n    public override void SetData(object data, CSVLineData lineData)\n    {\n        AddressBookData abData = data as AddressBookData;\n        if (abData == null)\n        {\n            return;\n        }\n        lineData.Clear();\n        lineData.AddData(abData.Id);\n        lineData.AddData(abData.Name);\n        lineData.AddData(abData.Desc);\n        lineData.AddData(abData.Data0);\n        lineData.AddData(abData.Data1);\n        lineData.AddData(abData.Data2);\n    }\n}\n\n```\n\n## 保存单个AdressBookData\n\n修改第一行数据中的Name\n\n```csharp\n\nList\u003cAddressBookData\u003e list = CSVMapper.Map\u003cAddressBookData\u003e(new AddressBookDataParser(), file);\nAddressBookData data = list[0];\ndata.Name = \"modify\";\nAdressBookDataWriter writer = new AdressBookDataWriter();\nCSVLineData lineToModify = file.GetLineDataAt(0);\nwriter.SetData(data, lineToModify);\n\n\nstring finalCSVText = file.ToCSV();\n\n```\n\n你需要自己维护CSVFile中的数据行和序列化好的List\u003cAddressBookData\u003e的对应关系\n\n## 保存所有List中的AdressBookData\n\nList的行数和CSVFile中的行数不对应的情况下\n\n```csharp\n\nCSVMapper.ToCSV(new AdressBookDataWriter(),file,list);\nfinalCSVText = file.ToCSV();\n\n```\n\n调用CSVFile.ToCSV()就可以得到csv文本\n\n# 自动生成功能\n\n如果有上百行的数据的话，新建一个类然后手动添加属性是一个枯燥的工作，可以使用一下方法自动生成一个类文件内容\n\n\n```csharp\n\nCSVCSFileData classFileData = CSVCSFileCreator.CreateDataClassFile(\"AdBbookData\", file.GetHeaderAt(0));\n//这里是类的文件内容，你可以使用File.WriteAllText保存成cs文件\nDebug.Log(classFileData.SourceCode);\n\n```\n\n同样也可以生成一个Parser类\n```csharp\nCSVCSFileData parserClassFileData = CSVCSFileCreator.CreateParserClassFile(\"AdBbookData\", file);\nDebug.Log(parserClassFileData.SourceCode);\n```\n\n你也可以参考源代码实现方式，根据自己的需求编写生成类工具\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterrynoya%2FLiteCSV","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fterrynoya%2FLiteCSV","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fterrynoya%2FLiteCSV/lists"}