2012-05-08 6 views
2

안녕하세요. 긴 문자열이 있습니다. 나는 많은 종류의 리턴 카라깃이있는 일종의 형식으로 나누고 싶다. 각 줄에는 5 개의 짧은 단어가 있습니다. Ex.긴 문자열을 사용자 지정된 문자열로 분할

string input="'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'";

그것은 66 개 짧은 단어를 갖는다.

string output = "'250.0','250.00','250.01','250.02','250.03', 
       '250.1','250.10','250.11','250.12','250.13', 
       '250.2','250.20','250.21','250.22','250.23', 
       '250.3','250.30','250.31','250.32','250.33', 
       '250.4','250.40','250.41','250.42','250.43', 
       '250.5','250.50','250.51','250.52','250.53', 
       '250.6','250.60','250.61','250.62','250.63', 
       '250.7','250.70','250.71','250.72','250.73', 
       '250.8','250.80','250.81','250.82','250.83', 
       '250.9','250.90','250.91','250.92','250.93', 
       '357.2','357.20','362.01','362.02','362.03', 
       '362.04','362.05','362.06','362.07','366.41', 
       '648.0','648.00','648.01','648.02','648.03', 
       '648.04'"; 

나는 최초의 the example에서와 같이 문자열에 ','내가 문자를 계산해야한다는 생각했습니다. 그러나 그것은 서투른 일이 될 수 있습니다.

고마워. 내가 제대로 이해했다면

+1

다섯 번째 숫자마다 매번 새로운 헌장을 삽입 하시겠습니까? – dugas

+0

네, 맞습니다. –

답변

2

당신이

  • 싶지는 쉼표 (,)로
  • 그룹 각 라인은 5 개 단어
  • 가 분리
  • Environment.NewLine로 문자열을 구축 포함 라인에 결과를 그 단어를 분할

string input = "'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'"; 
int groupCount = 5; 
var linesGroups = input.Split(',') 
    .Select((s, index) => new { str = s, Position = index/groupCount, Index = index }) 
    .GroupBy(x => x.Position); 

StringBuilder outputBuilder = new StringBuilder(); 
foreach (var grp in linesGroups) 
{ 
    outputBuilder.AppendLine(String.Join(",", grp.Select(x => x.str))); 
} 
String output = outputBuilder.ToString(); 

편집는 : 결과는 다음과 같습니다

'250.0','250.00','250.01','250.02','250.03' 
'250.1','250.10','250.11','250.12','250.13' 
'250.2','250.20','250.21','250.22','250.23' 
'250.3','250.30','250.31','250.32','250.33' 
'250.4','250.40','250.41','250.42','250.43' 
'250.5','250.50','250.51','250.52','250.53' 
'250.6','250.60','250.61','250.62','250.63' 
'250.7','250.70','250.71','250.72','250.73' 
'250.8','250.80','250.81','250.82','250.83' 
'250.9','250.90','250.91','250.92','250.93' 
'357.2','357.20','362.01','362.02','362.03' 
'362.04','362.05','362.06','362.07','366.41' 
'648.0','648.00','648.01','648.02','648.03' 
'648.04' 

당신이 (당신의 예에서와 같은) 쉼표로 모든 라인을 추가하려면 :

foreach (var grp in linesGroups) 
{ 
    outputBuilder.AppendLine(String.Join(",", grp.Select(x => x.str)) + ","); 
} 
// remove last comma + Environment.NewLine 
outputBuilder.Length -= (1 + Environment.NewLine.Length); 
+0

예, 모든 줄을 쉼표로 추가하고 마지막 줄은 추가하려고합니다. –

+0

마지막 쉼표를 제거해야합니다. –

+0

@Love : 내 대답을 편집하여 방법을 보여줍니다. 그에 따라'StringBuilder'의'Length'를 설정해야합니다 (-3). –

0

가장 간단한 방법의 접근 방식을 따라하는 것 @ 팀의 삭제 : 대답 (편집은 더 이상 삭제되지 않습니다) :

  1. 분할 쉼표 부에 문자열 (string.Split 사용)
  2. 얻은 부품을 원하는대로 다시 정렬하십시오 (예 : 한 줄에 5 개씩 묶음). (테스트하지) 같은

뭔가 :

Console.WriteLine("string output ="); 
var parts = sourceString.Split(','); 
int i = 0; 
for (; i < parts.Length; i++) 
{ 
    if (i % 5 == 0) 
     Console.Write(' "'); 
    Console.Write(parts[i]); 
    Console.Write(','); 
    if (i % 5 == 4 && i != parts.Length - 1) 
     Console.WriteLine('" +'); 
} 
Console.WriteLine('";'); 
+0

침묵하는 downvote의 뒤에 추론을 설명하기 위하여 downvoter가 친절한가 것입니다? (개조 : BB가 나를보고있어 기쁘다.) – Vlad

+0

나는 downvoted하지만'string.Split (sourceString, ',');'존재하지 않습니다. –

+1

@Fuex : 네 말이 맞아, 고마워, 이제 고쳐질거야. – Vlad

0

이 같은 것을 수행

string[] words = input.Split(','); 
int wordsInString = words.Length; 
0
var input="'250.0','250.00','250.01','250.02','250.03','250.1','250.10','250.11','250.12','250.13','250.2','250.20','250.21','250.22','250.23','250.3','250.30','250.31','250.32','250.33','250.4','250.40','250.41','250.42','250.43','250.5','250.50','250.51','250.52','250.53','250.6','250.60','250.61','250.62','250.63','250.7','250.70','250.71','250.72','250.73','250.8','250.80','250.81','250.82','250.83','250.9','250.90','250.91','250.92','250.93','357.2','357.20','362.01','362.02','362.03','362.04','362.05','362.06','362.07','366.41','648.0','648.00','648.01','648.02','648.03','648.04'"; 

var wordsArray = input.Split(','); 
var sbOutput = new StringBuilder(); 

for (int i = 1; i < wordsArray.Length +1; i++) 
{ 
    sbOutput.AppendFormat("{0},", wordsArray[i-1]); 

    if(i % 5 == 0) 
     sbOutput.AppendLine(); 
} 

var output = sbOutput.ToString(); 
+0

출력이란 무엇입니까? –

+0

죄송합니다 - Linqpad 것입니다. C# 코드 조각을 작성하기위한 훌륭한 무료 도구입니다. –

0

방법이 솔루션에 대해 :

private static IEnumerable<string> SplitLongString(string input, char separator, int groupSize) 
{ 
    int indexCurrent = 0; 
    int indexLastOccurence = 0; 
    int separatorCounter = 0; 

    foreach (var character in input) 
    { 
     indexCurrent++; 

     if (character == separator) 
     { 
      separatorCounter++; 

      if (separatorCounter % groupSize == 0) 
      { 
       yield return input.Substring(indexLastOccurence, indexCurrent - indexLastOccurence); 
       indexLastOccurence = indexCurrent; 
      } 
     } 
    } 

    if (indexCurrent != indexLastOccurence) 
    { 
     yield return input.Substring(indexLastOccurence, indexCurrent - indexLastOccurence); 
    } 
} 

그리고 당신 내가 전화 할거야. t :

var result = SplitLongString(input, ',', 5); 

foreach (var row in result) 
{ 
    Console.WriteLine(row); 
} 
관련 문제