2012-11-19 2 views
4

텍스트 파일 [탭 구분]을 읽고 데이터 테이블을 반환하는이 코드 블록이 있습니다. 하지만 문제는 파일이나 레코드의 첫 번째 줄을 헤더로 처리하고 남은 줄을 레코드 수만큼 빼는 것입니다. - 그래서 코드에서 파일의 모든 내용을 읽으려고합니다. 기록. 내가텍스트 파일에서 데이터 테이블 채우기

foreach(string dc in value) 
{ 
dt.columns.add(New DataColumn(dc)); 
} 

와 연관된 모든 라인 코드는 DT 반환 아무것도를 제거하려고하면

streamReader reader = new streamReader (filePath); 
string line = reader.readLine(); 
Datatable dt = new Datatable(); 
DataRow row; 
string[] value = line.Split('\t'); 

foreach(string dc in value) 
{ 
dt.columns.add(New DataColumn(dc)); 
} 

while(!reader.endofStream) 
{ 
    value = reader.ReadLine().split('\t'); 

    if (value.Length == dt.Columns.Count) 
{ 
    row = dt.NewRow(); 
    row.ItemArray = value; 
    dt.Rows.Add(row); 
} 

} 

return dt; 

: 여기

는 코드입니다.

어떻게 해결할 수 있습니까?

답변

5

헤더가 없다는 것을 알고 있으면 열의 이름도 모른다는 것을 알고 있습니다. 그렇습니까? 그럼 당신은 대신 "익명"열을 추가해야합니다

DataTable dt = new DataTable(); 
while (reader.Peek() >= 0) 
{ 
    string line = reader.ReadLine(); 
    string[] fields = line.Split('\t'); 
    if (dt.Columns.Count == 0) 
    { 
     foreach (string field in fields) 
     { 
      // will add default names like "Column1", "Column2", and so on 
      dt.Columns.Add(); 
     } 
    } 
    dt.Rows.Add(fields); 
} 
+0

의 DT는 아무것도 – Djama

+1

없음을 반환 그렇지 않습니다. 파일이 비어 있다면'dt'는 빈'DataTable'입니다. 파일에 행이 포함되어 있으면 DataTable에 'n'DataColumns가 있습니다. 여기서 'n'은 첫 번째 행의 필드 수입니다. –

3
DataTable dt = new DataTable(); 
var lines = File.ReadAllLines(strPath).ToList(); 
dt.Columns.AddRange(lines.First().Split(new char[] { '\t' }).Select(col => new DataColumn(col)).ToArray()); 
lines.RemoveAt(0); 
lines.Select(x => x.Split(new char[] { '\t' })).ToList().ForEach(row => dt.Rows.Add(row)); 

사용이 테스트 데이터

List<string> lines = new List<string>(); 
lines.Add("Col1\tCol2\tCol3"); 
lines.Add("aaa\tbbb\tccc"); 
관련 문제