2012-02-23 4 views
2

레코드가 가득 찬 텍스트 파일을 읽어야합니다. 레코드가 나열된 후 처음 두 행에 여러 필드가있는 머리글이 있습니다. 각 레코드는 3 개의 행을 포함합니다. 모든 기록은 고정 된 길이의 필드를 사용합니다. 필드로 dataTable을 채우고 싶습니다. 나는 시작과 필드의 길이를 가지고있어 모든 분야를 들어텍스트 파일에서 다중 행 고정 폭 레코드 읽기

header1 0101 2012 
header2 0202 0000 
rec10 abc 
rec11 def 
rec12 ghi 
rec20 jkl 
rec21 mno 
rec22 pqr 

:

예를 들어 파일처럼 볼 수 있었다.

StreamReader 및 하위 문자열을 사용해 보았지만 작동하지만 매우 어렵습니다.

더 좋은 방법이 있나요?

+1

이 질문을 프로그래머에게 게시하고 싶을 수도 있습니다 .stackexchange.com 그것은 Q & A가 아니라 알고리즘에 관한 것입니다. 사실보다 많은 의견을 얻는 경향이 있습니다. – Lazarus

답변

2

FileHelpers library를 사용하여, 당신의 예는 구문 분석 할 수있다 :과 같이 파일에서

[IgnoreFirst(2)] 
[FixedLengthRecord(FixedMode.ExactLength)] 
public sealed class Record 
{ 
    [FieldTrim(TrimMode.Right)] 
    [FieldFixedLength(6)] 
    public String Header1; 


    [FieldFixedLength(3)] 
    public String Data1; 

    [FieldInNewLine()] 
    [FieldTrim(TrimMode.Right)] 
    [FieldFixedLength(6)] 
    public String Header2; 

    [FieldFixedLength(3)] 
    public String Data2; 

    [FieldInNewLine()] 
    [FieldTrim(TrimMode.Right)] 
    [FieldFixedLength(6)] 
    public String Header3; 

    [FieldFixedLength(3)] 
    public String Data3; 
} 

로드 데이터 :

이 개체를 나타내는 클래스를 선언

FileHelperEngine<Record> engine = new FileHelperEngine<Record>(); 

engine.ErrorManager.ErrorMode = ErrorMode.SaveAndContinue; 

DataTable records = engine.ReadFileAsDT(@"myTextFile.txt"); 

if (engine.ErrorManager.ErrorCount > 0) 
    engine.ErrorManager.SaveErrors("Errors.txt"); 
0

일부 C# 순수 주체는이 아이디어를 싫어하지만 VB.NET 어셈블리를 포함하고 TextFieldParser class을 사용할 수 있습니다. 고정 필드 텍스트 파일로 작업 할 때 매우 편리하며 휠을 다시 개혁하지는 않습니다. 다중 행 레코드를 감지하고 처리하기위한 코드를 구현해야하지만 필드 구문 분석은 쉽게 구현해야합니다. 다음과 같이

+0

답변 해 주셔서 감사합니다. 이전에 TextFieldParser를 살펴 봤지만 프로젝트에 적용하는 방법을 알 수 없었습니다. – Fabi