Vlookup CSV слияния с использованием пакетного файла - PullRequest
0 голосов
/ 18 апреля 2019
  • Groups.txt:
HFM_E_AHSM_FinRpt_Coor,,,xABC,Native Directory  
HFM_E_AHSM_FinRpt_Coor,,,xDEF,Native Directory  
HFM_E_AHSM_FinRpt_Coor,,,xGHI,Native Directory  
  • Reviewer.txt:
HFM_E_AHSM_FinRpt_Coor,Test
  • Токовый выход:
Test,xABC,Native Directory  
Test,xDEF,Native Directory  
Test,xGHI,Native Directory  
  • Желаемый вывод:
HFM_E_AHSM_FinRpt_Coor,Test,xABC  
HFM_E_AHSM_FinRpt_Coor,Test,xDEF  
HFM_E_AHSM_FinRpt_Coor,Test,xGHI  

Хотел бы получить те же данные из Groups.txt выполните vlookup для Reviewer.txt и поместите соответствующие данные в столбец 2 , затем введите значения x .Наконец удалить последний столбец .

@echo off
setlocal EnableDelayedExpansion

rem Load File1 as lookup table:
for /F "tokens=1,2 delims=," %%a in (Reviewer.txt) do (
set "filename=%%~a"
set "col1_2[!filename: =_!]=%%~b"
 )

rem Process File2:
for /F "tokens=1* delims=," %%a in (Groups.txt) do (
   set "filename=%%a"
   for /F %%f in ("!filename: =_!") do if defined col1_2[%%f] (
      echo !col1_2[%%f]!,%%b
     ) else (
      echo NoMatchingFilename,%%b
     )
  )

1 Ответ

0 голосов
/ 18 апреля 2019

Ваши примеры данных не содержат пробелов в col1 of Groups.txt,
, поэтому неясно, почему вы выполняете замену строки !filename: =_!

В противном случае вам нужно два изменения

  1. звездочка в for /F "tokens=1* delims=," не будет разбивать дальнейшие столбцы
    => for /F "tokens=1,2* delims=,"
  2. col1 groups.txt в %% a, но отсутствует в выводе.

@echo off
setlocal EnableDelayedExpansion

rem Load File1 as lookup table:
for /F "tokens=1,2 delims=," %%a in (Reviewer.txt) do (
set "filename=%%~a"
set "col1_2[!filename: =_!]=%%~b"
 )

rem Process File2:
for /F "tokens=1,2* delims=," %%a in (Groups.txt) do (
    set "filename=%%a"
    for /F %%f in ("!filename: =_!") do if defined col1_2[%%f] (
        echo %%a,!col1_2[%%f]!,%%b
    ) else (
        echo NoMatchingFilename,%%b
    )
)

выход:

> SO_55736556.cmd
HFM_E_AHSM_FinRpt_Coor,Test,xABC
HFM_E_AHSM_FinRpt_Coor,Test,xDEF
HFM_E_AHSM_FinRpt_Coor,Test,xGHI

Обратите внимание, что for /f обрабатывает последовательные разделители только как один.
Если groups.txt содержит содержимое между ,,, столбцаколичество не соответствует

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...