Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 按\t拆分字符串-连续的选项卡是否会导致问题?_C#_Parsing - Fatal编程技术网

C# 按\t拆分字符串-连续的选项卡是否会导致问题?

C# 按\t拆分字符串-连续的选项卡是否会导致问题?,c#,parsing,C#,Parsing,我正在编写一个自动化程序来解析一个以制表符分隔的文件,并将数据写入另一个程序。目前,它获取文件的每一行,按制表符拆分,并在其命令中使用不同的条目。我的问题是,即使我正在解析的所有数据项都应该有“X”数量的字段,但仍有大量字段是空的,有时有些选项卡会立即取代其他选项卡 当我尝试从拆分文件行访问字符串列表时,我发现自己有时会非常频繁地遇到索引自动失效异常。多个选项卡是否会导致我的列表不总是以“X”数量的字段结尾,从而引发此异常?如果是这样的话,有办法解决吗 [编辑] 代码如下: string[] p

我正在编写一个自动化程序来解析一个以制表符分隔的文件,并将数据写入另一个程序。目前,它获取文件的每一行,按制表符拆分,并在其命令中使用不同的条目。我的问题是,即使我正在解析的所有数据项都应该有“X”数量的字段,但仍有大量字段是空的,有时有些选项卡会立即取代其他选项卡

当我尝试从拆分文件行访问字符串列表时,我发现自己有时会非常频繁地遇到
索引自动失效异常。多个选项卡是否会导致我的列表不总是以“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]
是冗余的,因此此处不引用它)

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

如果您可以发布不起作用的代码(理想情况下,以简短但完整的形式发布),这会有所帮助。

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

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.None,那么生成的数组应该始终具有相同的长度——前提是每个输入包含相同数量的制表符。

@Jordan:好的,您在那里进行了大量的拆分。例如,
parts[5]
可能为空,导致
CloseYear
不正确。基本上,我不认为问题在于按标签拆分。。。您是否记录了发生异常时遇到问题的数据。这是我的第一个winforms应用程序,我从中学到了很多。我正在做一些基本的日志记录,但我怀疑它是否能为我的问题提供更多的细节。不过,我明白你们说的分裂是什么意思,所以我来看看