我被困在一个已经与其他分隔符一起使用过多次的语句上。 我必须处理一个三行 TXT 文件,每行包含 26 个字段用引号分隔。 这是第二组为空的文件,这是一种可能的情况:
ID="a1i7Q000000gTynQAE" Machine="TEST" Dept="TEST" ExecutionDate="2023/11/17"
Set 1="O14" Time="2023/11/17 18:33:09" MeasurementMode="Rad" A1="40.96" A2="41.65" A1Lenght="177" n1="133.75" C1="527" CAD="2.48" LAT="4.43" L="23.88" RoN="12.52" Diam="5.23"/
Set S="152" Time="2023/11/17 18:33:09" MeasurementMode="Deg" A1="NaN" A2="NaN" A1Lenght="NaN" n1="132.14" C1="NaN" CAD="NaN" LAT="NaN" L="NaN" RoN="NaN" Diam="NaN"/
在第一遍中,我必须提取数据 %%A、%%H、%%J、%%L、%%N、%%P 等,忽略第一行,在第二遍中,我必须忽略前两行。
result1.txt 的预期输出是
a1i7Q000000gTynQAE
"VV_A1_c" : 40.96
"VV_j32_a" : 41.65
177
.....
我使用的命令行如下:
for /f tokens^=1-26^ skip^=1^ delims^="^ %%A in ("out1.txt") do (
ECHO %%~A >>result2.txt
ECHO "VV_A1_c" : %%~H >>result1.txt
ECHO "VV_j32_a" : %%~J >>result1.txt
ECHO %%~L >>result1.txt
.....
和
for /f tokens^=1-26^ skip^=2^ delims^="^ %%A in ("out1.txt") do (
ECHO %%~A >>result2.txt
ECHO "VV_A1_c" : %%~H >>result2.txt
.....
...但无论我如何设置 ^ 分隔符,结果始终是“语法错误”或“不是预期的”。 请问谁能告诉我哪里错了?
另一个问题:如果字段变成 30,我必须在 %%Z 之后使用什么字母?
尝试使用 Windows 批处理使其工作:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
set A=0
echo A:%a%::
for /f delims^=^"^ tokens^=1-26 %%B in (out1.txt) do (
SET /A A=!A!+1
IF !A! GEQ 2 (
echo Line!A!:FieldB:%%B
echo Line!A!:fieldC:%%C
echo Line!A!:FieldD:%%D
echo Line!A!:FieldZ:%%Z
echo.
)
)
输出:
A:0::
Line2:FieldB:Set 1=
Line2:fieldC:O14
Line2:FieldD: Time=
Line2:FieldZ: Diam=
Line3:FieldB:Set S=
Line3:fieldC:152
Line3:FieldD: Time=
Line3:FieldZ: Diam=
但是
skip=
需要太多的解决方法,而我远不及你
也许一个简单的方法是 PowerShell:
Import-CSV out1.txt -Delimiter '"' -Header ('a','b','c','d') | Format-Table
输出:
a b c d
- - - -
ID= a1i7Q000000gTynQAE Machine= TEST
Set 1= O14 Time= 2023/11/17 18:33:09
Set S= 152 Time= 2023/11/17 18:33:09
对于您的预期输出,这可能始于:
Import-CSV out1.txt -Delimiter '"' -Header ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r') | Format-Table a,h,i,j,l,n,p
输出:
a h i j l n p
- - - - - - -
ID= 2023/11/17
Set 1= 40.96 A2= 41.65 177 133.75 527
Set S= NaN A2= NaN NaN 132.14 NaN
而且,PowerShell 的学习曲线(陡峭?),我不太熟悉...😉