2013-04-25 83 views
0

塊我需要幫助解析此示例文本:需要幫助解析文本

[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

你期待什麼樣的輸出? – 2013-04-25 04:19:39

+0

我目前正在輸出它作爲一個項目的每一組數據。因此,如果可能的話,可以將來自每個項目的數據存儲到可以在DataGridvView中顯示的表格中。我甚至不確定是否有可能。 – 2013-04-25 04:22:46

回答

0

這並不需要u的閱讀它的ITEM2的情況下第二次了什麼在這裏

else 
{ 
    streamReader.ReadLine(); 
} 

- >> itemRarity = int.Parse(s [4]);第四條記錄你可能會得到異常索引out bound array at 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(); 
    } 
0

您已經閱讀線分支用[item]標識符...用它讀取關於該項目的所需信息...將該信息存儲在循環之外的變量中...每次讀取沒有[item] id的行時entifyer,你仍然可以使用該變量來知道這條線屬於哪個項目...

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; 
     } 

    }