2014-06-17 1 views
4

Extreme noob learning question ahead : C# (범용) 응용 프로그램에서 사용하고 싶은 모듈이 있습니다. C# 응용 프로그램은 항상 같은 형식을 따르는 12 개의 CSV가 포함 된 파일을 다운로드하고 압축을 풉니 다. 그래서 내가 한 것은 CSV를 미리 다운로드하고 솔루션에 추가하여 CSVProvider < "thefile.csv">에서 참조하는 파일을 컴파일 할 때 거기에있게합니다.F # 데이터 CsvProvider는 C# 응용 프로그램에서 사용합니다. Interop

namespace ExperimentalFSLibrary  
module CsvHelper = 
    open FSharp.Data 
    let GetCsvA path = 
     CsvProvider<"thefileA.csv">.Load(path) 

다음과 같이 내 C# 응용 프로그램에서이 전화 :

var ReceivedCsvA = ExperimentalFSLibrary.CsvHelper.GetCsvA 

을 나는 F 번호 라이브러리

에서 데이터를 가져 오는 어떤 성공이 없었 처리하는 방법의 문제도 있습니다 12 개의 서로 다른 파일을 가지고 있기 때문에 CsvProvider에 대한 템플릿 파일을 지정해야하므로 12 개의 다른 함수를 작성해야한다고 생각하십니까?

나는 주변을 수색했으며 지금까지 나를 잡았지만 벽에 부딪쳤다. 온 전성 검사를 포함한 모든 도움은 매우 감사하겠습니다.

답변

4

CsvProvider (FSharp.Data)은 소거 유형 제공자입니다. 즉, C#에서 소비하고 사용할 형식이 없습니다.

많은 F # 유형 공급자 (예 : this)는 F #에서 사용할 때만 유용합니다.

이 경우 CSV 데이터를 구문 분석하고 필요한 결과를 C# 코드의 일부 API 소모품을 통해 반환하는 것이 좋습니다.

12 개의 다른 파일을 처리하는 방법에 대한 문제가 있습니다. CsvProvider에 대한 템플릿 파일을 지정해야하므로 12 개의 다른 함수를 작성해야 할 것이라고 생각하십니까?

일반적으로 파일 단위가 아닌 파일 구조에 대해 별도의 기능이 필요합니다. 12 개의 파일이 모두 동일한 열/헤더/등을 사용하는 경우 단일 유형 공급자 유형이 각 항목에 대해 작동합니다. 제공된 정적 파일 이름은 생성 된 유형의 열 구조를 판별하는 데에만 사용됩니다.

+0

응답 해 주셔서 감사합니다. - F # 내에서 내 비즈니스 로직을 더 많이 수행하고 좀 더 기본적인 것을 반환하는 것이 유익할까요? 어쩌면 C#에서 정의 된 형식과 F # 코드로로드하는 것입니다. C#을 사용할 것입니다. 그러나 내가 충분히 좋아했던 8.1 범용 응용 프로그램과 잘 작동하는 라이브러리는 없습니다. 또는 좋은, 네이티브/내장 된 C# 파서 – jschneidereit

+1

@ t0rqued 그건 내가 뭘 할거야 - 제 제안은 가능한 한 F #에서 로직을 많이 유지하는 것입니다 - 파싱 및 변환 처리를위한 훨씬 더 깨끗한 ... 그냥 패스 끝에있는 개체를 C#으로 끝냅니다. –

관련 문제