|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Перенос определеной колонки в txt (структура csv) в другой txt (также csv) |
|
|
Любой язык - [решено] Перенос определеной колонки в txt (структура csv) в другой txt (также csv)
|
Пользователь Сообщения: 50 |
Уважаемые форумчане, здравствуйте!
Пришёл вновь за помощью(; И если есть "личное решение", то пишите смело в личку, понимаю, что это не школьная задача. Есть задача, которую надо решить так, что время обработки занимало, как можно меньше времени. Если коротко, то разработчик основного ПО (не 1С), просто стал забивать на проблемы с его кассовой программой (очень много ошибок в продажах по вине ПО) и приходиться всё решать "костылями", что бы можно было хоть как то работать на "эталонном" Фронтоле. Есть два файла txt со структурой csv. Файл 170722 Первый файл, это products.txt, а второй PRODUCTS33.TXT Все строки в файлах разбросаны и не соответствуют друг другу по расположению. т.е. строка 100 в первом файле не будет соответствовать строке 100 в другом. Т.е. надо как то сопоставить данные по ключевым цифрам в колонке 3 в первом и колонке 1 во втором - проверил, по этим ключам соответствует правильно. Сама задача: в первом файле надо взять данные строк в колонке 55, в ней удалить слова "ПОСТАВЩИК:" и "ПОСТУПИЛО НА СКЛАД:" и перенести в другой файл в колонку 21. Также, из первого файла надо взять по значению в колонке 49 и проставить цифру во втором файле в колонку 23 (там сейчас все 6, т.е. надо заменить на другое значение): если стоит 0, то это 1 если 10, то 2 если 20, то 3 Но есть два момента: в файле откуда берем данные начинаются со строки 5, а куда вставляем начинаются со строки 30. Второе, файлы длинные и область данных необходимых для обработки заканчивается после строки $$$REPLACEDOPCODES в первом и $$$ADDBARCODES во втором соответственно. И данные после этих строк, нельзя удалять, либо менять. Я пишу честно: что то попроще давно сам решаю cmd , здесь даже не могу понять откуда начинать(((( |
|
Отправлено: 10:56, 03-05-2025 |
fascinating rhythm Сообщения: 6667
|
Профиль | Отправить PM | Цитировать Powershell, попробуйте
# Импорт $prod = (gc 'C:\temp\products.txt' -raw) -split '\$\$\$REPLACEPRODUCT|\$\$\$REPLACEDOPCODES' $prod33 = (gc 'C:\temp\PRODUCTS33.TXT' -raw) -split '\$\$\$REPLACEQUANTITYWITHOUTSALE|\$\$\$ADDBARCODES' # Исходный файл в CSV $c = (($prod1 = $prod[1] -split "`n" -match '\w')[0] -replace '[^;]').ToCharArray().count + 1 $headers = 1..$c $prodCsv = $prod1 |ConvertFrom-Csv -Delimiter ';' -Header $headers # Конечный файл в CSV + остальные части $prod330 = $prod33[0] -split "`n" -match "\S" $c = (($prod331 = $prod33[1] -split "`n" -match '\w')[0] -replace '[^;]').ToCharArray().count + 1 $headers = 1..$c $prod33Csv = $prod331 |ConvertFrom-Csv -Delimiter ';' -Header $headers $prod332 = $prod33[2] -split "`n" -match "\S" # Обработка $prod33Csv |% { $item = $prodCsv |? 3 -eq $_.1 $_.21 = $item.55 -replace 'ПОСТАВЩИК:|ПОСТУПИЛО НА СКЛАД:' if ($item.49 -match '^0') {$n = 1} elseif ($item.49 -match '^10') {$n = 2} elseif ($item.49 -match '^20') {$n = 3} $_.23 = $n } # Сборка конечного файла $result = @() $result += $prod330 $result += '$$$REPLACEQUANTITYWITHOUTSALE' $result += ($prod33Csv |ConvertTo-Csv -Delimiter ';' -NoTypeInformation |select -skip 1) -replace '\";\"',';' -replace '^\"|\"$' -replace '\"+','"' $result += '$$$ADDBARCODES' $result += $prod332 # Сохранение $result |out-file c:\temp\result.txt |
------- Отправлено: 23:34, 03-05-2025 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Здравствуйте!
Не могу перебороть кодировку: что то у меня не выходит. Изначально скрипт сохранял в CR, сменой "`n" на "`r`n" удалось вывести в CRLF, но вот кодировку никак по не могу победить, перепробовал : Ascii Asci Default Unicode UTF8 Файл 170723 Проверил на 3 ПК: два win10 и один win11 Использовал powershell 7.5 |
Последний раз редактировалось Technik_spat, 08-05-2025 в 11:58. Отправлено: 09:21, 04-05-2025 | #3 |
fascinating rhythm Сообщения: 6667
|
Профиль | Отправить PM | Цитировать |
------- Последний раз редактировалось DJ Mogarych, 04-05-2025 в 10:44. Отправлено: 10:37, 04-05-2025 | #4 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Получилось вот так:
39146;4607027769055;?????????? 1?? ?30 ???? ???? ???;?????????? 1?? ?30 ???? ???? ???;185.00;1.000000;;1;;01.08.25;;;1;;;;1;;;;?????????:?????? ????????? ?? ?????: ????.000008 ?? 01/01/24 (??????) ??????? ??????¤;;2;;;;0;;;;;;;;;;;;;;;;;;;;;;;;;0;;;3;1;;;;;;;;;;0"; |
|
Отправлено: 10:44, 04-05-2025 | #5 |
fascinating rhythm Сообщения: 6667
|
Профиль | Отправить PM | Цитировать В архиве у вас файлы с кодировкой windows-1251, на них всё нормально работает.
Возможно, сейчас вы пытаетесь обработать файлы с другой кодировкой. Нужно точно знать, что у вас за кодировка у файлов и подобрать соответствующую. А может быть, у вас такой текстовый редактор, который некорректно отображает результат, т. к. вы не указали, где именно у вас так получилось. Надо разбираться. Я бы начал с того, что выполнял бы скрипт в среде Powershell ISE построчно и проверял бы результат, который получается в каждой переменной. |
------- Отправлено: 11:01, 04-05-2025 | #6 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать Проверил. Нет, блокнот не причём.
Скорее всего, где то у меня в powershel не понимает. Я пробовал предварительно конвертировать исходные файлы в utf8, не помогает Так, нашёл решение, но в pwsh оно не работает должно. На полностью Вашем скрипте: Если внешним перекодировать ansi в utf8 и потом эти файлы прогнать, то выходит правильный результат, но в областях вне обработки, появляются лишние пробелы. Если заменить "`n" на "`r`n", то пробелов нет. Теперь буду прорабатывать правильную кодировку входящих файлов)))) СПАСИБО ОГРОМНОЕ ЗА ПОМОЩЬ!!! |
Отправлено: 11:27, 04-05-2025 | #7 |
fascinating rhythm Сообщения: 6667
|
Профиль | Отправить PM | Цитировать Работайте в Powershell ISE, там PS5 и не надо морочиться с кодировкой. Заодно и скрипт можно сохранить без проблем с CRLF и т. д.
|
------- Отправлено: 11:37, 04-05-2025 | #8 |
Пользователь Сообщения: 50
|
Профиль | Отправить PM | Цитировать |
Отправлено: 11:37, 04-05-2025 | #9 |
fascinating rhythm Сообщения: 6667
|
Профиль | Отправить PM | Цитировать |
------- Отправлено: 11:57, 04-05-2025 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Любой язык - Копирование колонок из dbf в txt (csv) | Technik_spat | Скриптовые языки администрирования Windows | 12 | 13-01-2024 06:57 | |
CMD/BAT - Выборочное копирование по значению в txt (csv) файлах | Technik_spat | Скриптовые языки администрирования Windows | 4 | 05-06-2021 11:27 | |
PowerShell - [решено] AD: *.txt DisplayName -> *.csv sAMAccountName | it3 | Скриптовые языки администрирования Windows | 1 | 08-09-2019 08:21 | |
CMD/BAT - txt в csv | porokh | Скриптовые языки администрирования Windows | 30 | 31-01-2019 19:02 | |
txt to csv | vanoman | Хочу все знать | 2 | 06-09-2014 11:51 |
|