最新国产在线视频_一色一伦一区二区三区的区别_欧美成人影院亚洲综合图_国产亚洲一区精品_大胆欧美熟妇xxbbwwbw高潮了_久久午夜无码鲁丝片

  • 您的位置:首頁 > 新聞動態 > Unity3D

    UNITY3D讀寫CVS格式文件錄制與存儲數據手套數據

    2019/11/12??????點擊:
    說明:

    1.寫入一個單元格時,如果含有逗號,則需要將整個字段用雙引號括起來;如果里面還有雙引號就替換成兩個雙引號。

    2.寫入一行時,末尾要加上\r\n作為行分隔符。

    3.讀取時,也要根據上面的寫入規則進行解析。

    直接看代碼:

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    
    public class CSVTool {
    
        private static char _csvSeparator = ',';
        private static bool _trimColumns = false;
    
        //獲取一個單元格的寫入格式
        public static string GetCSVFormat(string str)
        {
            string tempStr = str;
            if (str.Contains(","))
            {
                if (str.Contains("\""))
                {
                    tempStr = str.Replace("\"", "\"\"");
                }
                tempStr = "\"" + tempStr + "\"";
            }
            return tempStr;
        }
    
        //獲取一行的寫入格式
        public static string GetCSVFormatLine(ListstrList)
        {
            string tempStr = "";
            for (int i = 0; i < strList.Count - 1; i++)
            {
                string str = strList[i];
                tempStr = tempStr + GetCSVFormat(str) + ",";
            }
            tempStr = tempStr + GetCSVFormat(strList[strList.Count - 1]) + "\r\n";
            return tempStr;
        }
    
        //解析一行
        public static ListParseLine(string line)
        {
            StringBuilder _columnBuilder = new StringBuilder();
            ListFields = new List();
            bool inColumn = false;  //是否是在一個列元素里
            bool inQuotes = false;  //是否需要轉義
            bool isNotEnd = false;  //讀取完畢未結束轉義
            _columnBuilder.Remove(0, _columnBuilder.Length);
            //空行也是一個空元素,一個逗號是2個空元素
            if (line == "")
            {
                Fields.Add("");
            }
            // Iterate through every character in the line
            for (int i = 0; i < line.Length; i++)
            {
                char character = line[i];
                // If we are not currently inside a column
                if (!inColumn)
                {
                    // If the current character is a double quote then the column value is contained within
                    // double quotes, otherwise append the next character
                    inColumn = true;
                    if (character == '"')
                    {
                        inQuotes = true;
                        continue;
                    }
                }
                // If we are in between double quotes
                if (inQuotes)
                {
                    if ((i + 1) == line.Length)//這個字符已經結束了整行
                    {
                        if (character == '"') //正常轉義結束,且該行已經結束
                        {
                            inQuotes = false;
                            continue;     //當前字符不用添加,跳出后直結束后會添加該元素
                        }
                        else //異常結束,轉義未收尾
                        {
                            isNotEnd = true;
                        }
                    }
                    else if (character == '"' && line[i + 1] == _csvSeparator) //結束轉義,且后面有可能還有數據
                    {
                        inQuotes = false;
                        inColumn = false;
                        i++; //跳過下一個字符
                    }
                    else if (character == '"' && line[i + 1] == '"') //雙引號轉義
                    {
                        i++; //跳過下一個字符
                    }
                    else if (character == '"') //雙引號單獨出現(這種情況實際上已經是格式錯誤,為了兼容可暫時不處理)
                    {
                        throw new Exception("格式錯誤,錯誤的雙引號轉義");
                    }
                    //其他情況直接跳出,后面正常添加
                }
                else if (character == _csvSeparator)
                    inColumn = false;
                // If we are no longer in the column clear the builder and add the columns to the list
                if (!inColumn) //結束該元素時inColumn置為false,并且不處理當前字符,直接進行Add
                {
                    Fields.Add(_trimColumns ? _columnBuilder.ToString().Trim() : _columnBuilder.ToString());
                    _columnBuilder.Remove(0, _columnBuilder.Length);
                }
                else // append the current column
                    _columnBuilder.Append(character);
            }
            //(標準格式一行結尾不需要逗號結尾,而上面for是遇到逗號才添加的,為了兼容還要添加一次)
            if (inColumn)
            {
                if (isNotEnd)
                {
                    _columnBuilder.Append("\r\n");
                }
                Fields.Add(_trimColumns ? _columnBuilder.ToString().Trim() : _columnBuilder.ToString());
            }
            else  //如果inColumn為false,說明已經添加,一個字符為分隔符,所以后面要加上一個空元素
            {
                Fields.Add("");
            }
            return Fields;
        }
        //讀取文件
        public static ListRead(string filePath, Encoding encoding)
        {
            Listresult = new List();
            string content = File.ReadAllText(filePath, encoding);
            string[] lines = content.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
            for (int i = 0; i < lines.Length; i++)
            {
                Listline = ParseLine(lines[i]);
                result.Add(line);
            }
            return result;
        }
        //寫入文件
        public static void Write(string filePath, Encoding encoding, Listresult)
        {
            StringBuilder builder = new StringBuilder();
            for (int i = 0; i < result.Count; i++)
            {
                Listline = result[i];
                builder.Append(GetCSVFormatLine(line));
            }
            File.WriteAllText(filePath, builder.ToString(), encoding);
        }
    
        //打印
        public static void Debug(Listresult)
        {
            for (int i = 0; i < result.Count; i++)
            {
                Listline = result[i];
                for (int j = 0; j < line.Count; j++)
                {
                    UnityEngine.Debug.LogWarning(line[j]);
                }
            }
        }
    }

    關于UNITY的路徑有4個類型:

    Application.dataPath:該路徑指向我們Unity編輯器的Asset文件夾

    Application.persistentDataPath:該路徑指向iOS和Android的沙盒路徑

    Application.streamingAssetsPath:streamingAsset文件夾路徑,在任何平臺都可以通過這個路徑讀取到文件夾里的內容

    Application.temporaryCachePath:臨時數據文件路徑


    主站蜘蛛池模板: 日本成人在线不卡一区二区三区 | 无码中文字幕日韩专区视频 | 八戒八戒神马影院在线4 | 色老板最新地址入口处 | 在线看一区二区三区 | 中文在线视频 | 日韩精品无码视频一区二区三区 | 伊人久久综合精品一区二区三区 | 最新理论三级中文在线观看 | 久久国产夜色精品鲁鲁99 | 最近中文字幕在线视频 | 99久久全国免费观看 | 欧美最猛性开放2ovideosr | JAPANESEVIDEOS中国少妇 | 福利免费在线网站 | 无码做爰欢H肉动漫网站在线看 | 亚洲精品av无码重口另类 | 日本三级高清 | 久久亚洲私人国产精品 | 97精品人妻一区二区三区香蕉 | 久久久久国产免费 | 国产制服丝袜在线无码 | 最近中文字幕日本 | 国产精品扒开腿做爽爽爽A片小说 | 一本大道香蕉大在线中文 | 亚洲av无码国产一区二区 | AAAAA少妇高潮大片 | 国产各种高潮合集在线观看 | 俺去俺来也在线WWW色官网 | 欧美日韩激情视频在线观看 | 超级碰在线视频99 | 厨房挺进紧致班主任少妇 | 成年美女黄网站色大片免费看老狼 | 亚洲AV成人影视网 | 亚洲综合无码AV一区二区三区 | 国产矿转码专一2023 | 午夜福利理论片在线观看播放 | 欧美三级中文字幕在线观看 | 国内精自线一二区永久 | 成全视频免费高清观看在线动漫 | 国产精品香蕉在线观看不卡 |