약 100,000 개의 행, 약 50 개의 행을 갖는 텍스트 파일이 있습니다. 대부분의 데이터는 매우 작습니다 (5 ~ 10 자 또는 숫자).C에서 탭으로 구분 된 텍스트 파일을 읽는 가장 좋은 방법은 무엇입니까
이것은 매우 간단한 작업이지만이 데이터를 C# 데이터 구조 (예 : DataTable)로 가져 오는 것이 가장 좋은 방법일까요?
약 100,000 개의 행, 약 50 개의 행을 갖는 텍스트 파일이 있습니다. 대부분의 데이터는 매우 작습니다 (5 ~ 10 자 또는 숫자).C에서 탭으로 구분 된 텍스트 파일을 읽는 가장 좋은 방법은 무엇입니까
이것은 매우 간단한 작업이지만이 데이터를 C# 데이터 구조 (예 : DataTable)로 가져 오는 것이 가장 좋은 방법일까요?
나는 탭 열 구분 기호와 CSV로 읽을 것입니다 :
편집 :
DataTable dt = new DataTable();
using (CsvReader csv = new CsvReader(new StreamReader(CSV_FULLNAME), false, '\t')) {
dt.Load(csv);
}
:이
여기서 CSV_FULLNAME은 탭으로 구분 된 CSV의 전체 경로 + 파일 이름입니다.
우리는 우리의 응용 프로그램 에서이 CSV 리더를 사용하여, 훌륭합니다. –
체크 아웃 할 것입니다. 누구든지 탭 열 구분 기호와 함께 사용하기 위해 샘플 코드를 가지고 있습니까? – alchemical
나는 이런 식으로 할 것을 제안했다. ADO.Net 액세스를 위해 Access/Jet 드라이버를 사용할 수도 있지만 거기에는 때로는 약간의 기이함이 있습니다. – Tracker1
두 가지 옵션 :
System.Data.OleDb
네임 스페이스의 클래스를 사용합니다. 이것은 아주 적은 코드로 질문하는 것처럼 데이터 테이블에 직접 읽는 장점이 있지만 쉼표로 구분 된 것이기 때문에 탭하기 때문에 까다로워 질 수 있습니다.String.Split()과 반대되는 상태 기반 파서를 제안하는 이유가 궁금합니다. –
성능, 주로. 그러나 string.split을 사용하면 따옴표로 묶인 텍스트와 같은 것을 얻을 수 있습니다. –
또한, "상태 머신"에 의해 나는 거의 잘못된 것으로 보이는 Regex를 의미하지 않습니다. 내림차순/재귀를보다 잘 처리 할 수있는이 작업을 위해 만들어진 상태 시스템입니다. –
약 FileHelpers 정도면 탭을 구분 기호로 정의 할 수 있습니다. 링크를 통해 해당 사이트로 이동하고 엿보는 소리를 들으십시오.
호프가 도움이 되었으면 안녕하세요, 탐.
그러나 선을 구문 분석 할 때는 데이터 표의 데이터 소스 인 전달 및 되감기를 지원하는 항목을 사용해야합니다. 먼저 메모리에 모든 것을로드하고 싶지는 않습니까? 다음 번에 데이터의 양이 10 배가되어야한다면 어떨까요? file.seek를 깊이 사용하는 무언가를 만드십시오. 먼저 모든 것을 메모리로 읽지 마십시오. 그건 내 조언이다.
간단한 아니지만 반드시 좋은 방법 :
이
사용 행을 얻을 수있는 문자열
사용 사항 String.split에 텍스트 리더를 사용하여 파일을 읽기 필드 값을 얻기 위해 탭 문자가있는 String.Split
그냥 그것에 대해 생각 나게 해 - 거기에 문자열 [] System.IO.File.ReadAllLines (문자열 경로) –
.NET의 내장 텍스트 파서를 사용하십시오. 그것은 무료이며 큰 오류 처리 기능이 있으며 이상한 공을 많이 처리합니다.
http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.fileio.textfieldparser(VS.80).aspx
이 VB는 것입니까? – alchemical
아니, 그 팀이 그것을 구축했기 때문에 VB 네임 스페이스에있을뿐입니다. 모든 .NET 언어에서 사용할 수 있습니다. –
100,000 행, 당신은 아마 DataTable을에로드하고 싶지 않아요. SqlBulkCopy를 데이터베이스에 삽입 할 때 SqlBulkCopy를 사용하여 살펴볼 수 있습니다. –