2016-04-08 7 views
0

Ich habe Probleme beim Erstellen einer Batch-Datei, die einige Textdateien für mich korrigieren wird. Also ich brauche deinen Rat. Ich brauche die Daten im Feld | No = xxx | im numerischen Format ohne irgendwelche Buchstaben, Sonderzeichen oder LeerzeichenMehrere Strings zwischen zwei Trennzeichen in einer Datei korrigieren

Ich bin auf der Suche nach einem Batch-Code, der diese Arbeit tun kann, weil ich viele Dateien mit diesem Problem habe.

|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| 

Ich war nicht in der Lage zu verstehen, JREPL durch die Art und Weise:

Die Textdateien (input.txt) werden auf diese Art und Weise hergestellt. Ich muss Dateien erstellen, die die Eingabe zwischen | No = und | korrigieren Die Datei Beispiel sollte so aussehen, nach der Partie (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| 

Vielen Dank für Ihre Hilfe.

+0

Bitte posten Sie einige Auszüge der Ansätze, die Sie ausprobiert haben, damit die Leute Sie zu einer Lösung führen können. – betseyb

+0

Sie sollten zuerst ein Schlüsselwort suchen. [link1] (http://stackoverflow.com/questions/19855925/removing-non-alphanumeric-characters-in-a-batch-variable) [link2] (http://stackoverflow.com/questions/22465485/how- to-remove-alphabete-und-spezielle-zeichen-from-a-string-using-regex-in-wind) – enjoying

Antwort

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 

Sie müssten die Einstellungen von sourcedir und destdir ändern, um Ihre Umstände anzupassen.

Ich habe eine Datei mit dem Namen q36500938.txt verwendet, die Ihre Daten für meine Tests enthält.

Erzeugt die Datei als% definiert outfile%

Es scheint, obwohl es nicht ausdrücklich angegeben ist, dass Sie alle nicht-numerischen Werte zwischen |No= und | am Ende jeder Zeile beseitigen wollen.

Obiges erkennt einfach, ob die Zeile |No= enthält und geht davon aus, dass es sich im letzten Feld befindet, wenn es angezeigt wird. Wenn es nicht erscheint, erbrechen Sie einfach die Linie. Wenn es angezeigt wird, verarbeiten Sie die Zeile in line.

Die Verarbeitung löscht einfach das letzte Zeichen und bestimmt dann, ob das neue letzte Zeichen = ist oder nicht. Wenn dies der Fall ist, nehmen wir an, dass es die = in No= ist, also fügen Sie das Ende hinzu und schließen Sie | und geben Sie das aus. Indem Sie die erforderliche Zeichenfolge in Anführungszeichen setzen, können Sie for verwenden, um sie %%x zuzuweisen und dann %%~x verwenden, um die umschließenden Anführungszeichen zu entfernen. Andernfalls erhalten Sie einen umständlichen Syntaxfehler zur Lösung.

Wenn das letzte Zeichen nicht = ist aber 0 .. 9 dann akkumuliert es sonst ignorieren und die Verarbeitung fortzusetzen, bis = erkannt wird.

+0

Es funktionierte perfekt gut auf meiner ersten Datei, danke @Magoo. Unglaublich, vielen Dank für Ihre schnelle Antwort! –

Verwandte Themen