-
文件内容示例如下
可以看到文件并不是标准的 ini 配置文件的格式,存在很多重复的 section(中括号里的就是section) , 我的任务是读取文件末尾最新的四个不同 section,并发送出去。
-
按照读取 ini 文件那样读取显然是不行的,读不到最后四个。那么怎么样能定位到最后四个不一样的 section 呢?方法非常简单,将文件按行读取到字符串数组里面,再用数组的 LastIndexOf 方法,就能定位到最后四个不同 section 的起始位置。上代码
string[] strs = System.IO.File.ReadAllLines(path);
int[] index = new int[4];
index[0] = Array.LastIndexOf(strs, "[ProductionStarted]");
index[1] = Array.LastIndexOf(strs, "[Counter]");
index[2] = Array.LastIndexOf(strs, "[ProductionInterrupted]");
index[3] = Array.LastIndexOf(strs, "[ProductionRestarted]");
- 将数据添加到 4 个 JSON 中,用正则表达式获取等号两边的内容,处理完毕,接下来发送出去就好了。
JObject[] jsons = new JObject[4];
for (int i = 0; i < 4; i++)
{
jsons[i] = new JObject();
}
for (int i = 0; i < 4; i++)
{
for (int j = index[i] + 1; j < len; j++)
{
if (strs[j].Contains("["))
{
break;
}
string pattern1 = @"\w+(?=\=)";
string pattern2 = @"(?<==).*";
Regex rgx1 = new Regex(pattern1);
Regex rgx2 = new Regex(pattern2);
string res1 = rgx1.Match(strs[j], 0).Value;
string res2 = rgx2.Match(strs[j], 0).Value;
if (res1 != "" && res2 != "")
{
ArrayList arrayList = new ArrayList();
arrayList.Add(res2);
jsons[i].Add(res1, JToken.FromObject(arrayList.ToArray()));
}
}
}