在某些不同的字符数上拆分字符串

时间:2014-10-14 10:30:51

标签: c# string count split stringbuilder

我有一个半复杂的文件行。这些行可以采用以下两种格式之一:

  • 公司

公司产品线的规格如下:

  • 10个字符=公司标识,记录规范和公司状态
  • 22个字符=空格(填充)
  • 8个字符=员工人数和公司名称长度
  • 最多161个字符=公司名称+“<”定界符

一个人的规范:

  • 12个字符=母公司编号,约会日期和类型
  • 12个字符=唯一参考编号
  • 1字符=公司指标
  • 7个字符=空格(填充)
  • 16个字符=确认的预约日期和辞职日期
  • 8个字符=邮政编码
  • 8个字符=出生日期
  • 4个字符=可变数据的长度
  • 最多1125个字符=由“<”
  • 分隔的可变数据

首先,我需要测试11个字符以确定字符串的类型。伪代码:

if (string.count(11) = " ")
{
    ItsACompany();
}
else
{
    ItsAPerson();
}

然后我需要为每种类型的规范做一个自定义计数 - 到目前为止,我发现的是一个每隔n个字符分割字符串的方法,并读取到字符串的末尾。这是递归的而不是我需要的。

我需要一个允许n根据规范更改的选项,并允许我选择char n和char y之间的所有字符。这样的事情存在吗?

1 个答案:

答案 0 :(得分:1)

要从字符串中提取文本块,您可以编写像这样的扩展方法

namespace StringExtension
{
    public static class MyExtensions
    {
        public static string TakeBlock(this string input, int x, int y)
        {
            if(y > input.Length) y = input.Length;
            if(x > y) x = y;
            int length = y - (x-1);
            return input.Substring(x-1, length);
        }
    }
}

然后你可以用你的主代码调用它(假设在提取公司行数据的方法内)

string parentCompany = line.TakeBlock(1, 12);
string uniqueRef = line.TakeBlock(13,24);