我需要帮助解析此示例文本:
[item1]
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
[/item1]
[item2]
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000
2550 coins 995 200000 7
[/item2]
[item3]
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
2550 coins 995 200000 7
[/item3]
我不知道如何在保持项目标题(item1等等)与数据相关的同时读取每个项目的数据。我很抱歉,但我不知道如何处理这个问题,到目前为止,这是解析一个没有标题的项目的原因。
private void button1_Click(object sender, EventArgs e)
{
//dataGridView1.Rows.Add("Ashes", "d", "a", "g");
//dataGridView1.Rows[0].Cells[3].Style.BackColor = Color.Aqua;
String fileName = "Drops.de";
StreamReader streamReader = new StreamReader(fileName);
int[] nums = new int[4];
int npcID;
int itemID;
int itemAmount;
int itemRarity;
string itemName;
// string currentLine = streamReader.ReadLine();
while (!streamReader.EndOfStream)
{
string currentLine = streamReader.ReadLine();
if (!currentLine.Contains('#') && currentLine != "" && !currentLine.Contains("["))
{
String[] s = currentLine.Split(' ');
npcID = int.Parse(s[0]);
itemName = (s[1]);
itemID = int.Parse(s[2]);
itemAmount = int.Parse(s[3]);
itemRarity = int.Parse(s[4]);
dataGridView1.Rows.Add(itemName, itemID, itemAmount, itemRarity);
dataGridView1.Refresh();
}
else
{
streamReader.ReadLine();
}
}
streamReader.Close();
}
非常感谢任何和所有帮助:)
答案 0 :(得分:0)
这不要求你第二次读错了
else
{
streamReader.ReadLine();
}
在item2的情况下 - >>第4条记录你可能得到异常索引输出绑定数组 在 itemRarity = int.Parse(s [4]);
因为没有第五个元素
你能做的最好的就是条件
if(Regex.match(currentline,@"^\d+\s\w+\s\d+\s\d+\s\d+\s*?$"))
{
#now do your logic here
}
这是完整代码:
private void button1_Click(object sender, EventArgs e)
{
String fileName = "d:\\Drops.txt";
StreamReader streamReader = new StreamReader(fileName);
dataGridView1.Rows.Clear();
dataGridView1.Columns.Clear();
dataGridView1.Columns.Add("Head","Head");
dataGridView1.Columns.Add("npcID", "npcID");
dataGridView1.Columns.Add("itemName", "itemName");
dataGridView1.Columns.Add("itemID", "itemID");
dataGridView1.Columns.Add("itemAmount", "itemAmount");
dataGridView1.Columns.Add("itemRarity", "itemRarity");
string itemhead = "Not Found";
while (!streamReader.EndOfStream)
{
string currentLine = streamReader.ReadLine();
if (Regex.IsMatch(currentLine, @"^\d+\s\w+\s\d+\s\d+\s\d+?\s*?$"))
{
List<string> s = new List<string>();
s.Add(itemhead);
s.AddRange(currentLine.Split(' '));
dataGridView1.Rows.Add(s.ToArray());
dataGridView1.Refresh();
}
else if(Regex.IsMatch(currentLine,@"\[[^/]*\]"))
{
itemhead = Regex.Match(currentLine, @"\[([^/]*)\]").Groups[0].Value;
}
}
streamReader.Close();
}
答案 1 :(得分:0)
你已经有一个分支用于读取[item]标识符的行...用它来读取有关该项目的所需信息...将该信息存储在循环外的变量中...每次你读取一个没有[item]标识符的行,您仍然可以使用该变量来了解此行所属的项目...
string headingItem="unknown Item";
while (!streamReader.EndOfStream)
{
string currentLine = streamReader.ReadLine();
if (!currentLine.Contains('#') && currentLine != "" && !currentLine.Contains("["))
{
String[] s = currentLine.Split(' ');
npcID = int.Parse(s[0]);
itemName = (s[1]);
itemID = int.Parse(s[2]);
itemAmount = int.Parse(s[3]);
itemRarity = int.Parse(s[4]);
dataGridView1.Rows.Add(headingItem, itemName, itemID, itemAmount, itemRarity);
dataGridView1.Refresh();
}
else
{
headingItem=currentLine;
}
}