2016-09-09 3 views
2

데이터 집합의 행과 열을 루핑하여 파이프 구분 기호가있는 텍스트 파일에 작성합니다. 나는 마지막 칼럼에서 파이프를 벗어날 필요가 있다는 것을 제외하고는 작동시킨다. fields.count-1을 통해 반복하도록 루프를 조정 한 다음 루프 외부의 마지막 필드를 참조 할 수있는 방법이 있습니까?데이터 세트를 반복 함

foreach (object item in row.ItemArray) 
{ 
    d = d+ item.ToString() + "|"; 
} 
+5

'String.Join ("|", row.ItemArray)'? –

+0

반복 할 행에 null 값이 있습니까? – Steve

+0

@PanagiotisKanavos가 답을 추가합니다. 그것은 이미 추가 된 다른 두 개보다 낫습니다. – Will

답변

6

당신은 예를 들어 String.Join 사용하는 IEnumerable을 (를 포함한 배열)의 내용을 가입 할 수 있습니다 : 당신이 다른 값을 추가하는 경우

var newText = String.Join("|",row.ItemArray); 
1

당신은 Linq에 집계를 사용할 수 있습니다

string.Join("|", row.ItemArray); 
+0

이 방법은 String.Join()보다 더 간단합니까? 말하자면, String과 관련된 문제가 있는지 묻는 것입니다 .Join(). – Overhed

+0

아니, 그냥 생각하지 않았다. –

+0

Gotcha. LINQ가 모든 것을 실제로 할 수있는 것처럼 보입니다. :) – Overhed

1

당신은 당신이 사용할 수있는

d.TrimEnd(new char[]{'|'}); 
1

같은 TrimEnd(Char[]) 방법을 사용할 수 있습니다

d = d.remove(d.Count()-1); 

문자열의 마지막 문자가 제거됩니다. 다음과 같이

0

를 루프 후 :

d = row.ItemArray.Aggregate((x, y) => x.ToString() + "|" + y.ToString()); 
1

당신은 단지의 string.Join 방법을 사용할 수 있습니다 :

string.Join("|", row.ItemArray); 

을 그러나 당신이뿐만 아니라 foreach 루프에서 다른 로직을 수행하는 경우, 대신 StringBuilder을 사용하는 것이 좋습니다. 문자열을 반복해서 연결하는 것 이상의 성능 향상 효과가 있습니다. 그런 다음 길이를 조정하여 최종 파이프를 간단하게 다듬을 수 있습니다.

var d = new StringBuilder(); 
foreach (object item in row.ItemArray) 
    d.Append(item.ToString()).Append("|"); 

d.Length -= 1; 
+1

'ToString()'또는 'ToArray()'를 호출 할 필요가 없습니다. –

+0

그래, 어떤 이유로 나는 항상 내가'string [] '만 전달할 필요가 있다고 생각하고, 대답을 업데이트했습니다. – entropic

+0

IEnumerable 지원이 4.0에서 추가되었습니다. 이 사실을 깨닫기까지 2 년이 걸렸습니다. 나는 SO 질문을보고 깨달았다 고 생각한다. –

0
for(int i = 0; i < row.ItemArray.Length; i ++) 
{ 
    if(row.ItemArray[i] == row.itemArray[row.itemArray - 1]) 
    { 
     d = d+ item.ToString(); 
    } 
    else 
    { 
    d = d+ item.ToString() + "|"; 
    } 
} 
0

만 구분 기호를 추가합니다.

for(int i = 0; i < row.ItemArray.Length; i ++) 
{ 
    if(d.length == 0) 
    { 
     d = item.ToString(); 
    } 
    else 
    { 
     d = d + "|" + item.ToString(); 
    } 
} 
관련 문제