2016-04-08 32 views
0

我在創建批量文件時遇到問題,這會爲我更正一些文本文件。所以我需要你的建議。 我需要獲取字段中的數據|否= xxx |在數字格式沒有任何字母字符,特殊字符或空格更正文件中兩個分隔符之間的多個字符串

我正在尋找一個批處理代碼,可以做到這一點,因爲我有這個問題很多文件。

的文本文件(input.txt中)由這樣:

|Job=1|Typ=S|Action=Order|No=531.04220440.00| 
|Job=1|Typ=P|Action=Information|M=1| 
|Job=2|Typ=S|Action=Order|No=ALR-2005605 | 
|Job=2|Typ=P|Action=Information|M=3| 
…. 
|Job=99|Typ=S|Action=Order|No=AF502033H| 
|Job=99|Typ=P|Action=Information|M=1| 

我是不是能夠通過的方式來理解JREPL。 我必須創建相關的輸入文件| No =和| 文件實例應該看起來像,批(output.txt中)後

|Job=1|Typ=S|Action=Order|No=5310422044000| 
|Job=1|Typ=P|Action=Information|M=1| 
|Job=2|Typ=S|Action=Order|No=2005605| 
|Job=2|Typ=P|Action=Information|M=3| 
…. 
|Job=99|Typ=S|Action=Order|No=502033| 
|Job=99|Typ=P|Action=Information|M=1| 

感謝您的幫助。

+0

請張貼您嘗試過的方法的一些片段,以便人們可以引導您找到解決方案。 – betseyb

+0

你應該首先搜索一些關鍵詞。 [link1](http://stackoverflow.com/questions/19855925/removing-non-alphanumeric-characters-in-a-batch-variable)[link2](http://stackoverflow.com/questions/22465485/how-使用正則表達式在風中刪除字母和特殊字符) – enjoying

回答

0
@ECHO OFF 
SETLOCAL 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q36500938.txt" 
SET "outfile=%destdir%\outfile.txt" 
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
ECHO "%%a"|FIND "|No=" >nul 
IF ERRORLEVEL 1 (ECHO(%%a 
) ELSE (
    SET "line=%%a" 
    CALL :process 
) 
) 
)>"%outfile%" 

GOTO :EOF 

:process 
SET "tail=" 
:procloop 
SET "line=%line:~0,-1%" 
SET "char=%line:~-1%" 
IF "%char%"=="=" (
FOR %%x IN ("%line%%tail%|") DO ECHO(%%~x 
GOTO :EOF 
) 
IF "%char%" geq "0" IF "%char%" leq "9" SET "tail=%char%%tail%" 
GOTO procloop 

你需要改變的sourcedirdestdir設置以適合你的情況。

我使用了一個名爲q36500938.txt的文件,其中包含我的測試數據。

主要生產定義爲%OUTFILE%

它將出現在文件,雖然它沒有明確說明,您希望消除|No=|之間的所有非NUMERICS在每行的末尾。

以上只是檢測行是否包含|No=,並假設它出現在最後一個字段中。如果沒有出現,則簡單地反彈該線。如果確實出現,則在line中處理該行。

該處理只是簡單地將最後一個字符刪掉,然後確定新的最後一個字符是否爲=。如果是,假設它是=,No=,所以加回尾部並關閉|並輸出。通過將所需的字符串放在引號中,可以使用for將其指定給%%x,然後使用%%~x刪除封閉的引號 - 否則會出現難解的語法錯誤。

如果最後一個字符不是=而是0 .. 9然後累加它否則忽略它並繼續處理,直到檢測到=

+0

它在我的第一個文件上工作得非常好,謝謝@Magoo。令人難以置信,感謝您的快速回答! –

相關問題