Gestion des champs "phrase" entre quotes
This commit is contained in:
parent
4beaf7ef8a
commit
3f48636636
2 changed files with 39 additions and 28 deletions
|
@ -1,3 +1,4 @@
|
|||
id name value
|
||||
0 test0 testvalue0
|
||||
1 test1 testvalue1
|
||||
0 test testvalue0
|
||||
1 test1 testvalue1
|
||||
2 "Test Multiword" "Ddeedz fdes s fesq qs g sfddtrs"
|
|
@ -1,70 +1,80 @@
|
|||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
public class TwoDA : Object {
|
||||
|
||||
|
||||
public TwoDA(string filepath) {
|
||||
|
||||
|
||||
// Read the file and display it line by line.
|
||||
System.IO.StreamReader file = new System.IO.StreamReader(filepath);
|
||||
|
||||
|
||||
string line = file.ReadLine();
|
||||
m_header = line.Split();
|
||||
int nCols = m_header.Length;
|
||||
|
||||
m_data = new string[100, nCols-1];//TODO: make this array dynamic instead of 100
|
||||
m_data = new List<string[]>();
|
||||
|
||||
int nFileLine = 1;
|
||||
while((line = file.ReadLine()) != null)
|
||||
{
|
||||
if(line[0] != '#'){//Ignore commented lines
|
||||
string[] linedata = line.Split();
|
||||
if(linedata.Length == nCols){
|
||||
int nLine = int.Parse(linedata[0]);
|
||||
|
||||
|
||||
MatchCollection matches = m_rgxField.Matches(line);
|
||||
|
||||
if(matches.Count == nCols){
|
||||
int nLine = int.Parse(matches[0].Value);
|
||||
|
||||
string[] buff = new string[nCols-1];
|
||||
for(int i=0 ; i<nCols-1 ; i++){
|
||||
m_data[nLine, i] = linedata[i+1];
|
||||
|
||||
if(matches[i+1].Groups[1].Success)//Match one word
|
||||
buff[i] = matches[i+1].Groups[1].Value;
|
||||
else if(matches[i+1].Groups[2].Success)//Match multi word
|
||||
buff[i] = matches[i+1].Groups[2].Value;
|
||||
}
|
||||
|
||||
m_data.Add(buff);
|
||||
}
|
||||
else
|
||||
Debug.LogWarning(filepath+":"+nFileLine.ToString()+" ignored. Found "+linedata.Length.ToString()+" columns instead of "+nCols.ToString());
|
||||
Debug.LogWarning(filepath+":"+nFileLine.ToString()+" ignored. Found "+matches.Count.ToString()+" columns instead of "+nCols.ToString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
nFileLine++;
|
||||
}
|
||||
|
||||
|
||||
file.Close();
|
||||
}
|
||||
|
||||
|
||||
public string GetValue(int nRow, string sColumn){
|
||||
|
||||
|
||||
int nCol = FindHeaderCol(sColumn);
|
||||
if(nCol>=0){
|
||||
return m_data[nRow, nCol];
|
||||
return m_data[nRow][nCol];
|
||||
}
|
||||
else{
|
||||
throw new UnityException("Column '"+sColumn+"' not found in 2DA");
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override string ToString(){
|
||||
string sMsg = "";
|
||||
foreach(string s in m_header){
|
||||
sMsg += s+"\t";
|
||||
}
|
||||
sMsg += "\n";
|
||||
for(int line=0 ; line<m_data.GetLength(0) ; line++){
|
||||
for(int line=0 ; line<m_data.Count ; line++){
|
||||
sMsg += line.ToString() + "\t";
|
||||
for(int col=0 ; col<m_data.GetLength(1) ; col++){
|
||||
sMsg += m_data[line, col]+"\t";
|
||||
for(int col=0 ; col<m_data[line].Length ; col++){
|
||||
sMsg += m_data[line][col]+"\t";
|
||||
}
|
||||
sMsg += "\n";
|
||||
}
|
||||
return sMsg;
|
||||
}
|
||||
|
||||
|
||||
private int FindHeaderCol(string sColName){
|
||||
for(int i=0 ; i<m_header.Length ; i++){
|
||||
if(m_header[i] == sColName)
|
||||
|
@ -72,8 +82,8 @@ public class TwoDA : Object {
|
|||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static Regex m_rgxField = new Regex("(?:\\b([^\\s]+?)\\b|\"([^\"]+?)\")");
|
||||
private string[] m_header;
|
||||
private string[,] m_data;
|
||||
}
|
||||
private List<string[]> m_data;
|
||||
}
|
Loading…
Add table
Reference in a new issue