2016-07-04 13 views
0

/t文字を使用して次の文字列を分割しようとしています。分割がTAB文字で動作しません

string bounces = "BounceEmail\tBounceType\tBounceDate\tBounceDescription\r\[email protected]\tHARD_BOUNCE\t2016-07-01 
16:50:26\t\r\[email protected]\tHARD_BOUNCE\t2016-07-01 
16:50:26\t" 

しかし、私の驚きに、次のコマンドが動作しないと私は上記と同じ文字列であるだけで一つの要素の配列を取得します:

string[] columns = bounces.Split('\t'); 

UPDATE:ここに完全な機能ですがDataTable

public static DataTable GetCsvStringAsDataTable(string csvContent, char delimeter) 
{ 
    DataTable dt = new DataTable(); 
    List<string> lines = new List<string>(); 
    try 
    { 
     string[] linesArr = csvContent.Split(Environment.NewLine.ToCharArray()); 
     foreach (var line in linesArr) 
      lines.Add(line); 
     if (lines.Count == 0) 
      return null; 
     string headerLine = lines[0]; 
     string[] columns = headerLine.Split(delimeter); 
     lines.RemoveAt(0); 
     for (int col = 0; col < columns.Length; col++) 
      dt.Columns.Add(columns[col].Trim()); 
     foreach (var line in lines) 
     { 
      var cols = line.Split(delimeter); 
      DataRow dr = dt.NewRow(); 
      for (int cIndex = 0; cIndex < cols.Length; cIndex++) 
       dr[cIndex] = cols[cIndex].Trim(); 
      dt.Rows.Add(dr); 
     } 
     return dt; 
    } 
    catch (Exception ex) 
    { 
     Log.Error(ex.Message); 
     return null; 
    } 

} 

にCSVファイルの内容を変換UPDATE 2:これはAPIから受け取った入力文字列です。

enter image description here

+1

ここで与えられたあなたのコードでは、作業を行います。あなたはファイルから文字列を読み込みますか?それは本当に何を含んでいますか? –

+0

@PatrickHofman私は使用している機能全体を使ってコードを更新しました。私はコードを簡素化し、それはおそらく合理的ではなかった。 – Disasterkid

+0

私は4行のデータテーブルを取得します。 –

答えて

1

私はあなたの機能ビットを改善するために自由を取りました。
私のバージョンは、COLの区切りと行区切り文字の両方受け入れ:

public static DataTable GetCsvStringAsDataTable(string csvContent, char[] rowDelimeter, char[] colDelemiter) 
{ 
    try 
    { 
     var lines = csvContent.Split(rowDelimeter, StringSplitOptions.RemoveEmptyEntries); 
     if (lines.Length == 0) 
     { 
      return null; 
     } 
     var header = lines[0]; 

     var columns = header.Split(colDelemiter, StringSplitOptions.RemoveEmptyEntries); 

     var dt = new DataTable(); 
     foreach (var column in columns) 
     { 
      dt.Columns.Add(column); 
     } 
     foreach (var line in lines.Skip(1)) 
     { 
      var cols = line.Split(colDelemiter, StringSplitOptions.RemoveEmptyEntries); 
      dt.Rows.Add(cols); 
     } 
     return dt; 
    } 
    catch (Exception ex) 
    { 
     Log.Error(ex.Message); 
     return null; 
    } 
} 

をそして、あなたはこのようにそれを使用します。

var rowDelimeter = new char[] { '\r', '\n' }; 
var colDelemiter = new char[] { '\t' }; 
var dt = GetCsvStringAsDataTable(bounces, rowDelimeter, colDelemiter); 
+0

ありがとうございます。しかし、私はまだ1つの要素だけを受け取り、それは入力文字列全体です。 – Disasterkid

+0

@ Steve Good catch!、それは基本的にちょっとした修正を加えたコピー貼りですので、私はそれを理解しませんでした。 –

+0

ありがとう。私は主な問題を修正するとすぐにあなたの改善版を置き換えます。 – Disasterkid

関連する問題