2010-01-20 5 views
2

홀수 항목이 인덱스 번호이고, 심지어 엔트리가 데이터 인 파이프 구분 형식의 데이터가 있습니다.. 홀수와 짝수 파이프로 구분 된 데이터를 분할하는 방법.

1|cat|2|dog|3|manatee|4||5|gerbil|6|etc 

(주 가끔 누락 된 값)

및 ID와 이름을 매개 변수로 클래스 애완 동물로이 전환의 좋은 .NET 타입의 방법이 있는지 궁금 해요.

나는 String.Split을 수행하고 배열을 반복하면서 객체들을 긁어 모으는 코드를 가지고있다. 그러나 C#보다 PL/SQL을 작성하는 것처럼 보인다. 나는 방법이있을 것이라고 확신한다. Linq 또는 단일 행에서이 작업을 수행하는 사람 - 나에게이 작업을 수행하는 '올바른'방법을 알 수 있습니까?

감사

답변

3

당신은 필드에 문자열의 구문 분석 (나는 그것이 VB 클래스 알고,하지만 당신은 C#을에서 액세스 할 수 있습니다) 처리 할 수 ​​TextFieldParser 클래스를 사용할 수 있습니다. 그런 다음 새 필드에 필드를 번갈아 가며 설정하십시오. 여기

는 C 번호로 변경, MSDN의 예제 :

using (Microsoft.VisualBasic.FileIO.TextFieldParser MyReader = 
     new Microsoft.VisualBasic.FileIO.TextFieldParser("C:\\testfile.txt")) 
    { 
     MyReader.TextFieldType = FileIO.FieldType.Delimited; 
     MyReader.SetDelimiters(","); 
     string[] currentRow = null; 
     while (!MyReader.EndOfData) 
     { 
      try 
      { 
       currentRow = MyReader.ReadFields(); 
       string currentField = null; 
       foreach (var currentField in currentRow) 
       { 
        //set values for your object here 
       } 
      } 
      catch (Microsoft.VisualBasic.FileIO.MalformedLineException ex) 
      { 
       //handle the exception 
      } 
     } 
    } 
+0

답장을 보내 주셔서 감사합니다. 이 상황에서 String.Split보다 뛰어난 TextFieldParser입니까? 내가 정말로 찾고있는 것은 대체 항목을 기반으로 값을 설정하는 좋은 .NET 방식입니다. 나는 다른 해결책으로 내 솔루션을 게시했지만, 나는 그것을하는 '깨끗한'방법이라고 생각하지 않는다. –

+1

아마 Linq과 비슷한 방법 일지 모르지만 Linq에 친숙하지 않다면 TextFieldParser보다 TextFieldParser가 더 깨끗한 지 모르겠습니다. TextFieldParser의 장점은 파싱과 모든 이상한 케이스를 강력하게 처리한다는 것입니다 (귀하의 경우에는 많지는 않지만 실제로 올 수있는 것 같습니다). TextFieldParser만큼 강력하기 전에 자신 만의 모든 작업을 수행해야합니다. – jball

1

이 내가 어떤 작품을했지만 ...

그 일의 매우 '.NET'방법을하지 않는 것 같습니다 어떻게
public List<Pet> CreatePets(String PetData) 
{ 
    List<Pet> PetList = new List<Pet>(); 
    string[] PetArray = PetData.Split(new char[]{'|'}, StringSplitOptions.None); 
    for (int i = 0; i < PetArray.Count(); i += 2) 
    { 
     Pet NewPet= new Pet(Convert.ToInt32(PetArray[i]), PetArray[i+1]); 
     PetList.Add(Field); 
    }     
    return PetList; 
} 
+1

이 방법은 TextFieldParser만큼 좋은 방법이라고 생각합니다. 몇 가지 의견 - 루프 조건은 끝에 고아가있을 경우에 대비하여'i jball

0

다음은 문자열 배열을 "|"로 분리하는 방법입니다. 그것은 GridView의 colunms 잘 작동합니다.

Public Function GridViewColumnsWidths(ByVal Gridview As GridView, ByVal ColumnNameCommaWidth As String) As Boolean 
       Dim i As Boolean 
       Dim ArrayOfItem As String() = Split(ColumnNameCommaWidth, "|",, CompareMethod.Text) 'eg: "ColA|200|ColB|100|ColC|300" 
       For IndexOfItem As Integer = 0 To ArrayOfItem.Count - 1 
        Dim Column As String = ArrayOfItem(IndexOfItem) 
        Dim Width As Integer = Convert.ToInt16(ArrayOfItem(IndexOfItem + 1)) 
        With Gridview.Columns 
         .Item(Column).Width = Width 
        End With 
        IndexOfItem += 1 
       Next 
       Return i 
      End Function 
관련 문제