【发布时间】:2020-12-08 14:52:22
【问题描述】:
我目前正在尝试自动化我的 csv 数据的预处理过程。 我的 csv 表如下所示:
id; town; nrlanes; direction; name; x; y; edgeid;
129001; Wales; 1; Scottland; Scottland B10; 54529; 338288; E332;
111002; Wales; 2; London; London B12; 54529; 338288; E304;
334003; Wales; 3; Ireland; Ireland B3; 54529; 338288; E303;
我想要做的是用列 id(最后 3 位数字应该被剪掉!)和方向(+ 字符串“Ri.”应该放在前面的组合来覆盖列“name”)方向)。结果表应如下所示:
id; town; nrlanes; direction; name; x; y; edgeid;
129001; Wales; 1; Scottland; 129 Ri. Scottland; 54529; 338288; E332;
111002; Wales; 2; London; 111 Ri. London; 54529; 338288; E304;
334003; Wales; 3; Ireland; 334 Ri. Ireland; 54529; 338288; E303;
这是我迄今为止尝试过的:
@echo off
REM for /f "tokens=1,2,3,4,5,6,7,8 delims=;" %%a in (%PREPROCESSING_OUTPUT_PATH%temp.csv) do echo %%a;%%b;%%c;%%d;%%~a Ri. %%~d;%%e;%%f;%%g >> "%PREPROCESSING_OUTPUT_PATH%%OUTPUT_FILENAME%"
(
for /F "tokens=1-8* delims=;" %%a in (%PREPROCESSING_OUTPUT_PATH%temp.csv) do (
set id=%%a
set id_cut=%id:~-3%
set merged_columns=%id_cut% Ri. %%~d
echo %%a;%%b;%%c;%%d;%%e;%merged_columns%;%%f;%%g
)
)>> "%PREPROCESSING_OUTPUT_PATH%%OUTPUT_FILENAME%"
我在另一个线程中读到 %var_name:~-3% 削减了字符串的最后三位数字,这正是我所需要的。 这是我的bat文件版本的结果:
id; town; nrlanes; direction; ; x; y; edgeid;
129001; Wales; 1; Scottland; ; 54529; 338288; E332;
111002; Wales; 2; London; ; 54529; 338288; E304;
334003; Wales; 3; Ireland; ; 54529; 338288; E303;
如您所见,“name”列为空,“name”列也为空。我在这里做错了什么?有什么建议吗?
【问题讨论】:
-
我用的是windows,bat文件是通过命令行执行的
-
在
@echo off之后执行setlocal enabledelayedexpansion然后将set id_cut=%id:~-3%更改为set id_cut=!id:~-3!并将echo %%a;%%b;%%c;%%d;%%e;%merged_columns%;%%f;%%g更改为echo %%a;%%b;%%c;%%d;%%e;!merged_columns!;%%f;%%g -
不,不要在你的问题中改变它,在你的脚本中改变它。
-
@Gerhard 嘿,我用你的建议更新了我的问题,但解决方案并不完全是想要的。缺少 id,列名不应更改为“Ri. direction”(应保持“名称”)。
-
好的,让我快速看看这个。
标签: csv batch-file cmd substring