2012-11-21 3 views
2

다른 개발자가 작성한 데이터베이스에서 데이터를 읽고 내 보낸 응용 프로그램을 인수했습니다.TextFile의 DataTable?

개발자는 DataTables 및 DataAdaptors를 사용했습니다.

_dataAdapter = new SqlDataAdapter("Select * From C....", myConnection); 

그래서, 그리고 다음

ExtractedData = new DataTable("CreditCards"); 
_dataAdapter.Fill(ExtractedData); 

ExtractedData는 다른 기능을 수행하는 주위에 전달됩니다.

이제는 쉼표로 구분 된 텍스트 파일에서 동일한 형식의 데이터를 가져와야한다고 들었습니다. 응용 프로그램은 동일한 처리를 수행합니다. 두 소스에서 데이터를 가져 오는 것입니다.

위와 같이 DataTable에서 데이터를 읽은 다음 CSV 파일에서 더 많은 레코드를 추가 할 수 있는지 궁금합니다.

이것이 가능합니까?

+0

파일에서 총 열 정보를 결정하는 방법은 무엇입니까? 파일의 샘플 데이터를 보여주십시오. –

답변

7

파일에서 DataTable으로 데이터를 읽으려면이 기능을 사용해야 할 수도 있습니다.

public DataTable GetDataSourceFromFile(string fileName) 
{ 
    DataTable dt = new DataTable("CreditCards"); 
    string[] columns = null; 

    var lines = File.ReadAllLines(fileName); 

    // assuming the first row contains the columns information 
    if (lines.Count() > 0) 
    { 
     columns = lines[0].Split(new char[] { ',' }); 

     foreach (var column in columns) 
      dt.Columns.Add(column); 
    } 

    // reading rest of the data 
    for (int i = 1; i < lines.Count(); i++) 
    { 
     DataRow dr = dt.NewRow(); 
     string[] values = lines[i].Split(new char[] { ',' }); 

     for (int j = 0; j < values.Count() && j < columns.Count(); j++) 
      dr[j] = values[j]; 

     dt.Rows.Add(dr); 
    } 
    return dt; 
} 
0

확실히 가능합니다.
DataTable에는 NewRow 메서드가 있으므로 내가 볼 수있는 가장 단순하고 무차별 한 메서드는 한 번에 한 줄씩 텍스트 파일을 읽고 문자열 (split (",")을 구문 분석 한 다음 행의 필드를 채우는 것입니다. DataTable의의 새 행을 Rows 컬렉션을 추가 할 필요가
가이 작업을 수행하는 스마트 한 방법이 될 수 있지만,이 (스키마에 대한 지식으로) 실행하는데 간단 보인다

0

좋아,이 시도 :..

public string[] getColumns(bool ColumnNames) 
{ 
    try { 
     StreamReader fileReader = new StreamReader(FileName); 
     string line = fileReader.ReadLine; 
     fileReader.Close(); 
     string[] Columns = line.Split(","); 
     if (ColumnNames) { 
      return Columns; 
     } 
     int i = 1; 
     int c = 0; 
     string[] columnsNames = new string[Columns.Count]; 
     foreach (string column in Columns) { 
      columnsNames(c) = "column" + i; 
      i += 1; 
      c += 1; 
     } 
     return columnsNames; 
    } catch (Exception ex) { 
     //log to file  
    } 
    return null; 
} 

public DataTable ReturnData(bool ColumnNames) 
{ 
    try { 
     DataTable dt = new DataTable(); 
     foreach (columnName in getColumns(ColumnNames)) { 
      dt.Columns.Add(columnName); 
     } 
     StreamReader fileReader = new StreamReader(FileName); 
     if (ColumnNames) { 
      fileReader.ReadLine(); 
     } 
     string line = fileReader.ReadLine; 
     while ((line != null)) { 
      line = line.Replace(Strings.Chr(34), ""); 
      dt.Rows.Add(line.Split(",")); 
      line = fileReader.ReadLine; 
     } 
     fileReader.Close(); 
     return dt; 
    } catch (Exception ex) { 
     //log to file 
    } 
    return null; 
}