C Charp固定長分割
ナビゲーションに移動
検索に移動
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Text.RegularExpressions;
- namespace FieldSplitter
- {
- public class FieldSplitterService
- {
- public string SplitField(string lengthString, string inputData, string splitChar)
- {
- var buf = new StringBuilder();
- List<int> lengthList = GetLengthList(lengthString);
- using (var reader = new StringReader(inputData))
- {
- string line = null;
- while((line = reader.ReadLine()) != null) {
- buf.Append(SplitLine(lengthList, splitChar ,line));
- buf.Append(Environment.NewLine);
- }
- }
- return buf.ToString();
- }
- private string SplitLine(List<int> lengthList, string splitChar, string line)
- {
- var buf = new StringBuilder();
- int pos = 0;
- foreach(int len in lengthList)
- {
- if (len > 0)
- {
- int stepc = 0;
- int diflen = 0;
- for(int i=pos; i<line.Length; i++)
- {
- var c = line[i];
- if (((int)c) <= 255)
- {
- diflen += 1;
- }
- else
- {
- diflen += 2;
- }
- buf.Append(c);
- stepc++;
- if (diflen >= len)
- {
- break;
- }
- }
- pos += stepc;
- }
- buf.Append(splitChar);
- }
- if (pos < line.Length)
- {
- buf.Append(line.Substring(pos));
- }
- return buf.ToString();
- }
- private List<int> GetLengthList(string lengthList)
- {
- var strLenList = Regex.Split(lengthList, @"[^0-9]");
- var ret = strLenList
- .Where(len => Regex.IsMatch(len, @"[0-9]+"))
- .Select(len => int.Parse(len));
- return ret.ToList();
- }
- }
- }
© 2006 矢木浩人