//****************************************************************************** /* * 文字列リストからTSDataを設定 */ //****************************************************************************** public bool GetSaveData(List <string> rd) { if (data == null) { return(false); } if (rd.Count <= 1) { return(false); } if (rd[0] != D_Header) { return(false); } int endIdx = FindEnd(rd); //--------- //コメントブロックを読み取る List <string> cmt = new List <string>(); Lines ln = FindBlock(rd, D_Comment); if ((ln.start >= 2) && (ln.start <= ln.end)) { for (int i = ln.start; i <= ln.end; i++) { cmt.Add(rd[i].Trim()); } if (cmt.Count >= 2) { for (int i = cmt.Count - 1; i >= 1; i--) { if ((cmt[i] == "") && (cmt[i - 1] == "")) { cmt.RemoveAt(i); } } } } //コメントは無くてもOK //--------- //パラメータブロックを読み取る ln = FindBlock(rd, D_Param); List <ard_prms> prms = new List <ard_prms>(); if ((ln.start >= 2) && (ln.start <= ln.end)) { for (int i = ln.start; i <= ln.end; i++) { string s = rd[i].Trim(); string[] sa = s.Split('\t'); if (sa.Length >= 2) { if ((sa[0] != "") && (sa[1] != "")) { prms.Add(new ard_prms(sa[0], sa[1])); } } } } else { //無かったらエラー return(false); } //FrameCount/CellCountは先に確保 int idx = FindArd_prms(prms, D_LayerCount); if (idx < 0) { return(false); } int cellCount = prms[idx].GetValueInt(0); if (cellCount <= 0) { return(false); } idx = FindArd_prms(prms, D_FrameCount); if (idx < 0) { return(false); } int frameCount = prms[idx].GetValueInt(0); if (frameCount <= 0) { return(false); } //--------- //CellCaption ln = FindBlock(rd, D_CellName); string[] cellName = new string[cellCount]; if ((ln.start >= 2) && (ln.start <= ln.end)) { for (int i = ln.start; i <= ln.end; i++) { string s = rd[i].Trim(); string[] sa = s.Split('\t'); if (sa.Length >= 2) { int frm; if (Int32.TryParse(sa[0], out frm)) { cellName[frm] = sa[1]; } } } } //--------- //Memo ln = FindBlock(rd, D_Memo); string[] mm = new string[frameCount]; if ((ln.start >= 2) && (ln.start <= ln.end)) { for (int i = ln.start; i <= ln.end; i++) { string s = rd[i].Trim(); string[] sa = s.Split('\t'); if (sa.Length >= 2) { int frm; if (Int32.TryParse(sa[0], out frm)) { if (frm >= 1) { mm[frm - 1] = sa[1]; } } } } } //--------- //FrameEnabled; ln = FindBlock(rd, D_FrameEnabled); int[] frameEnabled = new int[frameCount]; if ((ln.start >= 2) && (ln.start <= ln.end)) { for (int i = 0; i < frameCount; i++) { frameEnabled[i] = -100; } for (int i = ln.start; i <= ln.end; i++) { string s = rd[i].Trim(); string[] sa = s.Split('\t'); if (sa.Length >= 2) { int frm; if (Int32.TryParse(sa[0], out frm)) { if (frm >= 1) { int v; if (Int32.TryParse(sa[1], out v)) { if (v == 0) { v = 0; } else { v = -1; } frameEnabled[frm - 1] = v; } } } } } //フレームを増やす if (frameEnabled[0] == -100) { frameEnabled[0] = 0; } for (int i = 1; i < frameCount; i++) { if (frameEnabled[i] == -100) { frameEnabled[i] = frameEnabled[i - 1]; } } } //--------- ln = FindBlock(rd, D_CellDataStart); int[][] cd = new int[cellCount][]; for (int i = 0; i < cellCount; i++) { cd[i] = new int[frameCount]; for (int j = 0; j < frameCount; j++) { cd[i][j] = -1; } } if ((ln.start >= 2) && (ln.start <= ln.end)) { int targetCell = 0; for (int i = ln.start; i <= ln.end; i++) { string s = rd[i].Trim(); string[] sa = s.Split('\t'); if (sa.Length >= 2) { if (String.Compare(sa[0], D_Cell) == 0) { int v; if (Int32.TryParse(sa[1], out v)) { if (v >= 0) { targetCell = v; } } } else if (String.Compare(sa[0], D_CellEnd, true) == 0) { targetCell = -1; } else { if ((targetCell >= 0) && (targetCell < cellCount)) { int frm; if (Int32.TryParse(sa[0], out frm)) { frm--; //AE_Remapは1スタート if ((frm >= 0) && (frm < frameCount)) { int v; if (Int32.TryParse(sa[1], out v)) { if (v < 0) { v = 0; } cd[targetCell][frm] = v; } } } } } } } for (int i = 0; i < cellCount; i++) { if (cd[i][0] == -1) { cd[i][0] = 0; } for (int j = 1; j < frameCount; j++) { if (cd[i][j] == -1) { cd[i][j] = cd[i][j - 1]; } } } } //------------------------ //反映させる data.Comment.Clear(); foreach (string s in cmt) { data.Comment.Add(s); } data.Params.Clear(); foreach (ard_prms s in prms) { data.Params.Add(s); } data.FromParams(); data.SetCellCaption(cellName); data.SetMemo(mm); data.setFrameEnabled(frameEnabled); data.SetCellData(cd); return(true); }