如何从CSV中删除回车/换行符-每行末尾除外?
是否可以使用批处理文件或powershell从CSV中删除回车符/换行符,而不删除每条记录自然结尾处的回车符/换行符 基本上我有这样一个文件:如何从CSV中删除回车/换行符-每行末尾除外?,csv,batch-file,formatting,Csv,Batch File,Formatting,是否可以使用批处理文件或powershell从CSV中删除回车符/换行符,而不删除每条记录自然结尾处的回车符/换行符 基本上我有这样一个文件: a1, a2, a3, a4,aaa aaa a5, a6, a7,aaa aa a8 b1,b2,b3,b4,b5,b6,b7,b8 c1,c2,c3,c4,c5,c6,c7,c8 d1,d2,d3,d4,d5,d6,d7,d8 e1,e2,e3,e4,eee e5,e6,e7,e8 例如,第5列和第8列“可能”包含回车/换行符。我想删除这些,因此文
a1, a2, a3, a4,aaa
aaa a5, a6, a7,aaa aa
a8
b1,b2,b3,b4,b5,b6,b7,b8
c1,c2,c3,c4,c5,c6,c7,c8
d1,d2,d3,d4,d5,d6,d7,d8
e1,e2,e3,e4,eee
e5,e6,e7,e8
例如,第5列和第8列“可能”包含回车/换行符。我想删除这些,因此文件是1行=1条记录
这可能吗?我已经用批处理文件格式化了该文件,所以如果可能的话,我想将其用于所有格式化。我正在考虑迁移到powershell,因此如果在那里更容易,请让我知道(绝对powershell noob)
NP
编辑-每行具有相同数量的列。在本例中,8.我添加了另一列(现在是9列),因为它不起作用,在最后一个令牌中有一个“In-line CRLF”(您声称,令牌8可能有一个)。(我理解,您有权创建csv
文件)。代码中的描述为REM
ark
@echo off
setlocal enabledelayedexpansion
REM emty variable:
set "line="
for /f "delims=" %%a in (t.csv) do (
REM append line from file to variable
set "line=!line! %%a"
REM rescue spaces (by replacing with another character)
REM for proper token counting
set "line=!line: =²!"
set n=0
REM count tokens:
for %%b in (!line!) do set /a n+=1
if !n! geq 9 (
REM if 9 (or more) tokens, the assembly is finished.
REM re-replace the spaces
set "line=!line:²= !"
REM cut the first char (a space):
set "line=!line:~1!"
REM output the line:
echo !line!
REM and clear the variable for the next logical line:
set "line="
)
)
如果一行包含的元素多于
则有一定的容差,但如果元素少于则会失败。我添加了另一列(现在是九列),因为它无法工作,最后一个标记中有一个“in line CRLF”(您声称,标记8可能有一个)。(我理解,您有权创建csv
文件)。代码中的描述为REM
ark
@echo off
setlocal enabledelayedexpansion
REM emty variable:
set "line="
for /f "delims=" %%a in (t.csv) do (
REM append line from file to variable
set "line=!line! %%a"
REM rescue spaces (by replacing with another character)
REM for proper token counting
set "line=!line: =²!"
set n=0
REM count tokens:
for %%b in (!line!) do set /a n+=1
if !n! geq 9 (
REM if 9 (or more) tokens, the assembly is finished.
REM re-replace the spaces
set "line=!line:²= !"
REM cut the first char (a space):
set "line=!line:~1!"
REM output the line:
echo !line!
REM and clear the variable for the next logical line:
set "line="
)
)
如果一行有超过
个元素,则有一定的容差,但如果元素较少,则会失败。很棘手,但我必须承受一个很好的挑战。。。虽然你没有表现出任何自己的努力来解决它
下面是一个脚本,它结合了CSV数据行,以防元素的数量不符合预定义的数量。它不单独处理元素,它只是附加行以达到建议的数量。数据不得包含任何全局通配符,如*
和?
。也不应该出现任何引号,除非它们像“
”那样加倍。这是:
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“FILE_I=%~1”&rem//(指定输入CSV文件)
设置“FILE_O=%~2”&rem//(指定输出CSV文件)
设置“SEPARATOR=,”&rem/(CSV数据中使用的分隔符)
设置“REPLACE=”&rem//(是每个换行符的中继字符串)
设置“NUMITEMS=8”&rem/(是每行的建议元素数)
rem//验证给定的输入和输出CSV文件:
如果不存在“%FILE_I%”(<%FILE_I%”集/P=“”&退出/B 1)
如果未定义文件,则设置“文件”\u O=con
rem//初始化元件的数据采集器和计数器:
设置“PREV=”&set/A“计数=0”
rem//遍历输入文件的行:
对于/F delims^=^eol^=%%L英寸('
rem//*读取输入文件、输出虚线和耗尽输出文件:*/^&^
键入“%FILE_I%”^&^>%FILE_O%”break^&echo/^&^
对于/L%%J in^(2^,1^,%NUMITEMS%^)do@^>“%FILE\u O%”回显!上一个!
端部
rem//将当前线路存储在数据采集器中并进行减法
rem计数器的输出元素数:*/
设置“PREV=%REPLACE%%%L”
设置/A“计数-=%NUMITEMS%”
setlocal EnableDelayedExpansion
)
端部
)
端部
退出/B
假设脚本保存为concat csv lines.bat
,则输入csv文件称为breaked lines.csv
,输出文件称为concatenated.csv
,通过以下命令行运行它:
concat-csv-lines.bat broken-lines.csv concatenated.csv
当包含问题样本数据的虚线.csv
时,连接的.csv
将保持:
很棘手,但这是一个很好的挑战,我必须承受。。。虽然你没有表现出任何自己的努力来解决它
下面是一个脚本,它结合了CSV数据行,以防元素的数量不符合预定义的数量。它不单独处理元素,它只是附加行以达到建议的数量。数据不得包含任何全局通配符,如*
和?
。也不应该出现任何引号,除非它们像“
”那样加倍。这是:
@echo关闭
setlocal EnableExtensions DisableDelayedExpansion
rem//在此处定义常量:
设置“文件”