按\ t拆分字符串 - 连续的标签会导致问题吗?

Jor*_*man 3 c# parsing

我正在编写一个自动化程序来解析制表符分隔文件并将数据写入另一个程序.目前,它占用文件的每一行,按标签拆分,并使用其命令中的不同条目.我的问题是,即使我正在解析的所有数据条目都应该有'X'个字段,但是有很多字段只是空的,有时会有一些选项卡会立即成功通过其他选项卡.

当我尝试从分割文件行访问字符串列表时,我发现自己有时会IndexOutOfRangeException经常使用.多个选项卡是否会导致我的列表不总是以"X"字段结束,因此抛出此异常?如果是这样,有没有办法绕过这个?

[编辑]继承人的代码:

string[] parts = line.Split('\t');
String Organization = parts[0];
String SalesRep_FirstName = SalesRep.Split(' ').First();
String SalesRep_LastName = SalesRep.Split(' ').Last();
String Opportunity = parts[1] == "" ? "" : parts[1];
String Type = parts[6] == "" ? comboBox1.SelectedItem.ToString() : parts[6];
String CloseMonth = (parts[5].Split('/'))[0] == "" ? "12" : (parts[5].Split('/'))[0];
String CloseDay = (parts[5].Split('/'))[1] == "" ? "21" : (parts[5].Split('/'))[1];
String CloseYear = (parts[5].Split('/'))[2] == "" ? "2012" : (parts[5].Split('/'))[2];
String Stage = (parts[2].Split('-'))[0] == "" ? "1" : (parts[2].Split('-'))[0];
String Probability = parts[4] == "" ? "0" : (Math.Round(decimal.Parse(parts[4]) / 10) * 10).ToString();
String Source = parts[7] == "" ? "" : parts[7];
String Department = Type;
String Product = Opportunity;
String Revenue = parts[3] == "" ? "" : parts[3];
Run Code Online (Sandbox Code Playgroud)

理想情况下,列表的每个实例parts都有9个条目,(这parts[8]是多余的,所以这里没有引用)

Jon*_*eet 5

这不应该是问题,除非你正在使用StringSplitOptions.RemoveEmptyEntries.

例如:

string text = "a\t\t\tb";
string[] bits = text.Split('\t');
Console.WriteLine(bits.Length); // 4, of which the middle two are empty
Run Code Online (Sandbox Code Playgroud)

如果你可以张贴该代码工作(在很短,但完整的形式,理想情况下),这将有助于.


dtb*_*dtb 5

您可以通过两种方式拆分字符串:

string input = "x\t\ty\t\t\tz";

char[] separator = new char[] { '\t' };

string[] result1 = input.Split(separator, StringSplitOptions.None);
// result1 == new string[] { "x", "", "y", "", "", "z" }

string[] result2 = input.Split(separator, StringSplitOptions.RemoveEmptyEntries);
// result2 == new string[] { "x", "y", "z" }
Run Code Online (Sandbox Code Playgroud)

如果使用StringSplitOptions.None,则结果数组应始终具有相同的长度-前提是每个输入包含相同数量的选项卡。