加载读取CSV,txt逗号分格值文件

2024-04-23 00:38
文章标签 加载 读取 csv txt 逗号 分格

本文主要是介绍加载读取CSV,txt逗号分格值文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

游戏开发中,经常会使用到很多配置文件。适当的利用配置文件,可以有效实现程序设计的灵活性,避免对程序功能的不断修改,降低程序开发人员与策划人员之间的沟通成本,提高效率。

比如以下情景

一个玩家,初始hp200,初始mp200,攻击10

我们可以采用两种方案来完成,

左边 右边
组件里直接写代码
Player.HP=200;
Player.MP=200;
Player.Aggress=10;
ID,MP , HP , Aggress
1 ,200 , 200,10
组件里写代码
Player.HP = GetConfigValue(1,“HP”);
Player.MP=GetConfigValue(1,“MP”);
Player.Aggress=GetConfigValue(1,“Aggress”);

当策划(万恶的策划,本篇的主要反面人物)说哎呀,不行,玩家的初始HP要改成500。

从我们的出发点来衡量:

左边,灾难,玩家要再经历一次下载安装客户端的煎熬。

右边,只要让PlayerConfig更新到客户端,这就可以在玩家重启客户端的时候完成。

左边,不符合资源更新的精神。

右边,符合。

在这里我们写一个读取配置文件的工具类
using UnityEngine;
using System.Collections.Generic;public class ExcelData
{/// <summary>/// 读取加载TXT配置文件/// </summary>/// <param name="cfgName">配置表名称</param>/// <param name="DicContent"></param>public static void LoadExcelFormCSV(string cfgName, out Dictionary<string, Dictionary<string, string>> DicContent){//创建一个TextAsset,通过Resources.Load来加载配置表TextAsset tw = Resources.Load("Cfg/" + cfgName) as TextAsset;//存放数据表里面的所有内容string strLine = tw.text;//创建一个字典,用于存放数据表的内容(从配置表第四行读取)//<字段名,字段值(string数组)>Dictionary<string, string[]> content = new Dictionary<string, string[]>();//开始解析字符串ExplainString(strLine, content, out DicContent);}/// <summary>/// 解析字符串/// </summary>/// <param name="strLine">配置文件字符串</param>/// <param name="content">数据表内容</param>/// <param name="DicContent"></param>public static void ExplainString(string strLine, Dictionary<string, string[]> content, out Dictionary<string, Dictionary<string, string>> DicContent){//创建一个字典,用于存放默认值的//<字段名,默认值>Dictionary<string, string> initNum = new Dictionary<string, string>();//通过换行符来切割配置表里面的内容,使之成为一行一行的数据string[] lineArray = strLine.Split(new char[] { '\n' });//获取行数int rows = lineArray.Length - 1;//最后一行包含换行符,行数需要因此减去1//获取列数int Columns = lineArray[0].Split(new char[] { ',' }).Length;//定义一个数组用于存放字段名string[] ColumnName = new string[Columns];for (int i = 0; i < rows; i++){//每一行数据都根据逗号进行分割,得到一个数组string[] Array = lineArray[i].Split(new char[] { ',' });for (int j = 0; j < Columns; j++){//获取Array的列的值string nvalue = Array[j].Trim();//第一行字段名if (i == 0){//存储字段名ColumnName[j] = nvalue;//实例化字典,长度为rows - 3,因为是从第四行读取content[ColumnName[j]] = new string[rows - 3];}//if (i == 1)//此时是读到配置表的第二行(字段的注释),不做处理,配置表所填的值,类型都为string//{                  //}else if (i == 2)//第三行默认值{//存储对应字段的默认值//<字段名,默认值>initNum[ColumnName[j]] = nvalue;}else if (i >= 3)//第三行开始是实际数据,存储实际数据{//<字段名,字段值(string数组)>content[ColumnName[j]][i - 3] = nvalue;if (nvalue == "")//如果读到的值为空字符,则给予默认值(默认值就是配置表第三行所填的值){content[ColumnName[j]][i - 3] = initNum[ColumnName[j]];//<字段名,字段值(string数组)>}}}}//开始解析ExplainDictionary(content, out DicContent);}/// <summary>/// 解析字典中的数据/// </summary>/// <param name="content"></param>/// <param name="DicContent"></param>public static void ExplainDictionary(Dictionary<string, string[]> content, out Dictionary<string, Dictionary<string, string>> DicContent){//实例化字典//<字段名><<ID><字段值>>DicContent = new Dictionary<string, Dictionary<string, string>>();//获取字典中所有的键(字段名)Dictionary<string, string[]>.KeyCollection Allkeys = content.Keys;//遍历所有的字段名foreach (string key in Allkeys){//实例化一个hasData的字典//<ID,字段值>Dictionary<string, string> hasData = new Dictionary<string, string>();//获取当前遍历到的key(字段名)所对应的字段值,存到数组里面string[] Data = content[key];//循环这个数组for (int i = 0; i < Data.Length; i++){//<ID><字段值>hasData[content["ID"][i]] = Data[i];}//最后给DicContent这个字典赋值DicContent[key] = hasData;//<字段名><<ID><字段值>>}}}

注释写的非常清楚就再一一解释了,在使用的时候我们需要调用ExcelData.LoadExcelFormCSV("TextCfg",out m_DicLanguageText) 传入我们需要加载的配置文件,第二个参数传入我们的字典 Dictionary<string, Dictionary<string, string>> m_DiclText;

需要注意这里我们的配置文件是存放在Resources/Cfg目录下的

这里写出一个配置文件的例子:

ID,ChineseText,EnglishText
//流水id,//中文,//英文
-1,-1,-1
1,关卡,Level
2,背包,Packsack


当我们需要获取配置表中数据时只需要通过获取字典的键值对方法就可以寄读取了

   /// <summary>/// 读取数据的方法/// </summary>/// <param name="keyWord">字段名</param>/// <param name="id">物品ID</param>/// <returns></returns>public string ReadData(string keyWord,int id, Dictionary<string, Dictionary<string, string>> theDic){return theDic[keyWord][id.ToString()];}

获取配置表中的数据量:

    /// <summary>/// 获得配置表的数据量/// </summary>/// <param name="theDic">配置表</param>/// <returns></returns>public int GetInforCount(Dictionary<string, Dictionary<string, string>> theDic){int count = 0;foreach (KeyValuePair<string,Dictionary<string,string>> item in theDic){count = item.Value.Count;break;}return count;}




这篇关于加载读取CSV,txt逗号分格值文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/927318

相关文章

spring-boot-starter-thymeleaf加载外部html文件方式

《spring-boot-starter-thymeleaf加载外部html文件方式》本文介绍了在SpringMVC中使用Thymeleaf模板引擎加载外部HTML文件的方法,以及在SpringBoo... 目录1.Thymeleaf介绍2.springboot使用thymeleaf2.1.引入spring

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

Java读取InfluxDB数据库的方法详解

《Java读取InfluxDB数据库的方法详解》本文介绍基于Java语言,读取InfluxDB数据库的方法,包括读取InfluxDB的所有数据库,以及指定数据库中的measurement、field、... 首先,创建一个Java项目,用于撰写代码。接下来,配置所需要的依赖;这里我们就选择可用于与Infl

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要