часть вторая проблемы stringparsing.bat - PullRequest
0 голосов
/ 07 декабря 2010

Хорошо, так что все работает с моей stringparsing.bat программой, я могу успешно создавать, кодировать и отображать текстовые файлы.Однако теперь возникает проблема, что он не будет декодировать текстовый файл после его кодирования.Скажите, если закодированный текстовый файл содержит:

20 18 1 9 14 19

Когда я декодирую его, используя этот скрипт:

@echo off
cls
echo.
echo.
echo.
echo.
echo.
echo        Decoding Your Language File... Please Wait... 
echo.
echo.
echo.

for /f "delims=" %%i in (!name1!.txt) do ( 
set var1=%%i 
set var1=!var1:1 =a ! 
set var1=!var1:2 =b ! 
set var1=!var1:3 =c ! 
set var1=!var1:4 =d ! 
set var1=!var1:5 =e ! 
set var1=!var1:6 =f ! 
set var1=!var1:7 =g ! 
set var1=!var1:8 =h ! 
set var1=!var1:9 =i ! 
set var1=!var1:10 =j ! 
set var1=!var1:11 =k ! 
set var1=!var1:12 =l ! 
set var1=!var1:13 =m ! 
set var1=!var1:14 =n ! 
set var1=!var1:15 =o ! 
set var1=!var1:16 =p ! 
set var1=!var1:17 =q ! 
set var1=!var1:18 =r ! 
set var1=!var1:19 =s ! 
set var1=!var1:20 =t ! 
set var1=!var1:21 =u ! 
set var1=!var1:22 =v ! 
set var1=!var1:23 =w ! 
set var1=!var1:24 =x ! 
set var1=!var1:25 =y ! 
set var1=!var:26 =z !
set var1=!var1:27 =. !
set var1=!var1:28 =, ! 
echo        Verifying Content...

) 

echo %var1% > %name1%.txt
echo Decoding Complete!

TIMEOUT /t 1 /nobreak > nul

Я получаю:

t 1h a i 1d 1i

Потому что, когда программа декодирует букву r (то есть 18), она принимает 8 из 18 за букву h и, следовательно, ставит 1h ... так что есть способсделать конкретный поиск и заменить?(аналогично, если вы набираете путь к файлу с пробелами в нем, вы помещаете кавычки вокруг пути и имени файла) Если да, то каким будет формат?

РЕДАКТИРОВАТЬ Здесьтекущий скрипт для программы stringparsing.bat :

@echo off
setlocal enabledelayedexpansion 
title BETA
cls
cd /d F:\script\st
echo.
echo.
echo.
echo      Setting Variables...
echo      Loading Language Database...

set beepset=true

:: ###################################################################################
::    CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE
:: ###################################################################################




TIMEOUT /t 5 /nobreak > nul

goto MAIN

:MAIN
cls
IF %beepset%==true echo 
echo =================================================================================
echo.
echo          Please type a name for your new language file:

echo =================================================================================
set /p name=
cls
echo.
echo.
echo.
echo        ==============================================================
echo        ##############################################################
echo        #============================================================#
echo        #                                                            #
echo        # - Create the file you would like to encode.                #
echo        #                                                            #
echo        ##############################################################
echo        #                                                            #
echo        # - How many lines of text will your file have?              #
echo        #                                                            #
echo        #============================================================#
echo        ##############################################################
echo        ==============================================================




set /p linecount= 
cls
set foo=0
set linenumber=0

:lineset
set /a linenumber=linenumber+=1
set /p line1=%linenumber%
echo. >> %name%.txt
echo %line1% >> %name%.txt
set /a foo=foo+1
IF %foo%==%linecount% goto MAIN123
goto lineset


:ENCODE
title Step 2
cls
echo.
echo.
echo.
echo.      =================================================================================
echo.
echo          Please type a name of the File you want to Encode:
echo.
echo.         =================================================================================
set /p name2=

echo.
echo.
echo.
echo.
echo.
echo        Encoding Your Language File... Please Wait... 
echo.
echo.
echo.

