Как разделить текстовый файл построчно на несколько отдельных файлов и удалить часть строки? Бесплатно, без СМС, и без Python!

Как разделить текстовый файл построчно и удалить часть строки

Как-то при тестировании процесса ввода в оборот маркированного товара пришлось иметь дело с большим количеством кодов SGTIN...

1. Сначала в тестовом контуре ГИС МТ (в так называемой песочнице - markirovka.sandbox.crptech.ru) была создана карточка товара, несколько дней прошло в статусе "модерация карточки", потом через обращение в техподдержку ГИС МТ она была наконец-то успешно выполнена.

Также с подсказки техподдержки был отправлен отдельный запрос в техподдержку ГИС МТ на отключение модерации для компании в тестовом контуре (нет смысла модерировать тестовый товар в песочнице :).

 

2. Затем был создан заказ на 100 000 кодов. Да, я решил не мелочиться! :)

ГИС МТ пыхтела 2 минуты, пока генерировала 100 тысяч кодов SGTIN.

 

3. После чего коды нужно "напечатать". Это можно сделать максимум:

  • по 500 шт. за 1 операцию - если выбирать формат – PDF, или
  • по 2 000 шт. за 1 операцию  - для формата EPC, или
  • по 30 000 шт. за 1 операцию - для формата CSV.

Логично, что 100 тысяч кодов удобнее и быстрее "печатать" в формат CSV, что и было сделано.

В результате получилось 4 файла с 30 000, 30 000, 30 000 и 10 000 кодов. В этих CSV-файлах коды SGTIN были записаны построчно с длинным криптохвостом в конце:

Как разделить текстовый файл построчно и удалить часть строки

 

 4. Следующим шагом нужно отправить отчет о нанесении кодов (подразумевается, что напечатанные коды наклеиваются на упаковки товара, но, так как при тестировании реального товара нет - все происходит в песочнице, то и нанесение кодов тоже виртуальное).

 




  

 

5. Последним шагом коды вводятся в оборот. Это можно делать по 200 кодов за одну операцию, вручную добавляя их, кликнув 20 раз (очень не спортивно и не интересно), а можно это делать гораздо быстрее - с помощью добавления кодов SGTIN из файла.

Но есть ограничение: разрешенный формат файлов - XLS и XSLX, количество кодов в файле должно быть не более 5 000 шт, и коды должны быть без криптохвостов, только сам код SGTIN с маркерами регулярного выражения - 01 и 21.

Файлы с кодами у нас есть, но их формат и содержимое не соответствует требованиям :(

В результате, задача была сформулирована следующим образом:

Как из CSV-файла с 30 000 строками получить несколько отдельных XLS-файлов с 5 000 строк, у которых еще должен быть обрезан криптохвост?

 

Решение - Powershell и регулярные выражения!

Команда в одну строчку:

 

gc 30000_1.csv -readcount 5000 | ForEach-Object { $i=0 } { $_ -replace "(^.{31})(.{54})", ('$1') | Out-File "file${i}.xls"; $i++}

 

gc - сокращенный вариант команды GetContent (чтение файла);

30000_1.csv - исходный многострочный файл, который нужно разделить на несколько с меньшим количеством строк;

-readcount 5000 - читать исходный файл по 5 000 строк;

-replace "(^.{31})(.{54})", ('$1') - разбить каждую строку файла на 2 части: первая часть - 31 символ (с 1 по 31 символы) и вторая - 54 символа (с 32 по 85 символы) и оставить только первую часть (заменить 2 части на одну - первую);

file${i}.xls - маска для имени файлов на выходе, вместо ${i} будет инкремент числа от 0 и далее.

 

Результат обработки:

Как разделить текстовый файл построчно и удалить часть строки

 

Как разделить текстовый файл построчно и удалить часть строки 

Теперь можно последовательно использовать полученные файлы и вводить в оборот коды SGTIN по 5 000 шт. за операцию.

 

Команду для Powershell можно написать чуть лаконичнее - таким образом:

 

gc 30000_1.csv -readcount 5000 | ForEach-Object { $i=0 } { $_ -replace "(^.{31})(.*)$", ('$1') | Out-File "file${i}.xls"; $i++}

 

Вместо (.{54}) написать (.*)$

(этот вариант - без учета длины криптохвоста, он может быть короткий в некоторых случаях)

 




  

Комментарии (0)

Здесь не опубликовано еще ни одного комментария

Оставьте свой комментарий

  1. Опубликовать комментарий как Гость.
0 Значки
Вложения (0 / 3)
Поделитесь своим местоположением
Яндекс.Метрика
Сайт работает на быстром VPS/VDS хостинге от FASTVPS