Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Выборочное копирование по значению в txt (csv) файлах

Ответить
Настройки темы
CMD/BAT - Выборочное копирование по значению в txt (csv) файлах

Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: Technik_spat
Дата: 04-06-2021
Уважаемые профессионалы, обращаюсь к Вам за помощью.
Есть, формируемые ежедневно, несколько текстовых файлов (по факту можно сказать csv), в которых идут необходимые данные, каждый день (а иногда и по несколько раз в день) я их обрабатываю через Excell, но это не всегда проходит, иногда приходиться файлы буквально разделять. В самом экселе я обработываю через функцию ВПР, честно скажу иногда мозг взрывается(((((
Сама задача состоит в том, что мне необходимы всего два значения: Schtrih и Result
1. В файле Schtrih.txt в первой колонке самые нужные значения, но их надо отсеивать по значению в третей колонке (т.е. или по 11-ому или 14-ому).
2. В файле Aspect.txt по отсеянным значениям Schtrih из одноименного файла, необходимо изъять значения Aspect
3. В файле wark.txt по ранее отсеянным значениям Aspect подобрать значения Result и прикрепить их со значениями Schtrih, ранее отсеянными.

Самый наверное странный от меня ещё вопрос: а это возможно как сделать, к примеру, в CMD/BAT-с ним я поверхностно знаком и в случае каких-либо изменений от сборщиков (а они любят менять файлы), что бы я мог изменить название или номер столбца?
Aspect.txt; Schtrih.txt; wark.txt

Отправлено: 14:14, 04-06-2021

 

Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


Если я правильно понял что нужно:
Код: Выделить весь код
$Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)}
$Aspects = Import-Csv ./Aspect.txt -Delimiter ";"
$warks = Import-Csv ./wark.txt -Delimiter ";"

foreach ($Schtrih in $Schtrihs) {
  foreach ($Aspect in $Aspects) {
    foreach ($wark in $warks) {
      if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) {
        [pscustomobject]@{
          "Schtrih"       = $Schtrih.Schtrih
          "Aspect"        = $Aspect.Aspect
          "Result"        = $wark.Result
        }
      }
    }
  }
}
решение на пошике, но перебирать нормально csv на cmd кмк нереально. так что лучше смотреть в сторону чего-то более продвинутого.
сохранить как ps1, запускать, соответсвенно, через powershell.
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:30, 04-06-2021 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


СПАСИБО))))
А как можно это сохранять и в столбцах, а то в самом окне PowerShell это выводится одним столбиком и приходится сохранять копированием.
Я вот тут сам что то пытался со своей колокольни доделать, но выходит криво, постоянно ругается:
Out-File : Не удается найти позиционный параметр, принимающий аргумент "Get-Process".
C:\Test_stgin\Farm\на оборот\convert.ps1:4 знак:9
+ Out-File <<<< -Encoding "UTF8" = Get-Process powershell >>./proc.txt -Value
+ CategoryInfo : InvalidArgument: ( [Out-File], ParameterBindingException
+ FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.OutFileCommand


Сам код, который я пытался перенаправить:
Код: Выделить весь код
$Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)}
$Aspects = Import-Csv ./Aspect.txt -Delimiter ";"
$warks = Import-Csv ./wark.txt -Delimiter ";"
Out-File -Encoding "UTF8" = Get-Process powershell >>./proc.txt  -Value

foreach ($Schtrih in $Schtrihs) {
  foreach ($Aspect in $Aspects) {
    foreach ($wark in $warks) {
      if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) {
        [pscustomobject]@{
          "Schtrih"       = $Schtrih.Schtrih
          "Aspect"        = $Aspect.Aspect
          "Result"        = $wark.Result

        }
      }
    }
  }
}

Отправлено: 08:52, 05-06-2021 | #3


Аватара для Elven

Ветеран


Сообщения: 992
Благодарности: 268

Профиль | Сайт | Отправить PM | Цитировать


как-то сложно. можно скинуть всё в переменную и из нее уже как удобнее будет.

Код: Выделить весь код
$Schtrihs = Import-Csv ./Schtrih.txt -Delimiter ";" | Where-Object {($_.Type -eq 11 ) -or ($_.Type -eq 14)}
$Aspects = Import-Csv ./Aspect.txt -Delimiter ";"
$warks = Import-Csv ./wark.txt -Delimiter ";"

$res = foreach ($Schtrih in $Schtrihs) {
        foreach ($Aspect in $Aspects) {
          foreach ($wark in $warks) {
            if (($Schtrih.Schtrih -eq $Aspect.Schtrih) -and ($Aspect.Aspect -eq $wark.Aspect)) {
              [pscustomobject]@{
                "Schtrih"       = $Schtrih.Schtrih
                "Aspect"        = $Aspect.Aspect
                "Result"        = $wark.Result
              }
            }
          }
        }
      }
$res | Out-File res.txt
$res | Export-Csv -Delimiter ";" -Path res.csv
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:05, 05-06-2021 | #4


Новый участник


Сообщения: 42
Благодарности: 0

Профиль | Отправить PM | Цитировать


СПАСИБО ОГРОМНОЕ))))

Отправлено: 11:27, 05-06-2021 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Выборочное копирование по значению в txt (csv) файлах

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - txt в csv porokh Скриптовые языки администрирования Windows 30 31-01-2019 19:02
CMD/BAT - Поиск и замена строки в txt файлах по содержанию этой строки. sayyad Скриптовые языки администрирования Windows 1 06-12-2015 13:20
CMD/BAT - XCOPY выборочное копирование файлов. Fanbeer Скриптовые языки администрирования Windows 19 02-12-2015 20:09
VBS/WSH/JS - Поиск текста в файлах и копирование результата по сети anton_ego Скриптовые языки администрирования Windows 4 25-02-2013 12:42
CMD/BAT - [решено] Выборочное копирование из текстового файла. odin1 Скриптовые языки администрирования Windows 5 09-03-2012 22:00




 
Переход