[Unity3D·CSV篇]01.CSV新手級讀取
阿新 • • 發佈:2019-01-02
CSV檔案的讀取是非常簡單的,本篇木頭就給CSV新手簡單又詳細地吹吹水,阿不是,詳細地聊聊如何讀取CSV檔案。 Assets\StreamingAssets目錄下,千萬記住,這一步不能忘記,否則無法讀取檔案。 我們再來回憶一下CSV檔案的內容:
1. 建立CSV檔案
首先,用Ron’s Editor建立一個新的CSV檔案,不要問我怎麼建立,這個常識大家應該有。或者用記事本新建一個文字檔案,然後把字尾改為.CSV,不改也行,這個不影響。然後點選【檔案】->【另存為】,編碼選擇UTF-8。(Ron’s Editor不需要這麼做)然後給CSV檔案隨便輸點內容,比如:檔案內容是這樣的:
ID,Name1,笨木頭與遊戲開發2,www.benmutou.com3,轉載請註明出處你也可以直接下載木頭的CSV檔案:最後將CSV檔案放到Unity專案的
2. 讀取檔案,儲存成一行行的字串
我的讀取方式是, 把檔案按行讀取,然後再解析每一行的內容,最終以行為單位,儲存CSV檔案。先來解決讀取檔案的問題,如下程式碼:- /* CSV檔案路徑 */
- string filePath = Application.streamingAssetsPath + "/CSVDemo.csv";
- /* 讀取CSV檔案,一行行讀取 */
- string[] fileData = File.ReadAllLines(filePath);
3. Key欄位行和資料行
ID,Name1,笨木頭與遊戲開發2,www.benmutou.com3,轉載請註明出處檔案的第一行是什麼?是每一列資料的欄位名,當然,檔案內容是我們自己定義的,只是一般情況下第一行都是欄位行。Ron’s Editor預設也是這麼做的。從第二行開始就真正的資料行了,我們來試試讀取欄位,並輸出內容:
- /* CSV檔案路徑 */
- string filePath = Application.streamingAssetsPath + "/CSVDemo.csv";
- /* 讀取CSV檔案,一行行讀取 */
- string[]
- /* CSV檔案的第一行為Key欄位,先讀取key欄位 */
- string[] keys = fileData[0].Split(',');
- /* 第二行開始是資料 */
- for (int i = 1; i < fileData.Length; i++)
- {
- /* 每一行的內容都是逗號分隔,讀取每一列的值 */
- string[] lineData = fileData[i].Split(',');
- for (int j = 0; j < lineData.Length; j++)
- {
- Debug.Log("key:" + keys[j] + ",value:" + lineData[j] + "\n");
- }
- }
4. 與CSV檔案對應的類
為了把CSV檔案儲存起來,我們需要有一個類,這個類的結構與CSVDemo.csv檔案要完全對應。如下程式碼所示:- public class CSVDemo
- {
- public int ID { get; set; }
- public string Name { get; set; }
- }
5. 儲存CSV檔案為物件
既然key欄位和value欄位的關係已經能確定了,那要儲存起來就很簡單了,如下程式碼:- /* CSV檔案路徑 */
- string filePath = Application.streamingAssetsPath + "/CSVDemo.csv";
- /* 讀取CSV檔案,一行行讀取 */
- string[] fileData = File.ReadAllLines(filePath);
- /* 把CSV檔案按行存放,每一行的ID作為key值,內容作為value值 */
- Dictionary<int, CSVDemo> csvDataDic = new Dictionary<int, CSVDemo>();
- /* CSV檔案的第一行為Key欄位,先讀取key欄位 */
- string[] keys = fileData[0].Split(',');
- /* 第二行開始是資料 */
- for (int i = 1; i < fileData.Length; i++)
- {
- /* 每一行的內容都是逗號分隔,讀取每一列的值 */
- string[] lineData = fileData[i].Split(',');
- /* CSVDemo類與CSVDemo.csv檔案的key欄位一一對應,用於儲存每一行的資料內容 */
- CSVDemo csvDemo = new CSVDemo();
- for (int j = 0; j < lineData.Length; j++)
- {
- if(keys[j] == "ID")
- {
- csvDemo.ID = Convert.ToInt32(lineData[j]);
- }
- else if(keys[j] == "Name")
- {
- csvDemo.Name = lineData[j];
- }
- }
- /* 儲存每一行ID和資料物件的關係 */
- csvDataDic[csvDemo.ID] = csvDemo;
- }
- /* 測試讀取ID為1的資料 */
- CSVDemo csvDemo1 = csvDataDic[1];
- Debug.Log("ID=" + csvDemo1.ID + ",Name=" + csvDemo1.Name);