拆分不使用TAB角色

时间:2016-07-04 08:11:09

标签: c# string split

我正在尝试使用/t字符拆分以下字符串。

string bounces = "BounceEmail\tBounceType\tBounceDate\tBounceDescription\r\nuiohouih@gmaipuohuiphil.comj\tHARD_BOUNCE\t2016-07-01
 16:50:26\t\r\nuiohouih@gmaipuohuiphil.comj\tHARD_BOUNCE\t2016-07-01
 16:50:26\t"

但令我惊讶的是,以下命令不起作用,我得到一个只有一个元素的数组,它是上面相同的字符串:

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

更新:以下是将CSV文件内容转换为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;
    }

}

更新2 :这是我从API收到的输入字符串。

enter image description here

1 个答案:

答案 0 :(得分: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);