2010-06-19 94 views
0

我打算將文本文件轉換爲XML。我使用下面的代碼。但它會在第12行中產生錯誤。任何人都可以更正代碼。錯誤在這一行。將文本文件轉換爲XML文件

writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]); ------ "Index was outside the bounds of the array."

private void button1_Click(object sender, EventArgs e) 
{ 
    string[] lines = File.ReadAllLines("ex3.txt"); 
    char[] ca = new char[] { '\n' }; 
    using (XmlTextWriter writer = new XmlTextWriter("ex3.xml", null)) 
    { 
     writer.Formatting = Formatting.Indented; 
     writer.WriteStartDocument(); 
     writer.WriteStartElement("Root"); 
     writer.WriteStartElement("Header"); 
     writer.WriteStartElement("H1"); 
     writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]); 
     writer.WriteEndElement(); 
     writer.WriteStartElement("H2"); 
     writer.WriteString(lines[1].TrimEnd().Split(ca, 2)[1]); 
     writer.WriteEndElement(); 
     writer.WriteEndElement(); 
     writer.WriteStartElement("Details"); 
     for (int i = 2; i < lines.Length - 2; i++) 
     { 
      writer.WriteStartElement("D" + (i - 1).ToString()); 
      writer.WriteString(lines[i].TrimEnd().Split(ca, 2)[1]); 
      writer.WriteEndElement(); 
     } 
     writer.WriteEndElement(); 
     writer.WriteStartElement("Footer"); 
     writer.WriteStartElement("F1"); 
     writer.WriteString(lines[lines.Length - 2].TrimEnd().Split(ca, 2)[1]); 
     writer.WriteEndElement(); 
     writer.WriteStartElement("F2"); 
     writer.WriteString(lines[lines.Length - 1].TrimEnd().Split(ca, 2)[1]); 
     writer.WriteEndElement(); 
     writer.WriteEndElement(); 
     writer.WriteEndDocument(); 
     MessageBox.Show("Success"); 
    } 

回答

1

在線讀取

writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]); 

只需卸下.Split(CA,2)[1]。 所以...

writer.WriteString(lines[0].TrimEnd()); 
0

方法File.ReadAllLines給你其中包含在每個條目中的所有行的陣列。

這裏你在第一行的「\ n」上進行分割。但是行不能再包含「\ n」,因爲ReadAllLines已經將文本分割成行。

+0

謝謝你的幫助,你可以提供必要的代碼,這樣我就可以清楚地瞭解它 – Kasun 2010-06-19 06:24:58

0

這意味着該行中的一個數組並不像您想象的那麼大 - 文件ex3.txt爲空,或者(更可能)是分割單行文本的結果(結果爲在一個換行符File.ReadAllLines()lines[0])的調用沒有第二行 - 這顯然是不可能

在回答您的評論:

讓我們打破這是造成您的錯誤行:

writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]); 

writer.WriteString();寫作...但它寫什麼?

lines[0]是該文件的第一行ex3.txt

lines[0].TrimEnd()是文件ex3.txt的第一行,刪除了末尾的任何空格。

lines[0].TrimEnd().Split(ca, 2)將返回一個最多2個元素的數組,其中包含文件ex3.txt的第一行以及末尾的任何空格,分割包含換行符的數組元素ca。由於字符串包含一行,它永遠不會超過1個元素。

lines[0].TrimEnd().Split(ca, 2)[1]因此每次都會導致異常,因爲您嘗試訪問永遠不會有多個元素的第二個元素。

無法發佈解決問題的代碼,而無需詳細解釋您正在嘗試解決的問題以及輸入文件的確切格式。

+0

你能提供正確的答案,這樣我就可以清楚地瞭解 – Kasun 2010-06-19 06:23:13

+0

文本文件包含數據休耕: AAAAAAAA BBBBBBBB CCCCCCCC DDDDDDDD – Kasun 2010-06-19 06:29:27