2014-10-10 90 views
2

在一個文本文件,我有這樣的臺詞:刪除回車

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;" 
        ";0;0;E/272 

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;" 
        ";0;0;D/275 

我需要使用DOS批處理文件這個新的輸出:

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;E/272 

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;D/275 

而且我試過這個解決方案:

for /f "delims=" %%a in (oldfile.txt) do (
echo/|set /p ="%%a%" 
)>>newfile.txt 

但輸出錯誤,我沒有txt newfile中的兩行但只有一行:

2014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;E/2722014-10-09 00:00:00.000;1663;2014-10-09 12:38:46.000;A;"";0;0;D/275 

我在想什麼?

這段代碼有什麼問題?

預先感謝您。

回答

1
  1. 雙引號值中的新行絕對有效CSV files

  2. 爲什麼不使用支持Perl正則表達式的文本編輯器替換?
    例如運行Perl正則表達式替換使用搜索字符串(?<=")\s+(?=";)和作爲替換字符串的空字符串將執行該作業。

  3. 有一些控制檯應用程序用於替換文件中的字符串。見
    How can you find and replace text in a file using the Windows command-line environment?

但是,如果你想與一些未知的原因,一個批處理文件,要做到這一點,採取批量代碼來看看下面的例子工作。

@echo on 
setlocal EnableDelayedExpansion 
set "INTEXTFILE=oldfile.txt" 

if not exist "%INTEXTFILE%" goto EndBatch 

set "OUTTEXTFILE=newfile.txt" 
if exist "%OUTTEXTFILE%" del "%OUTTEXTFILE%" 

set "FirstLine=" 
set "EndFirstLine="" 
set "BeginSecondLine=     ";" 

for /f "usebackq delims=" %%A in ("%INTEXTFILE%") do (
    set "Line=%%A" 
    if not "!FirstLine!"=="" (
     if "!Line:~0,22!"=="!BeginSecondLine!" (
      set "FirstLine=!FirstLine!!Line:~20!" 
      echo !FirstLine!>>"%OUTTEXTFILE%" 
      set "Line=" 
     ) else (
      echo !FirstLine!>>"%OUTTEXTFILE%" 
     ) 
     set "FirstLine=" 
    ) 
    if not "!Line!"=="" (
     if "!Line:~-1!"=="!EndFirstLine!" (
      set "FirstLine=!Line!" 
     ) else (
      echo !Line!>>"%OUTTEXTFILE%" 
     ) 
    ) 
) 

:EndBatch 
endlocal 

空行也被這個批處理文件刪除。這是無法避免的,因爲命令for在分析文件時會忽略空行。