坐标格式提取转换的两种方法C#Excel
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了坐标格式提取转换的两种方法C#Excel相关的知识,希望对你有一定的参考价值。
一、引言
受朋友之托,处理一份点云数据,格式:“X[m] Y[m] Z[m] R[dB] G[dB] B[dB]”,总共63w个点,转换成的格式是:“点名,,X[m], Y[m], Z[m]”。如果经常有坐标文件转换就使用代码方法,偶尔使用的话就使用Excel。用Excel的话,直接把后缀名改成.xlsx,接下来就是对整列进行插入、更改等事情了,最后另存为txt格式或者dat格式。
二、知识准备
1、文件读写
2、字符串处理
三、需要注意的地方
1、60几万个点,数据量还行,所以思路和数据结构要格外注意,能省则省。鄙人昨天走了弯路,拿19万个点测试时候花了0.75秒有点沾沾自喜,今天重新到回去看,写的什么玩意儿,把代码重新修改了一下,测试显示,19万个点0.45秒左右,63万个点1.15秒左右。
2、文件读写要注意文件流的打开与关闭。
四、代码
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 点云转pt { class Program { static void Main(string[] args) { //测时 Stopwatch st = new Stopwatch(); st.Start(); string wjming = "坐标" + "(" + DateTime.Now.ToString("yyyyMMddhhmmss") + ")"; string path = @"E:\C#\点云转pt2\点云转pt2\bin\Debug"; File.WriteAllText(path + "\\" + wjming + ".txt", null); List<坐标> result = diaoqu(@"C:\Users\Ouy_\Desktop\all-Octree (0.1).txt"); using (StreamWriter sw = new StreamWriter(wjming + ".txt")) { foreach (var item1 in result) { sw.WriteLine(item1.Name + ",," + item1.X + "," + item1.Y + "," + item1.H); } } st.Stop(); Console.WriteLine("OK!Time: " + st.Elapsed); } static List<坐标> diaoqu(string a) { FileStream fs = new FileStream(a, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader m_streamReader = new StreamReader(fs); m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin); int index = 0; string strLine = m_streamReader.ReadLine(); List<坐标> result = new List<坐标>(); // 从数据流中读取每一行,直到文件的最后一行 while (strLine != null) { string[] s = strLine.Split(‘ ‘);//txt文件格式分隔符 try { 坐标 pt = new 坐标((++index).ToString(), s[0], s[1], s[2]); result.Add(pt); strLine = m_streamReader.ReadLine(); } catch (Exception ex) { Console.Write(ex.ToString()); } } fs.Close(); m_streamReader.Close(); return result; } } class 坐标 { public string Name { get; set; } public string X { get; set; } public string Y { get; set; } public string H { get; set; } public 坐标(string name, string x, string y, string h) { Name = name; X = x; Y = y; H = h; } } }
以上是关于坐标格式提取转换的两种方法C#Excel的主要内容,如果未能解决你的问题,请参考以下文章