2010-11-30 7 views
2

あなたは基本的に、6行以上のテキスト行を含むテキストファイルを作成するようにユーザーに求めている非常に複雑なバッチファイルを作成しています。次に、そのファイルを取り出し、各文字の各インスタンスをそれぞれの番号に変更します(たとえば、テキストファイルの最初の行が "プログラマブル"となっている場合、プログラムは文字 "a"のすべてのインスタンスを1に変更し、 "b" 2に、それはすべての数字になるまでようにそれから「16 18 15 7 18 1 13 1 2 12 5」を読み出すことになる)、私は次のスクリプトを使用することによってこれを行うであろう:バッチファイルを使用してテキストファイルの2行目の文字列を置き換える方法は?

set /p var=< text.txt 
set var=%var:a=1% 
echo.%var% >> text.txt 

しかしのみこのスクリプトの問題は、最初の行にある文字aを1に変更するだけで、残りの文字には "a"を付けないことです。

私はまた、最初の行のテキストをタイプするときに、それを別の隠しファイル(text1.txt)に送信するように、プログラムの先頭でドキュメントの分割を試みました。

set /p line1=type the first line: 
echo %line1% >> text1.txt 
attrib +h text1.txt 
set /p line2=type the second line: 
echo %line2% >> text2.txt 
attrib +h text2.txt 
:: ######################################################################## 
:: Im not going to repeat this 6 times but hopefully you get my point 
:: ######################################################################## 

今別々のファイルに行を分割に伴う問題は、それが中で、効率的であるということです。私はこれを使用した、ユーザーの種類という1つのテキストファイル(TEXT.TXT)

にテキストすべての文字のすべてのインスタンスをそれぞれの番号に変更するのに非常に時間がかかり、各行(またはこの状況ではファイル)に対して行う必要があります。ユーザーが入力したもの...もしこれを文脈に置くと助けになるなら、ここで私のプログラムのスクリプトは ":LOADING"の下付き文字です。私は現在、私が先に説明した方法を使っています。ファイルに変換します。

コード:(「stringparsing.bat」として保存)

@echo off 
title BETA 
cls 
echo. 
echo. 
echo. 
echo  Setting Variables... 
echo  Loading Language Database... 
:: ################################################################################### 
:: CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE CALLING VARIABLE DATABASE 
:: ################################################################################### 
:: An Idea i was thinking of trying was to put a subscript here that calls another 
:: batch file that contains a list of the letters set as variables to their 
:: respective numbers (example: SET a=1, SET b=2, SET c=3) 
:: ----------------------------------------------------------------------------------- 
PING 1.1.1.1 -n 1 -w 3000 >NUL 
goto MAIN 
:MAIN 
set foo=0 
cls 
echo. 
echo. 
echo. 
echo. 
echo   =================================== 
echo    #################################   
echo    #######  Main Menu: ####### 
echo    ################################# 
echo   =================================== 
echo.  
echo. 
echo    1.) Create New Language File... 
echo. 
echo    2.) Load Existing Lanuage File... 
echo. 
echo    3.) Settings... 
echo --------------------------------------------------------- 
SET /p CHOICE= Select a Function: 
IF %CHOICE%== 1 GOTO CREATE 
IF %CHOICE%== 2 GOTO LOAD 
IF %CHOICE%== 3 GOTO SETTINGS 
GOTO MAIN 
:CREATE 
cls 
title Step 1 
echo. 
echo. 
echo. 
echo    echo ============================================================================ 
echo. 
set /p name= please type a name for your new language file: 
echo. 
echo   ================================================================================= 
cls 
echo. 
echo. 
echo. 
echo ============================================================== 
echo ############################################################## 
echo #============================================================# 
echo #               # 
echo # - After you hit enter you will be redirected    # 
echo # to a Live Typer. so anything you type into    # 
echo # it will be sent to %name%.txt.       # 
echo #               # 
echo #               # 
echo # - Next, select load language!        # 
echo #               # 
echo #============================================================# 
echo ############################################################## 
echo ============================================================== 
pause 
goto typer1 
:typer1 
cls 
set /p line1= : 
echo %line1% >> %name%1.txt 
attrib +h %name%1.txt 
cls 
set /p line2= : 
echo %line2% >> %name%2.txt 
attrib +h %name%2.txt 
cls 
set /p line3= : 
echo %line3% >> %name%3.txt 
attrib +h %name%3.txt 
cls 
set /p line4= : 
echo %line4% >> %name%4.txt 
attrib +h %name%4.txt 
cls 
set /p line5= : 
echo %line5% >> %name%5.txt 
attrib +h %name%5.txt 
cls 
set /p line6= : 
echo %line6% >> %name%6.txt 
attrib +h %name%6.txt 
cls 
echo. 
echo. 
echo. 
echo ========================================================== 
echo. 
(
IF EXIST %name%1.txt echo - FIRST LINE CONFIRMED. 
IF EXIST %name%2.txt echo - SECOND LINE CONFIRMED. 
IF EXIST %name%3.txt echo - THIRD LINE CONFIRMED. 
IF EXIST %name%4.txt echo - FOURTH LINE CONFIRMED. 
IF EXIST %name%5.txt echo - FIFTH LINE CONFIRMED. 
IF EXIST %name%6.txt echo - SIXTH LINE CONFIRMED. 
echo %name% > Language_File.txt 
attrib +h Language_File.txt 
set /a foo+ =1 
) 
echo. 
echo ========================================================== 
goto LOAD 
:LOAD 
set /a foo+ =1 
IF %foo%== 2 goto loadexternal 
goto LOAD23 
:loadexternal 
echo. 
echo language file is loading now! 
pause > nul 
cls 
set /p name=<Language_File.txt 
echo. 
echo. 
echo Language_File Loaded! 
pause >nul 
goto LOAD23 
:LOAD23 
cls 
echo. 
echo. 
echo. 
echo. 
echo. 
echo  Encoding Your Language File... Please Wait... 
echo. 
echo. 
echo. 
PING 1.1.1.1 -n 1 -w 3000 >NUL 
:A1 
set /p var=< %name%1.txt 
set var=%var:a=1% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "A" done. 
goto B1 
:B1 
set /p var=< %name%1.txt 
set var=%var:b=2% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "B" done. 
goto C1 
:C1 
set /p var=< %name%1.txt 
set var=%var:c=3% 
echo.%var% 
echo %var% > %name%1.txt 
echo. 
echo. 
echo. 
echo   "C" done. 
goto D1 
:D1 
set /p var=< %name%1.txt 
set var=%var:d=4% 
echo %var% > %name%1.txt 
echo   "D" done. 
goto E1 
:E1 
set /p var=< %name%1.txt 
set var=%var:e=5% 
echo %var% > %name%1.txt 
echo   "E" done. 
goto F1 
:F1 
set /p var=< %name%1.txt 
set var=%var:f=6% 
echo %var% > %name%1.txt 
echo   "F" done. 
pause 
cls 
type %name%.txt 
pause >nul 
goto MAIN 
:END 
cls 
title SHUTTING DOWN... 
echo. 
echo. 
echo. 
echo   Terminating service stream... 
echo. 
echo. 
echo. 
echo. 
echo   Done! Thank you for using this program! 
ping 1.1.1.1 w -n 1 -w 6000 > NUL 
Exit*** 

