Windows批处理编程 - 从csv文件中读取并提取某些数据列基于第一列的值 [英] Windows Batch programming - Reading from a csv file and extracting certain data columns based on first column value

查看:3486
本文介绍了Windows批处理编程 - 从csv文件中读取并提取某些数据列基于第一列的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的第一批计划,我一直在网上寻找,但仍然在努力写了一个解决方案。

我有以下CSV文件:

 RH,2013/6月15日2点14分58秒-0400,X,LQ3SUEEWPWKL6,005,
FH,01
SH,2013/6月14日00:00:00 -0400,2013 / 6月14日23:59:59 -0400LQ3SUEEWPWKL6,
CH,值TransactionID,InvoiceID,
......

我试着写一个简单的程序来执行以下操作:
- 如果COLUMN1 =RH,然后提取列2值(2013年6月15日二时十四分58秒-0400)
- 如果COLUMN1 =SH,然后提取column4值(LQ3SUEEWPWKL6)

和管道输出到文件。

感谢您


这是我的code,到目前为止,但如果条件不为我工作

 关闭@echo
::在变量设置输入文件
::设为_InputFile =%1::存储输入行成不同的变量
FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
设置_var1 = %%一
设置_var2 = %%乙
设置_var3 = %%Ç
设置_var4 = %%ð
设置_var5 = %%Ë
设置_var6 = %%˚F
设置_var7 = %%摹
设置_var8 = %% ^ h
设置_var9 = %%我
设置_var10 = %%Ĵ
设置_var11 = %%ķ
设置_var12 = %%大号
设置_var13 = %%中号
设置_var14 = %%ñ
设置_var15 = %%Ø
设置_var16 = %% P
设置_var17 = %% Q
设置_var18 = %% - [R
IF%_var1%==RH回声%VAR2%

我的CSV文件看起来在Excel和记事本正常,但当我执行脚本中显示的第一个变量,它看起来像上的第一个记录是一些垃圾字符只是RH之前 - 我不能绕过它,因为我需要提取附加列的数据,如果VAR1 =RH

 RH
FH
01
SH
CH
的TransactionID,PaymentTrackingID,
SF
SF
SC
RF
CAD,CR,0
RF
美元,CR,0
RC
FF


解决方案

 
FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
  如果%%〜A==RH回声%%一B
  如果%%〜A==SH呼应%%〜ð
 )
)> youroutputfilename

应该努力 - 没有必要将所有的值不同的变量 - 但是如果你打算使用它们,然后

  FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
...
设置_var17 = %% Q
设置_var18 = %% - [R
CALL:PROCESS

...
GOTO:EOF:处理
IF%_var1%==RH回声%_var2%
IF%_var1%==SH回声%_var4%
GOTO:EOF

请注意,使用这种方法,因为你正在分配 %% X _varx 则如果 %% X 被引用,引号将被分配中的价值包括在内。要删除封闭引号(如果存在的话)使用 SET _varx = %%〜X


补遗20130703-1956Z为OP的问题。

  @ECHO OFF
SETLOCAL
SET _Inputfile = U:\\ noname1.txt

FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
  SETRH =
  SETSH =
  ECHO(%% A | FINDSTR / L / C:\\RH \\> NUL
  IF NOT ERRORLEVEL 1套RH = Y
  ECHO(%% A | FINDSTR / L / C:\\SH \\> NUL
  IF NOT ERRORLEVEL 1组SH = Y
  如果定义RH呼应%%一B
  如果定义SH回声%%〜ð
 )
)> U:\\ youroutputfilename
U型:\\ youroutputfilename
德尔U:\\ youroutputfilename
呼应========第一种方式(
FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
  SET _var1 = %%一
  SETRH =
  SETSH =
  CALL:过程
  如果定义RH呼应%%一B
  如果定义SH回声%%〜ð
 )
)> U:\\ youroutputfilenameU型:\\ youroutputfilename
德尔U:\\ youroutputfilename
呼应========方式二SETLOCAL ENABLEDELAYEDEXPANSION

FOR / F令牌= 1-18 * delims =%% A IN(%_InputFile%)DO(
  SET _var1 = %%一
  IF_var1:!〜-4==RH,回声%%一B
  IF_var1:!〜-4==SH,回声%%〜ð
 )
)> U:\\ youroutputfilenameU型:\\ youroutputfilename
德尔U:\\ youroutputfilename
呼应========第三条道路
ENDLOCALGOTO:EOF:处理
IF%_var1:〜-4%==RH,SET RH = Y
IF%_var1:〜-4%==SHSET SH = Y
GOTO:EOF

