我要将文本文件转换为XML。我使用以下代码。但它在第12行产生错误。任何人都可以更正代码。错误在这一行。
writer.WriteString(lines [0] .TrimEnd()。Split(ca,2)[1]); ------“索引超出了数组的范围。”
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");
}
答案 0 :(得分:1)
在阅读
的行中writer.WriteString(lines[0].TrimEnd().Split(ca, 2)[1]);
只需删除.Split(ca,2)[1]。 所以...
writer.WriteString(lines[0].TrimEnd());
答案 1 :(得分:0)
File.ReadAllLines方法为您提供了一个数组,其中包含每个条目中的所有行。
在这里,您可以在第一行中对“\ n”进行拆分。但该行不能再包含“\ n”,因为ReadAllLines已经将文本拆分为行。
答案 2 :(得分: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]
每次都会导致异常,因为您尝试访问永远不会有多个元素的数组的第二个元素。
如果没有您要解决的问题的更多详细信息以及输入文件的确切格式,则无法发布可解决问题的代码。