Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 清理CSV文件_Batch File - Fatal编程技术网

Batch file 清理CSV文件

Batch file 清理CSV文件,batch-file,Batch File,我使用.bat文件移动每天创建的CSV。我现在需要清理它: 查找并将“-”替换为0 查找空单元格并将其替换为0 删除所有空格 CSV只有20行。不知道你需要什么。如果这对您不起作用,请进一步解释: for /f "delims=" %%a in (old.csv) do ( set "line=%%a" setlocal enabledelayedexpansion set "line=!line: =!" set "line=!line:-=0!" >> n

我使用
.bat
文件移动每天创建的CSV。我现在需要清理它:

  • 查找并将“-”替换为0
  • 查找空单元格并将其替换为0
  • 删除所有空格

CSV只有20行。

不知道你需要什么。如果这对您不起作用,请进一步解释:

for /f "delims=" %%a in (old.csv) do (
  set "line=%%a"
  setlocal enabledelayedexpansion
  set "line=!line: =!"
  set "line=!line:-=0!"
  >> new.csv echo(!line!
  endlocal
)

批处理文件不是一个很好的工具。您最好使用PowerShell:

(Get-Content 'C:\path\to\in.csv') `
  -replace ' ', '' `
  -replace '-', '0' `
  -replace '^,', '0,' `
  -replace ',$', ',0' `
| % {
  while ($_ -match ',,') { $_ = $_ -replace ',,', ',0,' }
  $_
} | Out-File 'C:\path\to\out.csv'
甚至VBScript:

Set fso = CreateObject("Scripting.FileSystemObject")

inFilename  = "C:\path\to\in.csv"
outFilename = "C:\path\to\out.csv"

Set inFile  = fso.OpenTextFile(inFilename)
Set outFile = fso.OpenTextFile(outFilename, 2, True)

outFile.WriteLine inFile.ReadLine  'write header
Do Until inFile.AtEndOfStream
  line = inFile.ReadLine

  line = Replace(line, " ", "")
  line = Replace(line, "-", "0")
  If Left(line, 1) = "," Then line = "0" & line
  If Right(line, 1) = "," Then line = line & "0"
  Do While InStr(line, ",,") > 0
    line = Replace(line, ",,", ",0,")
  Loop

  outFile.WriteLine line
Loop

inFile.Close
outFile.Close

现在网络精灵终于回来了,这是我的版本…

-可能是最简单的方法。一些示例数据将有巨大的帮助。您需要显示前后表单。现在,你问的是一段字符串有多长?
set“line=!line:,,,=,0,!”
。也不适用于前导/尾随空字段。@Ansgar Wiechers是的,它不是很有用。在三个相邻的字段上,它跳过了第二个字段,以及前导字段和尾随字段。感谢您的帮助,所有Sorterdi都尝试了此代码和代码答案。我得到的结果是两者的=符号列。所以我可能做了一些不正确的事情,或者解释得很糟糕。我有一个csv文件,例如ID,-,C,我想将其更改为ID,C,0198,mm,抱歉,在完成例如-,IM,,198,0到0,IM,0198,0之前,我按了回车键,下面是我在@ECHO OFF SETLOCAL中键入的代码(对于/f“delims=“%%I in(recon_S21206.csv)DO(SET“line=%%I”和CALL:PROCESS))>new.csv GOTO:EOF:PROCESS SET line=%line:=%SET line=%line:-=0%SET line2=%line:,=,0,!如果不是“%line%”==“%line2%”转到进程如果“%line:~0,1%”==“,“SET line=0%line%ECHO%line%GOTO:%EOF”
@ECHO OFF
SETLOCAL
(
FOR /f "delims=" %%i IN (yourfile.csv) DO (
 SET "line=%%i"&CALL :process
)
)>newcsv.csv
GOTO :EOF

:process
SET line=%line: =%
SET line=%line:-=0%
SET line2=%line%
SET line=%line:,,=,0,%
IF NOT "%line%"=="%line2%" GOTO process
IF "%line:~0,1%"=="," SET line=0%line%
ECHO %line%
GOTO :EOF