2017-03-31 4 views
0

매일 - FileHelpers 라이브러리를 사용하여 C# 응용 프로그램에서 5 개의 파일을 처리해야합니다. 각 파일은 다른 클라이언트에서 제공됩니다.FileHelpers에서 클래스의 필드 순서를 동적으로 변경하는 방법

모든 파일이 동일한 엔티티를 나타냅니다. 따라서 모든 프로그램이 "모든"필드를 포함하는 "개별"클래스를 가지며 파일의 데이터를이 개체로로드해야합니다. (파일은 구분 된 파일 임)

문제는 각 파일이 자신의 순서대로 열에 도착한다는 것입니다. 예 : 클라이언트 1은 성, 성, SSN, 연령 을 전송합니다. 클라이언트 2는 이름, 나이, 성, SSN을 전송합니다. 클라이언트 3이 전송합니다. 이름, SSN, 성 (연령은 선택 사항이므로이 클라이언트가 보내지 않음))

난 정말이 하나의 클래스를 사용하여 각 클라이언트에 대해 하나 개의 클래스를 만들 수 없습니다 처리하고 싶습니다 - 내 고객 기반이 희망 :-)에게 성장 때문에

사람이 상황을 처리하기위한 어떤 영리한 아이디어가 있습니까 FileHelpers와 함께?

감사

답변

0

용액 내가 대신 강력하게 이러한 방법 중 하나 추진할 것, 각 csv 파일에 대한 필드 이름의 헤더 행을 삽입하고

0

개인적으로 클래스에서이를 관리 할 수 ​​:

a) 필드 순서 및 각 열 데이터 형식의 고유 한 지정, 고유성 등을 지정하십시오. 새 클라이언트는 지정된 형식을 사용하고 이전 클라이언트가 내보내기를 변경할 때 이전 클라이언트를 전환하도록 권장합니다.

b) 고객이 필드 순서가 중요하지 않은 곳에서 지정한 형식으로 전환하도록하십시오. JSON 또는 XML. 예 : "더 많은 기능을 허용합니다."

c) a) & b)가 작동하지 않는 경우, 내부 클래스로 변환하기 전에 전처리로 필요한 경우 여러 클래스를 사용하십시오. 고객에게 현장 주문을 의무화 할 수없는 경우 현장 주문 이외의 다른 사항도 어느 시점에서 다를 수 있으므로 고객 별 처리를 마무리해야합니다. 여전히 으로 클래스를 사용하십시오. 일부 클라이언트는 동일한 순서 & 콘텐츠를 사용할 수 있습니다.

내 0.02SKr 가치 (인 스웨덴어 :

0

당신은 DelimitedClassBuilder를 사용하여 코드에서 당신에게 기록 클래스를 만들 수있다.

string[] columns; // populate this somehow: e.g., read the header. 

// create the FileHelpers record class 
// alternatively there is a 'FixedClassBuilder' 
DelimitedClassBuilder cb = new DelimitedClassBuilder("Customers", ","); 
cb.IgnoreFirstLines = 1; 
cb.IgnoreEmptyLines = true; 

// populate the fields based on the columns 
foreach (string column in columns) 
{ 
    cb.AddField(column, typeof(string)); 
    cb.LastField.TrimMode = TrimMode.Both; 
} 

// load the dynamically created class into a FileHelpers engine 
FileHelperEngine engine = new FileHelperEngine(cb.CreateRecordClass()); 

// import your records 
DataTable dt = engine.ReadFileAsDT("testCustomers.txt"); 
관련 문제