Jyothi
Jyothi

Reputation: 1

How to split a string without specifying any separator in asp.net with C#?

I have a string with 1000 length. I need to split it and assign it to different controls. I do not have any character separator.
Since each string that I am assigning to controls do not contain same length. As of now I am doing it using substring in which i am specifying the length. But its becoming hectic for me as the length is huge.

Please suggest me is there any way to split and assign in simpler way?

Upvotes: 0

Views: 493

Answers (2)

Heinzi
Heinzi

Reputation: 172270

You won't get around specifying the information which control gets which part of the string. Once you have this information (let's say they are stored in a control array controls and int array length), you can just loop over the string and do a piecewise Substring:

var controls = { control1, control2, control3, ... };
var lengths = { 100, 20, 5, ... };

int offset = 0;
for (int i = 0; i < controls.length; i++) {
    controls[i].Value = myLongString.Substring(offset, lengths[i]);
    offset += lengths[i];
}

Obviously, this will fail horribly if myLongString is shorter than the sum of all lengths or the array length of lengths is shorter than the one of controls, but adding some checks for that and throwing a suitable error is left as an exercise to the reader. In addition, the controls must be compatible in the sense that they all derive from the same base class with a common Value property. If that is not the case, you might have to do a few type checks and casts inside the loop.

Upvotes: 1

p.s.w.g
p.s.w.g

Reputation: 149020

You can use this string constructor:

 var input = "Some 1000 character long string ...";
 var inputChars = input.ToCharArray();

 control1.Value = new string(inputChars, 0, 100);   // chars 0-100 of input
 control2.Value = new string(inputChars, 100, 20);  // chars 100-120 of input
 control3.Value = new string(inputChars, 120, 50);  // chars 120-170 of input
 ...

Or using Substring:

 var input = "Some 1000 character long string ...";

 control1.Value = input.Substring(0, 100);   // chars 0-100 of input
 control2.Value = input.Substring(100, 20);  // chars 100-120 of input
 control3.Value = input.Substring(120, 50);  // chars 120-170 of input

You could also do this

var parts = new [] 
{
     Tuple.Create(0, 100),
     Tuple.Create(100, 20),
     Tuple.Create(120, 50),
}

var inputParts = parts.Select(p => input.Substring(p.Item1, p.Item2))
                      .ToArray();
control1.Value = inputParts[0];
control2.Value = inputParts[1];
control3.Value = inputParts[3];

This makes it much easier to maintain as the number of controls grows larger. You can store this list of 'parts' statically, so it can be reused elsewhere in your application without duplicating the code.

If all the controls the same type, you can do this:

 var parts = new [] 
 {
     new { control = control1, offset = 0, length = 100 },
     new { control = control2, offset = 100, length = 20 },
     new { control = control3, offset = 120, length = 50 },
 }

 foreach(var part in parts)
 {
     part.control.Value = new string(inputChars, part.offset, offset.length);
     // or part.control.Value = input.Substring(part.offset, offset.length);
 }

Upvotes: 2

Related Questions