我使用StreamReader每行读取一个文件,并将每一行作为项添加到List。
文件中有两个部分," MMap"和#34; missionMMap"。
有没有办法在missionMMap之后拆分列表并将其附加到另一个列表? 另一种方法是在" missionMMap"之后直接添加任何行。直接列出missionMMap。
我的代码:
List<string> MMap = new List<string>();
List<string> missionMMap = new List<string>();
public void readFile(string path)
{
try
{
MMap.Clear();
using (StreamReader readFile = new StreamReader(path))
{
string line;
while ((line = readFile.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
MMap.Add(line);
}
}
}
}
catch (Exception e) { MessageBox.Show(e.Message, "Error!"); }
}
该文件如下所示:
[MMap] SpeciesIdx
1 15
[missionMMap] SpeciesIdx
1 15
提前致谢。 PS:我为任何语法错误道歉。
答案 0 :(得分:0)
因为你有字符串[missionMMap]
来分解文件中的部分应该可以解决这个问题。
using(StreamReader readFile = new StreamReader(path))
{
string line;
bool isMissionMMap = false;
while((line = readFile.ReadLine()) != null)
{
if(!string.IsNullOrEmpty(line))
{
if(!isMissionMMap && line.StartsWith("[missionMMap]")) // Short circuit early if the missionMMap portion has already been entered
{
isMissionMMap = true;
continue; //Ignore this line of text as it is more than likely useless
}
if(isMissionMMap)
{
missionMMap.Add(line);
}
else
{
MMap.Add(line)
}
}
}
}
编辑:如果需要,您可以使用非常时髦的三元运算符替换最后的if/else
语句。我不打算推荐它,因为它不可读,我只是添加它,因为我发现它很酷。
(isMissionMMap ? missionMMap : MMap).Add(line);
同样,我不会使用它,但它很有效。
答案 1 :(得分:0)
嵌套的if
并不漂亮,但这样可行。
List<string> MMap = new List<string>();
List<string> missionMMap = new List<string>();
public void readFile(string path)
{
try
{
MMap.Clear();
// This technically doesn't need to be initialized here, but better safe...
bool readingMMap = true;
using (StreamReader readFile = new StreamReader(path))
{
string line;
while ((line = readFile.ReadLine()) != null)
{
if (!string.IsNullOrEmpty(line))
{
if(line.StartsWith("[MMap]"))
{
readingMMap = true;
}
else if(line.StartsWith("[missionMMap]"))
{
readingMMap = false;
}
else
{
if(readingMMap)
MMap.Add(line);
else
missionMap.Add(line);
}
}
}
}
}
catch (Exception e) { MessageBox.Show(e.Message, "Error!"); }
}