2010-01-26 8 views
8

약 100,000 개의 행, 약 50 개의 행을 갖는 텍스트 파일이 있습니다. 대부분의 데이터는 매우 작습니다 (5 ~ 10 자 또는 숫자).C에서 탭으로 구분 된 텍스트 파일을 읽는 가장 좋은 방법은 무엇입니까

이것은 매우 간단한 작업이지만이 데이터를 C# 데이터 구조 (예 : DataTable)로 가져 오는 것이 가장 좋은 방법일까요?

+0

100,000 행, 당신은 아마 DataTable을에로드하고 싶지 않아요. SqlBulkCopy를 데이터베이스에 삽입 할 때 SqlBulkCopy를 사용하여 살펴볼 수 있습니다. –

답변

9

나는 탭 열 구분 기호와 CSV로 읽을 것입니다 :

A Fast CSV Reader

편집 :

DataTable dt = new DataTable(); 
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) { 
    dt.Load(csv); 
} 
:

여기 당신이 필요로하는 것 무엇을 베어 예제

여기서 CSV_FULLNAME은 탭으로 구분 된 CSV의 전체 경로 + 파일 이름입니다.

+0

우리는 우리의 응용 프로그램 에서이 CSV 리더를 사용하여, 훌륭합니다. –

+0

체크 아웃 할 것입니다. 누구든지 탭 열 구분 기호와 함께 사용하기 위해 샘플 코드를 가지고 있습니까? – alchemical

+0

나는 이런 식으로 할 것을 제안했다. ADO.Net 액세스를 위해 Access/Jet 드라이버를 사용할 수도 있지만 거기에는 때로는 약간의 기이함이 있습니다. – Tracker1

0

두 가지 옵션 :

  1. System.Data.OleDb 네임 스페이스의 클래스를 사용합니다. 이것은 아주 적은 코드로 질문하는 것처럼 데이터 테이블에 직접 읽는 장점이 있지만 쉼표로 구분 된 것이기 때문에 탭하기 때문에 까다로워 질 수 있습니다.
  2. csv 파서를 사용하거나 작성하십시오. @Jay Riggs가 String.Split() 기반 파서가 아닌 State Machine 기반 파서인지 확인하십시오. 이 방법은 OleDb 메서드보다 빠르지 만 데이터 테이블이 아닌 목록 또는 배열을 제공합니다.
+0

String.Split()과 반대되는 상태 기반 파서를 제안하는 이유가 궁금합니다. –

+0

성능, 주로. 그러나 string.split을 사용하면 따옴표로 묶인 텍스트와 같은 것을 얻을 수 있습니다. –

+0

또한, "상태 머신"에 의해 나는 거의 잘못된 것으로 보이는 Regex를 의미하지 않습니다. 내림차순/재귀를보다 잘 처리 할 수있는이 작업을 위해 만들어진 상태 시스템입니다. –

1

FileHelpers 정도면 탭을 구분 기호로 정의 할 수 있습니다. 링크를 통해 해당 사이트로 이동하고 엿보는 소리를 들으십시오.

호프가 도움이 되었으면 안녕하세요, 탐.

0

그러나 선을 구문 분석 할 때는 데이터 표의 데이터 소스 인 전달 및 되감기를 지원하는 항목을 사용해야합니다. 먼저 메모리에 모든 것을로드하고 싶지는 않습니까? 다음 번에 데이터의 양이 10 배가되어야한다면 어떨까요? file.seek를 깊이 사용하는 무언가를 만드십시오. 먼저 모든 것을 메모리로 읽지 마십시오. 그건 내 조언이다.

0

간단한 아니지만 반드시 좋은 방법 :

  • 사용 행을 얻을 수있는 문자열

  • 사용 사항 String.split에 텍스트 리더를 사용하여 파일을 읽기 필드 값을 얻기 위해 탭 문자가있는 String.Split

+0

그냥 그것에 대해 생각 나게 해 - 거기에 문자열 [] System.IO.File.ReadAllLines (문자열 경로) –

관련 문제