Unity处理CSV文本文件

CSV格式即为只用逗号分隔数据的文本格式

例如我们提供一个文本:

11,12,,,,,,,

*,*,*,*,*
*,*,c,*,*
*,0,0,0,*
*,*,*,*,*
	private void LoadFromAsset(TextAsset asset)
	{
		//TextAsset 继承于UnityEngine.Object,可以存储文本信息
		
		m_mapData.offset_x = MAP_ORIGIN_X;
		m_mapData.offset_z = MAP_ORIGIN_Z;
		
		if (asset != null) {
			string txtMapData = asset.text;
			// 将空元素删除的选项
			System.StringSplitOptions	option = System.StringSplitOptions.RemoveEmptyEntries;
			// 用换行符将每行切割开,并存入数组
			string[] lines = txtMapData.Split(new char[] {'\r','\n'},option);
			//string.split是c#的方法,用接受的字符或字符数组,对目标进行分割。这里是把换行符和回车符当做分隔符
			//因为可能会割出空元素所以需要额外的option删除空元素
			
			// 用“,”将每个字符分割开
			char[] spliter = new char[1] {','};

			// 处理输入数据的第一行
			//再用一次split用逗号做分隔符切割目标字符串
			string[]	sizewh = lines[0].Split(spliter,option);
			//int.parse, c#的只能类型转换
			m_mapData.width  = int.Parse(sizewh[0]);
			m_mapData.length = int.Parse(sizewh[1]);

			char[,] 	mapdata = new char[m_mapData.length,m_mapData.width];

			for(int lineCnt = 0;lineCnt < m_mapData.length;lineCnt++) {

				// 为了保证文本文件中即使指定了特别大的值也不会出问题
				// 进行检测
				if (lines.Length <= lineCnt+1)
					break;

				// 用“,”将每个字符分割开
				string[] data = lines[m_mapData.length-lineCnt].Split(spliter,option);

				for (int col = 0; col < m_mapData.width; col++) {

					if (data.Length <= col)
						break;

					mapdata[lineCnt,col] = data[col][0];
				}
			}
			m_mapData.data = mapdata;
		} else {
			Debug.LogWarning("Map data asset is null");
		}
	}


猜你喜欢

转载自blog.csdn.net/keven2148/article/details/79547476