Как разбить строку, где в каждой ячейке есть 2 данных, разделенных символом возврата каретки? - PullRequest
1 голос
/ 26 мая 2019

Кто-то дает мне файл с порой неадекватными данными.

Данные должны быть такими:

+---------+-----------+--------+
| Name    | Initial   | Age    |
+---------+-----------+--------+
| Jack    | J         | 43     |
+---------+-----------+--------+
| Nicole  | N         | 12     |
+---------+-----------+--------+
| Mark    | M         | 22     |
+---------+-----------+--------+
| Karine  | K         | 25     |
+---------+-----------+--------+

Иногда это происходит так:

+---------+-----------+--------+
| Name    | Initial   | Age    |
+---------+-----------+--------+
| Jack    | J         | 43     |
+---------+-----------+--------+
| Nicole  | N         | 12     |
| Mark    | M         | 22     |
+---------+-----------+--------+
| Karine  | K         | 25     |
+---------+-----------+--------+

Как видите, Николь и Марк помещаются в одну и ту же строку , но данные разделяются переводом каретки.

Я могу сделать , разделить на строку , но он умножает данные:

+---------+-----------+--------+
| Nicole  | N         | 12     |
|         | M         | 22     |
+---------+-----------+--------+
| Mark    | N         | 12     |
|         | M         | 22     |
+---------+-----------+--------+

Что заставляет меня потерять, что Марк связан со "2-й строкой" данных.

(данные здесь являются просто примером)

1 Ответ

0 голосов
/ 28 мая 2019

Один из способов сделать это - преобразовать каждую ячейку в список, выполнив Text.Split на символе перевода строки / возврата каретки.

TextSplit = Table.TransformColumns(Source,
                {
                    {"Name",     each Text.Split(_,"#(lf)"), type text},
                    {"Initial",  each Text.Split(_,"#(lf)"), type text},
                    {"Age",      each Text.Split(_,"#(lf)"), type text}
                }
            )

Теперь каждый столбец представляет собой список списков, который вы можете объединить в один длинный список, используя List.Combine, и вы можете склеить эти столбцы вместе, чтобы создать таблицу с Table.FromColumns.

= Table.FromColumns( 
      {
          List.Combine(TextSplit[Name]),
          List.Combine(TextSplit[Initial]),
          List.Combine(TextSplit[Age])
      },
      {"Name", "Initial", "Age"}
  )

Если сложить все вместе, весь запрос будет выглядеть так:

let
    Source = <Your data source>
    TextSplit = Table.TransformColumns(Source,{{"Name",  each Text.Split(_,"#(lf)"), type text},{"Initial",  each Text.Split(_,"#(lf)"), type text},{"Age",  each Text.Split(_,"#(lf)"), type text}}),
    FromColumns = Table.FromColumns({List.Combine(TextSplit[Name]),List.Combine(TextSplit[Initial]),List.Combine(TextSplit[Age])},{"Name","Initial","Age"})
in
    FromColumns
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...