PowerQuery для анализа фиксированной ширины CSV

701
pashtetGP

У меня фиксированная ширина csv.txt, например

Martin Junger 12  John Wing 124 

Чтобы загрузить его с PowerQuery этот синтаксис используется:

let Source = Csv.Document(File.Contents("C:\csv.txt"),null,";",null,1251), #"Split Column name" = Table.SplitColumn(Source,"Column1",Splitter.SplitTextByPositions(, false),{"name", "ColumnOther"}), #"Split Column surname" = Table.SplitColumn(#"Split Column name","ColumnOther",Splitter.SplitTextByPositions(, false),{"surname", "ColumnOther"}), #"Split Column salary" = Table.SplitColumn(#"Split Column surname","ColumnOther",Splitter.SplitTextByPositions(, false),{"salary", "ColumnOther"}) in #"Split Column salary" 

Поэтому для каждого столбца в csv мне нужно создать новую Table.SplitColumnкоманду, которая совсем не удобна. Есть ли синтаксис, чтобы сделать это в одной команде?

Спасибо

0
Я никогда не использовал powerquery, но что если бы в csv вместо фиксированной ширины были разделители, это облегчило бы это? Raystafarian 9 лет назад 0
Если он разделен - то его можно проанализировать без проблем. Но я должен работать с фиксированным разделителем. pashtetGP 9 лет назад 0

2 ответа на вопрос

0
evan

Вам не нужно использовать плагин PowerQuery для Excel для импорта фиксированной ширины - он встроен.

шаги:

  1. Вкладка «Данные из текста» (раздел «Получение внешних данных»)
  2. Выберите ваш CSV-файл
  3. Посмотрите, что это вызывает Мастер импорта текста
  4. В: Исходный тип данных выберите «Фиксированная ширина»
  5. Действуйте через мастера соответствующим образом

enter image description here

0
Mike Honey

Although it's not mentioned in the doco, Csv.Document accepts a list as the "optional delimiter" argument, specifying the (zero-based) start position of each column. You can see this below in the Query generated by PQ when I pointed it at that file (e.g. using Excel 2016: Data ribbon / New Query / From File / From Text). The "optional delimiter" argument is:

let Source = Csv.Document(File.Contents("C:\csv.txt"),null,,null,1252), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", Int64.Type}}) in #"Changed Type"