C# 以某些不同的字符计数拆分字符串

C# 以某些不同的字符计数拆分字符串,c#,string,count,split,stringbuilder,C#,String,Count,Split,Stringbuilder,我有一个半复杂的文件,里面有很多行。这些行可以属于以下两种格式之一: 人 公司 公司生产线的规格如下所示: 10个字符=公司标识、记录规范和公司状态 22个字符=空格(填充符) 8个字符=员工人数和公司名称长度 最多161个字符=Company name+“要从字符串中提取文本块,可以编写如下扩展方法 namespace StringExtension { public static class MyExtensions { public static st

我有一个半复杂的文件,里面有很多行。这些行可以属于以下两种格式之一:

  • 公司
公司生产线的规格如下所示:

  • 10个字符=公司标识、记录规范和公司状态
  • 22个字符=空格(填充符)
  • 8个字符=员工人数和公司名称长度

  • 最多161个字符=Company name+“要从字符串中提取文本块,可以编写如下扩展方法

    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);
            }
        }
    }
    
    然后,您可以使用从主代码调用它(假设位于提取公司行数据的方法内部)


    带一点数学的子字符串你的意思是什么?我认为要确定字符串的类型,你应该查看行的长度。除非你确定第11个字符包含区分这两行的内容。你的规格似乎没有这样说。@Mihai类似,但基于字符数而不是标记。@Steve Loo同样,根据公司记录,第11个字符将落在“填充符”中“类别,因此将是一个空白。行的长度不是一种证明方法,因为有可能一个人行比公司行短。这看起来非常有希望。请您解释一下导致您得出这个答案的过程,好吗?我自己也不会想到这一点。嗯,不太复杂。您可以阅读,代码只有两行,以确保传递的参数在字符串长度内,然后计算要传递给string.Substring的内容以获取数据块不确定此代码是否涵盖所有情况。例如,如果你传递一个x大于y的值,结果不是你所期望的结果。应该是好的,一旦我实现了它们,我不会改变x和y的值,理想情况下,x永远不会大于y。我想。我也遇到了类似的问题。但是你有没有看过能解决你问题的图书馆?首先想到的是
    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);