Test.csv ※UTF-8Unity記事: 目次
1 2 3 4 5 |
Tim,100 Mike,200 Sam,300 Victor,400 Davey,500 |
CsvLoader.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
using System.Collections; using System.Collections.Generic; using System.IO; using System.Text; using UnityEngine; using UnityEngine.Networking; /// <summary> /// /// Unity 2019.1.8f1 /// /// UTF-8でCSVを扱えるソフト : LibreOffice /// /// </summary> public class CsvLoader : MonoBehaviour { ///////////////////////////////////////////////////////////////////////////////////// // Field //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// // CSVファイルを置いているディレクトリのURL http://YOUR_WEB_SERVER/CSV/ private readonly string ServerURL = "https://gamefbb.com/wp-content/uploads/WebGL/Data/"; ///////////////////////////////////////////////////////////////////////////////////// // Start //////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// // Start is called before the first frame update private void Start() { // Test.csvからTimさんのスコアを取得 StartCoroutine(GetScore("Test", "Tim")); } ///////////////////////////////////////////////////////////////////////////////////// // Get Score //////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// private IEnumerator GetScore(string fileName, string userName) { // 1. ダウンロード yield return DownloadCSV(fileName); // 2. 読み込み List<string[]> recordList = ReadCSV(fileName); // 3. データの取り出し foreach (string[] fields in recordList) { // [0]UserName, [1]Score if (fields[0] == userName) { Debug.Log(userName + "'s Score : " + fields[1]); } } } ///////////////////////////////////////////////////////////////////////////////////// // Download ///////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// private IEnumerator DownloadCSV(string fileName) { // ダウンロード UnityWebRequest csvDownload = UnityWebRequest.Get(ServerURL + fileName + ".csv"); yield return csvDownload.SendWebRequest(); // 失敗時 if (!string.IsNullOrEmpty(csvDownload.error)) { Debug.Log("取得失敗", gameObject); } // 成功時 else { // ファイル作成 string filePath = Path.Combine(Application.persistentDataPath, fileName); File.WriteAllBytes(filePath, csvDownload.downloadHandler.data); } } ///////////////////////////////////////////////////////////////////////////////////// // Read ///////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////// private List<string[]> ReadCSV(string fileName) { // ファイルパス string filePath = Path.Combine(Application.persistentDataPath, fileName); // 読み込み string csvText = File.ReadAllText(filePath, Encoding.GetEncoding("utf-8")); StringReader stringReader = new StringReader(csvText); List<string[]> recordList = new List<string[]>(); while (stringReader.Peek() > -1) { // 1行を取り出す string record = stringReader.ReadLine(); // カンマ区切りの値を配列に格納 string[] fields = record.Split(','); // リストに追加 recordList.Add(fields); } // ファイル削除 File.Delete(filePath); // StringReaderを閉じる stringReader.Close(); // リストで出力 return recordList; } } |