2012-01-21 62 views
5

你好,我正在試圖製作一個C#程序來下載文件,但我遇到了數組問題。只能通過遍歷一個for循環來顯示數組

我把它分開下載文本,並把它放到2級鋸齒陣列(字符串[] [])。

現在我分割行| char,所以每一行將被格式化如下: {filename} | {filedescription} | {filehttppath} | {previewimagepath} | {length} | {source}

當我使用簡短測試文本將其放入文本它在文本框中顯示得很好。

IE:像測試一個字符串|測試|測試|測試|測試|測試

,但如果我把我究竟會使用程序DL一個真正的字符串的文件,我得到的唯一途徑要顯示的字符串是通過for或foreach循環遍歷它。如果我嘗試使用索引訪問數據,我會得到一個缺少索引的錯誤。 (IE陣列[0])

因此,這是該陣列到達顯示的代碼:

public Form2(string[][] textList, string path) 
{ 
    InitializeComponent(); 
    textBox1.Text = textBox1.Text + path + Environment.NewLine; 
    WebClient downloader = new WebClient(); 
    foreach (string[] i in textList) 
    { 
     for(int j=0;j<i.Length;j++) 
     { 
      textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine; 
     } 
    } 
} 

然後這是給出了一個指數缺失錯誤代碼:

public Form2(string[][] textList, string path) 
{ 
    InitializeComponent(); 
    textBox1.Text = textBox1.Text + path + Environment.NewLine; 
    WebClient downloader = new WebClient(); 
    foreach (string[] i in textList) 
    { 
     textBox1.Text = textBox1.Text + i[0] + Environment.NewLine; 
     textBox1.Text = textBox1.Text + i[1] + Environment.NewLine; 
     textBox1.Text = textBox1.Text + i[2] + Environment.NewLine; 
     textBox1.Text = textBox1.Text + i[3] + Environment.NewLine; 
     textBox1.Text = textBox1.Text + i[4] + Environment.NewLine; 
     textBox1.Text = textBox1.Text + i[5] + Environment.NewLine; 
    } 
} 

任何幫助都是這樣,我不明白爲什麼我可以通過for循環訪問他們的數據,但不是直接的,它只是對我沒有任何意義。

另外,這裏是產生該陣列的代碼:

public String[][] finalList(string[] FileList) 
{ 
    String[][] FinalArray = new String[FileList.Length][]; 
    for (int i = 0; i<FinalArray.Length;i++) 
    { 
     string[] fileStuff = FileList[i].Split(new char[] {'|'}); 
     FinalArray[i] = fileStuff; 
    } 
    return FinalArray; 
} 
+0

'string [] i'> 1的長度是多少? – iCantSeeSharp

+0

我不得不假定''我''數組中沒有6個項目。 –

+0

索引缺少錯誤?它是否像「索引超出範圍」? –

回答

4

在第一個實施例使用的是每個內陣列的實際長度做級聯。在你的第二個例子中,你被硬編碼到相同的長度,但你在介紹中說它是一個鋸齒狀的數組。

你可以顯示你的輸入文字的樣子嗎?

您在第一個和第二個示例中沒有進行相同的連接,因此產生的連接非常不同。

 first = "\r\n Crazy Video\r\n\\\\newline\r\nThis Video is absolutly crazy!\r\n\\\\newline\r\nhtt://fakeurl.fake/vidfolder/video.flv\r\n\\\\newline\r\nhtt://fakeurl.fake/imgfolder/img.j‌​pg\r\n\\\\newline\r\n300\r\n\\\\newline\r\nhtt://fakeurl.fake \r\n\\\\newline\r\n" 

     second = "\r\n Crazy Video\r\nThis Video is absolutly crazy!\r\nhtt://fakeurl.fake/vidfolder/video.flv\r\nhtt://fakeurl.fake/imgfolder/img.j‌​pg\r\n300\r\nhtt://fakeurl.fake \r\n" 


using System; 
using NUnit.Framework; 

namespace ClassLibrary5 
{ 
    public class Class1 
    { 
     [Test] 
     public void test() 
     { 
      var temp = new[] 
          { 
           " Crazy Video|This Video is absolutly crazy!|htt://fakeurl.fake/vidfolder/video.flv|htt://fakeurl.fake/imgfolder/img.j‌​pg|300|htt://fakeurl.fake " 
          }; 
      var final = finalList(temp); 
      var first = Form1(final, "path"); 
      var second = Form2(final, "path"); 
      Assert.IsTrue(first.CompareTo(second) == 0); 
     } 

     public string Form1(string[][] textList, string path) 
     { 
      string textString = path + Environment.NewLine; 

      foreach (string[] i in textList) 
      { 
       for (int j = 0; j < i.Length; j++) 
       { 
        textString = textString + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine; 
       } 
      } 
      return textString; 
     } 

     public string Form2(string[][] textList, string path) 
     { 
      string textString = path + Environment.NewLine; 

      foreach (string[] i in textList) 
      { 
       textString = textString + i[0] + Environment.NewLine; 
       textString = textString + i[1] + Environment.NewLine; 
       textString = textString + i[2] + Environment.NewLine; 
       textString = textString + i[3] + Environment.NewLine; 
       textString = textString + i[4] + Environment.NewLine; 
       textString = textString + i[5] + Environment.NewLine; 
      } 
      return textString; 
     } 

     public String[][] finalList(string[] FileList) 
     { 
      String[][] FinalArray = new String[FileList.Length][]; 
      for (int i = 0; i < FinalArray.Length; i++) 
      { 
       string[] fileStuff = FileList[i].Split(new char[] {'|'}); 
       FinalArray[i] = fileStuff; 
      } 
      return FinalArray; 
     } 
    } 
} 
+0

測試輸入文本,我用它來測試時,用於測試,但它是字符串像測試|測試|測試|測試|測試|測試 最終的字符串就像 Crazy Person Video |這個視頻顯示某人正在做一些瘋狂的事情| http://fakeurl.fake/videofolders/video.flv | http://fakeurl.fake/imgfolder/img.jpg | 300 | http://fakeurl.fake –

+0

沒關係最後的字符串,我再試一次:: 瘋狂的視頻|這個視頻是絕對瘋狂!| htt://fakeurl.fake/vidfolder/video.flv | htt://fakeurl.fake/imgfolder/img.jpg | 300 | htt://fakeurl.fake –

1

你肯定在string[][] textList每個String[]有6個元素?

+0

是的,100%確定在處理它們之前,我在文本框中手動輸入字符串。如果我在實際值中加入實際值而不是測試值,它會停止工作,除非我通過循環來迭代而不是直接訪問它們。 –

1

嘗試更換:

for(int j=0;j<i.Length;j++) 
    { 
     textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine; 
    } 

有:

for(int j=0;j<6;j++) 
    { 
     textBox1.Text = textBox1.Text + i[j] + Environment.NewLine + @"\\newline" + Environment.NewLine; 
    } 

,看看你是否得到相同的結果。你的中間人與你的第一個人有不同的邏輯。要進行故障排除,請先使邏輯相同,然後繼續進行故障排除。

+0

好吧我現在得到相同的索引錯誤後加入J <6我不知道爲什麼我還是新來的C# –