2016-03-17 74 views
3

我試圖將包含json行的文件轉換爲json數組。爲了達到這個目的,我不得不在文件中添加開始和結束方括號(完成!)。爲了完成,我只需要在每行的末尾添加一個逗號,除了最後一行。我正在使用以下腳本,但我不知道如何在最後一行停下來。添加字符到除最後一行之外的每行結尾

@echo off 
setLocal EnableDelayedExpansion 
for /f "tokens=* delims= " %%a in (input.txt) do (
set /a N+=1 
echo ^%%a^, >> output.txt 
) 

感謝您通過您的幫助!

回答

2

試試這個,如果你的線條不符合!符號應該可以工作。 它會產生一個temp.file。如果該文件是您需要刪除最後一行。您需要將fileLocendSymbol的值更改爲所需的值。

@echo off 
setlocal enableDelayedExpansion 

::-------------------------:: 
:: Change the values here :: 
set "fileLoc=testFile.txt" 
set "endSymbol=," 
::-------------------------:: 



set counter=0 
for /f "usebackq tokens=* delims=" %%# in ("%fileLoc%") do (
    set /a counter=counter+1 
    set "line[!counter!]=%%#" 
) 

set /a upToLine=counter-1 
break>temp.file 
for /l %%# in (1;1;!upToLine!) do (
    (echo(!line[%%#]!%endSymbol%)>>temp.file 
) 
(echo(!line[%counter%]!)>>temp.file 

:: Uncoment line bellow if temp.file is ok 
rem move /y temp.file "%fileLoc%" 
1

使用純批量編輯文本文件可以完成,但是它會佔用不合理數量的代碼,尤其是如果您希望結果強健時。對於大文件來說,它往往很慢。

與大多數我想要批量操作文件內容的問題一樣,我會使用JREPL.BAT - a regular expression find and replace utility

JREPL.BAT是純粹的腳本(混合JScript /批處理),可以在任何Windows機器上運行,從XP開始。如果您需要分頁輸出,可以通過命令行通過jrepl /?jrepl /??獲取完整文檔。

JREPL功能非常強大,速度也相當快。但是,您需要了解正則表達式,如果您研究了許多JREPL選項,那麼您可以高效地完成一些非常複雜的事情。

以下內容將在除最後一行之外的每行添加一個X.

jrepl "\r?\n(?=[\s\S])" "X$&" /m /f test.txt /o - 

使用call jrepl如果你把命令批處理腳本中。

上述內容將適用於任何文本文件,只要其總長度小於1千兆字節。此限制源於您必須使用/M選項跨多行搜索的事實。所以整個文件必須加載到內存中,並且JScript限制了內存大小。

1
@echo off 
setlocal EnableDelayedExpansion 

set "line=" 
( for /F "delims=" %%a in (input.txt) do (
     if defined line echo !line!, 
     set "line=%%a" 
    ) 
    echo !line! 
) > output.txt 
相關問題