This is my first batch program and I have been searching online but still struggling to write up a solution.

I have the following CSV file:

"RH",2013/06/15 02:14:58 -0400,"X","LQ3SUEEWPWKL6",005,
"FH",01
"SH",2013/06/14 00:00:00 -0400,2013/06/14 23:59:59 -0400,"LQ3SUEEWPWKL6",""
"CH","TransactionID","InvoiceID", 
......

I'm trying to write a simple program to do the following: - If column1 = "RH", then extract column2 value (2013/06/15 02:14:58 -0400) - If column1 = "SH", then extract column4 value (LQ3SUEEWPWKL6)

and pipe output to a file.

Thank you


This is my code so far but the if condition is not working for me

@echo off
:: Set input file in variable
::Set _InputFile=%1

:: Store input line into different variables
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
Set _var1=%%A
Set _var2=%%B
Set _var3=%%C
Set _var4=%%D
Set _var5=%%E
Set _var6=%%F
Set _var7=%%G
Set _var8=%%H
Set _var9=%%I
Set _var10=%%J
Set _var11=%%K
Set _var12=%%L
Set _var13=%%M
Set _var14=%%N
Set _var15=%%O
Set _var16=%%P
Set _var17=%%Q
Set _var18=%%R


IF "%_var1%"=="RH" echo %var2%

)

My CSV file looks fine in Excel and Notepad but when I execute the script to display the first variable, it looks like there's some garbage characters just before the "RH" on the first record - I cannot bypass it since I need to extract additional column data if var1 = "RH":

"RH"
FH
01
SH
CH
TransactionID,PaymentTrackingID,
SF
SF
SC
RF
CAD,CR,0
RF
USD,CR,0
RC
FF

解决方案

(
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
  if "%%~A"=="RH" echo %%~B
  if "%%~A"=="SH" echo %%~D
 )
)>youroutputfilename

Should work - no need to assign all the values to different variables - BUT if you plan to use them, then

FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
...
Set _var17=%%Q
Set _var18=%%R
CALL :PROCESS
)
...
GOTO :EOF

:PROCESS
IF %_var1%=="RH" echo %_var2%
IF %_var1%=="SH" echo %_var4%
GOTO :EOF

Note that with this method, since you are assigning %%x to _varx then if %%x is quoted, the quotes will be INCLUDED in the value assigned. To remove the enclosing quotes (if they exist) use SET _varx=%%~x.


Addendum 20130703-1956Z for OP's problem

@ECHO OFF
SETLOCAL
SET _Inputfile=u:\noname1.txt
(
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
  SET "RH="
  SET "SH="
  ECHO(%%A|FINDSTR /l /c:"\"RH\"" >NUL
  IF NOT ERRORLEVEL 1 SET RH=Y
  ECHO(%%A|FINDSTR /l /c:"\"SH\"" >NUL
  IF NOT ERRORLEVEL 1 SET SH=Y
  if DEFINED RH echo %%~B
  if DEFINED SH echo %%~D
 )
)>u:\youroutputfilename
TYPE u:\youroutputfilename
del u:\youroutputfilename
echo========First way

(
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
  SET _var1=%%A
  SET "RH="
  SET "SH="
  CALL :process
  if DEFINED RH echo %%~B
  if DEFINED SH echo %%~D
 )
)>u:\youroutputfilename

TYPE u:\youroutputfilename
del u:\youroutputfilename
echo========Second way

SETLOCAL ENABLEDELAYEDEXPANSION 
(
FOR /F "tokens=1-18* delims=," %%A IN (%_InputFile%) DO (
  SET _var1=%%A
  IF "!_var1:~-4!"==""RH"" echo %%~B
  IF "!_var1:~-4!"==""SH"" echo %%~D
 )
)>u:\youroutputfilename

TYPE u:\youroutputfilename
del u:\youroutputfilename
echo========Third way
ENDLOCAL

GOTO :EOF

:process
IF "%_var1:~-4%"==""RH"" SET RH=Y
IF "%_var1:~-4%"==""SH"" SET SH=Y
GOTO :EOF

这篇关于Windows批处理编程 - 从csv文件中读取并提取某些数据列基于第一列的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