I’ve got a text file full of records where each field in each record is a fixed width. My first approach would be to parse each record simply using string.Substring(). Is there a better way?
For example, the format could be described as:
<Field1(8)><Field2(16)><Field3(12)>
And an example file with two records could look like:
SomeData0000000000123456SomeMoreData Data2 0000000000555555MoreData
I just want to make sure I’m not overlooking a more elegant way than Substring().
Update: I ultimately went with a regex like Killersponge suggested:
private readonly Regex reLot = new Regex(REGEX_LOT, RegexOptions.Compiled); const string REGEX_LOT = '^(?<Field1>.{6})' + '(?<Field2>.{16})' + '(?<Field3>.{12})';
I then use the following to access the fields:
Match match = reLot.Match(record); string field1 = match.Groups['Field1'].Value;
Substring sounds good to me. The only downside I can immediately think of is that it means copying the data each time, but I wouldn’t worry about that until you prove it’s a bottleneck. Substring is simple 🙂
You could use a regex to match a whole record at a time and capture the fields, but I think that would be overkill.