座標格式提取轉換的兩種方法C#、Excel

來源:互聯網
上載者:User

標籤:

一、引言

      受朋友之託,處理一份點雲資料,格式:“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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.