用 -分隔字符串会导致连续制表符出现问题

本文关键字:制表符 连续 问题 分隔 字符串 | 更新日期: 2023-09-27 18:01:59

我正在编写一个自动化程序来解析一个以制表符分隔的文件并将数据写入另一个程序。目前,它获取文件的每一行,按制表符分隔,并在命令中使用不同的条目。我的问题是,即使我解析的所有数据条目都应该有'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];

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

用	 -分隔字符串会导致连续制表符出现问题

可以用两种方式分割字符串:

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

如果你使用StringSplitOptions。没有,那么结果数组应该始终具有相同的长度——只要每个输入包含相同数量的制表符。

这应该不是问题,除非您使用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

如果你能发布不能工作的代码(理想情况下,以简短但完整的形式),将会有所帮助。