c# datatable объединить определенные строки и столбцы datatable - PullRequest
0 голосов
/ 05 марта 2020

внутри datatable есть 6 столбцов, я хотел бы объединить строки и столбцы columns1 / columns1 и column2 / row2 вместе, но сохранить остальное. Поэтому я разделил лишний интервал с помощью метода split, но есть отдельные данные что я хотел объединить как "ZPRP 09-0729-01-MAR" стать "ZPRP09-0729-01-MAR" Пожалуйста, помогите: D

Пример данных: test1.txt

MY01 CISCO ZPRP 08-0729-01-MAR 08-0729-01 1 EA
MY01 CISCO ZPRP 08-0729-01-MAR 08-0729-01 1 EA
MY01 CISCO ZPRP 08-0729-01-MAR 08 -0729-01 1 EA
MY01 CISCO ZPRP 10-2919-01 $ 1 10-2919-01 1 EA
MY01 CISCO ZPRP 10-2919-01 $ 1 10-2919-01 1 EA
MY01

Результат, который я хотел получить для отображения данных:

MY01 CISCO ZPRP08-0729-01-MAR 08-0729-01 1 EA
MY01 CISCO ZPRP08-0729-01-MAR 08-0729 -01 1 EA
MY01 CISCO ZPRP08-0729-01-МАР 08-0729-01 1 EA
MY01 CISCO ZPRP10-2919-01 $ 1 10-2919-01 1 EA
MY01 CISCO ZPRP10-2919- 01 $ 1 10-2919-01 1 EA
MY01

Данные, которые можно датировать

    private void Form1_Load(object sender, EventArgs e)
    {

        DataTable dt = new DataTable();
        string filepath = @"C:\Users\2563911\source\repos\test1.txt";
        using (System.IO.TextReader tr = File.OpenText(filepath))
        {
            string line;
            while ((line = tr.ReadLine()) != null)
            {

                if (!line.StartsWith("-"))
                {
                    if (line.Length < 82 || line.Contains("MY01"))
                    {        
                        string[] items = line.Replace("MY01","").Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);

                        if (dt.Columns.Count == 0 )
                        {
                            for (int i = 0; i < items.Length; i++)
                                dt.Columns.Add(new DataColumn("Column" + i, typeof(string)));                                

                        }
                        dt.Rows.Add(items);

                    }
                }
            }

            //show it in gridview
            this.DataGridView.DataSource = dt;
        }
    }
}

}

1 Ответ

0 голосов
/ 05 марта 2020
// The simple solution.
// Split the string at every space.
// Return a new array where you join or re-order the columns however you want.
string[] SplitIntoAndCombineColumns(string line)
{
    var parts = line.Split(' ');

    // Make sure our array is long enough.
    // If the string does not contain these fields,
    // they will be null in the result.
    if(parts.Length < 7) {
        Array.Resize(ref parts, 7);
    }

    var result = new[] {
        parts[0], parts[1], 
        // Combine these two columns
        parts[2] + parts[3],        
        parts[4], parts[5], parts[6]
    };

    return result;
}
...