将数组拆分为子数组,然后检查每个元素的大小

时间:2017-11-29 22:26:13

标签: c# arrays visual-studio

这有点复杂,所以如果我不妥善表达,请提前原谅我。我有一个数据表,返回管道分隔数据,格式化为数据表从中拉出的存储过程。示例:ABC | 11/30/2017 | 1234-56-7981-5678 --- 91 | STRING | 1234.56 |

我已使用以下代码将行拆分为数组(由每个管道分隔):

    string[] curValueArrary = curValue.Split('|'); 

现在,这将每行分成一个包含6个部分的数组。其中一个部分用破折号分隔,如上所示:(“1234-56-7891 ......”)。我用来执行此操作的整个代码块是:

foreach (DataRow curRow in Datatable.Rows)
{
    curValue = curRow["Column_Name"].ToString();
    string[] curValueArrary = curValue.Split('|');

if (curValueArrary.Length != 6)
   throw new Exception("Error data row: " + curValue);
   else if (curValueArrary[2].Length < 22)
   throw new Exception("Error data: " + curValue);

这将返回一个如下所示的数组:

[0]ABC
[1]11/30/2017
[2]1234-56-7891-5678-91
[3]STRING
[4]1234.56
[5]""

如您所见,这将检查以确保数组包含6行,并且[2]行中包含22个字符。现在我的问题:我需要进一步剖析这个数组,并确保数组的[2]行中每个以虚线分隔的值是特定长度。例如,[2]行中的第一个字符块是“1234”。如何在每次写入数组时检查第二行中的第一个字符串是否总共有4个字符?无论是“1234”还是“1010”,第一组字符应始终包含4个字符。我如何检查,然后抛出异常,如果它有或多或少?我需要为[2]行中的每个字符块重复此过程。 (例如,确保第二个块“ 56 ”有两个字符,请确保第三个块“ 7891 ”有4个字符......等等。)。另请注意,有问题的代码必须在我上面发布的代码块内部工作。

谢谢!任何帮助表示赞赏

1 个答案:

答案 0 :(得分:0)

您可以在子阵列中再次拆分,并相应地检查元素的长度。

这是一个基于代码的示例:

foreach (DataRow curRow in Datatable.Rows)
{
    curValue = curRow["Column_Name"].ToString();
    string[] curValueArrary = curValue.Split('|');

   if (curValueArrary.Length != 6)
      throw new Exception("Error data row: " + curValue);
   else if (curValueArrary[2].Length < 22)
      throw new Exception("Error data: " + curValue);
   else
   {
      var subArray = curValueArrary[2].Split('-');
      if (subArray[0].Length < 4)
         throw new Exception("Error sub data: " + subArray[0]);
      if(subArray[1].Length < 2)
         throw new Exception("Error sub data: " + subArray[1]);
      //and so on...
   }
}