如何从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列“可能”包含回车/换行符。我想删除这些,因此文

是否可以使用批处理文件或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列“可能”包含回车/换行符。我想删除这些,因此文件是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//在此处定义常量:
设置“文件”