あなたは解決策を持っている場合、私はこの問題の解決のためにハイとローの検索が、持ってきたので、私はそれを聞いて喜んでいるだろう何も見つかりませんでした。また、もし誰かが私のスクリプトに他の間違いやエラーを気付かれたら、お気軽にコメントしてください!

ありがとうございます!

PS。このトピックで投稿した最後のスクリプトが正しく表示されなかった場合、またはすべてが混ざっている場合は、このリンクからスクリプトをダウンロードするだけです。

[http://home.danieljewison.operaunite.com/f/content/Documents /stringparsing.bat][1]

+0

最近のプログラミング言語(Python ... Ruby ...何か本当に)を使ってみたことがありますか?この時点でバッチファイルを使用すると考えることができる理由はまったくありません(...まあ、過去10年間です)。 – Gerrat

+2

まあ、私はそれらの言語について何か知っていたら、iveはC++でプログラムを作ろうとしましたが、iveはそれらすべてのソースコードを手に入れましたが、コンパイル方法はわかりません。たくさんのパラメータを求めてくれていて、ダウンロードする必要があります。しかし、バッチではメモ帳が必要です:P + imは他の言語のシェル/バッチプログラミングよりはるかに優れています。かなりシェルがバッチファイル以外の部分を含んでいるので、私のシェルの知識を広げるのが大好きです。 – daniel11

答えて

1

私の友人、for loopを紹介しましょう。ユーザーが入力したすべての行を1つのファイルに保存します。このファイルはinput.txtとします。 /fスイッチとdelims=オプション付きのforループを使用して、ファイル内のすべての行をループし、変数%%iに格納します。 delims=がなければ、最初の空白文字までしか読めません。

読み込んだ行ごとに、テキスト置換を行います。バッチプログラミングを使用した「落とし穴」は、forループ内に変数を設定するときに、ファイルの先頭にsetlocal enabledelayedexpansion行を追加し、%の代わりに!を使用して変数の内容にアクセスする必要があります。

@echo off 
setlocal enabledelayedexpansion 
for /f "delims=" %%i in (input.txt) do (
echo translating "%%i"... ^<insert fake delay here^> 
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 ! 
echo !var! 
) 

input.txtは、これらのコンテンツを持っている場合:

programable 
this is line 2 
third line 

その後出力は次のようになります。あなたが見ることができるように

C:\batch>encode.cmd 
translating "programable"... <insert fake delay here> 
16 18 15 7 18 1 13 1 2 12 5 
translating "this is line 2"... <insert fake delay here> 
20 8 9 19 9 19 12 9 14 5 2 
translating "third line"... <insert fake delay here> 
20 8 9 18 4 12 9 14 5 

、私は偽の遅延を残しました。私は自分のプログラムが早いのが好きです。 :)

+0

また、http://stackoverflow.com/questions/3805036/read-only-x-lines-from-a-を見てください。 txt-file-with-a-windows-batch-file –

+0

これは、関連する質問をリンクしている場合は、次のようになります。http://stackoverflow.com/questions/130116/windows-batch-commands-to-read-first-テキストからファイルへの変換 – indiv

+0

soo muchhこれはまさにiwです探しているように! ping 1.1.1.1 -n 1 -w 3000> NUL と呼ばれる共通のコマンドを使用して、偽の遅延imに対してbtwを指定した秒数/ミリ秒でスクリプトを一時停止するより効率的な方法を知っていますか?ありがとう! – daniel11

関連する問題