前提・実現したいこと
Unity内でCSVファイルの読み取りをトライしているのですが、行を読み取る際に列数が最大の列数に揃えられるため、入力していない部分に空白が挿入されてしまいます。
この空白をなんとかして消して空白部分は詰めるようにしたいのですが、自分で試した方法では上手くいきませんでした。
試したこと
ひとまず読み取りの際に列数が揃えられるのは回避できないみたいなので、
読み取った後にTrim()やReplace(" ","")やint.TryParseの際に例外を999に置き換え、その後にListからRemoveするなども試しましたが、削除できませんでした。
cs
1using System; 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using System.IO; 6 7public class CSVReadTest : MonoBehaviour 8{ 9 public string FileName; 10 private Dictionary<string,int[]> ReadValue; 11 void Start() 12 { 13 ReadFile(); 14 } 15 16 17 void ReadFile()//読み取った値の保持及び比較、発火を試す 2021年5月25日 18 { 19 20 ReadValue = new Dictionary<string, int[]>(); 21 22 FileInfo filePath = new FileInfo(Application.dataPath + "/" + FileName +".csv"); 23 #if UNITY_EDITOR 24 filePath = new FileInfo(Application.dataPath + "/CSVReader/" + FileName +".csv"); 25 #endif 26 27 if(!filePath.Exists) 28 return; 29 if(filePath.Extension != ".csv") 30 return; 31 32 string path = filePath.ToString(); 33 FileStream fs = new FileStream(path, FileMode.Open,FileAccess.Read, FileShare.ReadWrite); 34 // インスタンスを指定して開く 35 StreamReader sr = new StreamReader(fs); 36 int i = 0; 37 { 38 // 末尾まで繰り返す 39 while (sr.Peek() != -1) 40 { 41 Debug.Log("i" + i); 42 43 // CSVファイルの一行を読み込む 44 string line = sr.ReadLine().Replace(" ",""); 45 // 読み込んだ一行をカンマ毎に分けて配列に格納する 46 string[] values = line.Split(','); 47 48 List<int> flagValues = new List<int>(); 49 50 flagValues.AddRange(Array.ConvertAll(values, s => 51 { 52 int result = 0; 53 if(!int.TryParse(s, out result)) 54 { 55 result = 999; //変換対象が数字に置換できない場合に999をスローする 56 } 57 return result; 58 }) 59 ); 60 61 flagValues.Remove(999); 62 63 foreach(var item in flagValues) 64 { 65 Debug.Log(item);//確認用 66 } 67 i++; 68 } 69 } 70 } 71} 72
回答2件
あなたの回答
tips
プレビュー