for /f "delims=" %%i in (!name2!.txt) do ( 
set var=%%i 
set var=!var:a=1 ! 
set var=!var:b=2 ! 
set var=!var:c=3 ! 
set var=!var:d=4 ! 
set var=!var:e=5 ! 
set var=!var:f=6 ! 
set var=!var:g=7 ! 
set var=!var:h=8 ! 
set var=!var:i=9 ! 
set var=!var:j=10 ! 
set var=!var:k=11 ! 
set var=!var:l=12 ! 
set var=!var:m=13 ! 
set var=!var:n=14 ! 
set var=!var:o=15 ! 
set var=!var:p=16 ! 
set var=!var:q=17 ! 
set var=!var:r=18 ! 
set var=!var:s=19 ! 
set var=!var:t=20 ! 
set var=!var:u=21 ! 
set var=!var:v=22 ! 
set var=!var:w=23 ! 
set var=!var:x=24 ! 
set var=!var:y=25 ! 
set var=!var:z=26 ! 
set var=!var:.=27 !
echo        Verifying Content...

) 

echo %var% > %name2%.txt
echo Encoding Complete!

TIMEOUT /t 1 /nobreak > nul

goto MAIN123

:DECODE
title Decode...
echo.
echo.
echo.
echo         =================================================================================
echo.
echo          Please type a name of the File you want to decode:
echo.
echo         =================================================================================
set /p name1=

:decoderscript
cls
echo.
echo.
echo.
echo.
echo.
echo        Decoding Your Language File... Please Wait... 
echo.
echo.
echo.

for /f "delims=" %%i in (!name1!.txt) do ( 
set var1=%%i 
set var1=!var1:1 =a ! 
set var1=!var1:2 =b ! 
set var1=!var1:3 =c ! 
set var1=!var1:4 =d ! 
set var1=!var1:5 =e ! 
set var1=!var1:6 =f ! 
set var1=!var1:7 =g ! 
set var1=!var1:8 =h ! 
set var1=!var1:9 =i ! 
set var1=!var1:10 =j ! 
set var1=!var1:11 =k ! 
set var1=!var1:12 =l ! 
set var1=!var1:13 =m ! 
set var1=!var1:14 =n ! 
set var1=!var1:15 =o ! 
set var1=!var1:16 =p ! 
set var1=!var1:17 =q ! 
set var1=!var1:18 =r ! 
set var1=!var1:19 =s ! 
set var1=!var1:20 =t ! 
set var1=!var1:21 =u ! 
set var1=!var1:22 =v ! 
set var1=!var1:23 =w ! 
set var1=!var1:24 =x ! 
set var1=!var1:25 =y ! 
set var1=!var:26 =z !
set var1=!var1:27 =. !
set var1=!var1:28 =, ! 
echo        Verifying Content...

) 

echo %var1% > %name1%.txt
echo Decoding Complete!

TIMEOUT /t 1 /nobreak > nul

goto MAIN123


:DISPLAY
cls
echo.
echo.
echo.
echo        Please type the name of the file you want to display:
set /p displayfile= 
type %displayfile%.txt
echo.
echo hit enter to go to Main Menu...
pause > nul
goto MAIN123

:END
cls
title SHUTTING DOWN...
echo.
echo.
echo.
echo            Terminating service stream...
echo.
echo.
echo.
echo.
echo            Done! Thank you for using this program!
TIMEOUT /t 2 /nobreak > nul





::(%xx%) -1  I/O Stream= "SHELL.dll" 
:: IF EXIST [&1[Parser_2009]] exit

Exit

1 Ответ

0 голосов
/ 08 декабря 2010

Я получаю:

t 1h a i 1d 1i

Потому что когда программа декодирует буква г (что 18) он ошибается 8 в 18 для буквы H и, следовательно, ставит 1ч ... так есть ли способ сделать это конкретный поиск и замена? (похоже, если вы печатаете путь к файл с пробелами в нем, вы бы положили цитаты вокруг пути и имени файла) Если да, то какой будет формат?

Ага, у тебя проблема. И вы видите причину. 18 заменяется строкой

set var1=!var1:8 =h !

до правильная строка может заменить его

set var1=!var1:18 =r !

Если вы не можете решить проблему, тогда нет места для надежды. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...