1.对CSV进行操作的函数:将CSV数据转为datatable
class CsvLib
{ /// <summary>
/// 将Csv读入DataTable
/// </summary>
/// <param name="filePath">csv文件路径</param>
/// <param name="n">表示第n行是字段title,第n+1行是记录开始</param>
public static DataTable Csv2dt(string filePath, int n)
{
DataTable dt = new DataTable();
String csvSplitBy = "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)";
StreamReader reader = new StreamReader(filePath, System.Text.Encoding.Default, false);
//StreamReader reader = new StreamReader(filePath, System.Text.Encoding.Unicode, false);如果出现乱码多换几种编码方式试一下
int i = 0, m = 0;
reader.Peek();
while (reader.Peek() > 0)
{
m = m + 1;
string str = reader.ReadLine();
if (m >= n + 1)
{
if (m == n + 1) //如果是字段行,则自动加入字段。
{
MatchCollection mcs = Regex.Matches(str, csvSplitBy);
foreach (Match mc in mcs)
{
dt.Columns.Add(mc.Value); //增加列标题
}
}
else
{
MatchCollection mcs = Regex.Matches(str, "(?<=^|,)(\"(?:[^\"]|\"\")*\"|[^,]*)");
i = 0;
System.Data.DataRow dr = dt.NewRow();
foreach (Match mc in mcs)
{
dr[i] = mc.Value;
i++;
}
dt.Rows.Add(dr); //DataTable 增加一行
}
}
}
return dt;
}
}
2.对datatable操作,将对应字段与值插入资源文件,并保存
DataTable csv_dt = new DataTable();
string filePath = "E:...resource.csv";
csv_dt = CsvLib.Csv2dt(filePath, 0);
int rowCount = csv_dt.Rows.Count;
string language = Properties.Settings.Default.DefaultLanguage;
DataView dv = csv_dt.DefaultView;
DataTable forms = dv.ToTable(true, new string[] { "form" });
for (int f = 0; f < forms.Rows.Count; f++)
{
//取出重复数据
var dis_data = (from a in csv_dt.AsEnumerable()
group a by a.Field<string>("form")
into g
where g.Count() > 1
select new
{
value = g.Key
}).ToList();
if (dis_data.Count > 0)
{
//拼接重复数据及重复数据出现的索引
Dictionary<string, List<int>> all_data = new Dictionary<string, List<int>>();
foreach (var dis in dis_data)
{
List<int> now_index = new List<int>();//出现重复的数据Index
for (int i = 0; i < csv_dt.Rows.Count; i++)
{
if (csv_dt.Rows[i]["form"].ToString() == dis.value)
{
now_index.Add(i + 2);//输出行数
}
}
all_data.Add(dis.value, now_index);
}
//遍历key
foreach (string key in all_data.Keys)
{
ResXResourceWriter rw_en = new ResXResourceWriter("E:...UI\\" + key + ".en.resx");
ResXResourceWriter rw_es = new ResXResourceWriter("E:...UI\\" + key + ".es.resx");
ResXResourceWriter rw_zh = new ResXResourceWriter("E:...UI\\" + key + ".zh.resx");
// 括号内是一个lambda表达式,num所代表的是aList集合中的一个元素
foreach (var i in all_data[key])
{
string name = csv_dt.Rows[i-2]["text"].ToString();
string chinese = csv_dt.Rows[i-2]["Chinese"].ToString();
string english = csv_dt.Rows[i-2]["English"].ToString();
string spanish = csv_dt.Rows[i-2]["Spanish"].ToString();
rw_zh.AddResource(name, chinese);
rw_en.AddResource(name, english);
rw_es.AddResource(name, spanish);
}
rw_en.Generate();
rw_es.Generate();
rw_zh.Generate();
rw_en.Close();
rw_es.Close();
rw_zh.Close();
}
}
3.读取资源文件:
自定义资源文件:public static ResourceManager res = new ResourceManager(typeof(nonUIresx));
组件资源文件:System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(formType);