2016-04-06 18 views
-1

2つの引数をとるバッチファイルを作成する必要があります。バッチファイルから行列を表示する

最初は、 '、'で区切られた整数値を含む行列Aを含むtxtファイルです。

第2引数もtxtファイルです。これは、 ''で区切られた整数の配列Bを含みます。

バッチファイルk[i][j]は誰も私を助けることができる場合、私は非常に感謝するだろう、アレイBの発生回数A[i][j]の数である C[i][j]=A[i][j]+k[i][j]行列Cを含み、result.txtという名前のファイルを作成する必要があります。私はこの問題を解決しようとしましたが、DOSでコマンドのために例えば

...私を殺している:

matrix.txt

1,2,3 
4,5,6 

array.txt

1 3 2 5 1 

results.txt

3 3 4 

4 6 6 
+3

質問が似ている「私のためにこれを書く。ここは私の要件です。」ここでうまく受信されていません。いくつかのヒントについて[質問する](http://stackoverflow.com/help/how-to-ask)を参照し、下降声の洪水が始まる前に質問をすばやく修正または削除してください。 – rojo

答えて

0
@echo off 
setlocal enabledelayedexpansion 

for /f "usebackq delims=" %%a in ("path+array.txt") do (
    set "array_all=%%a" 
) 
set array_n=0 
call :sub_2 %array_all% 
set array_n_all=%array_n% 

for /f "usebackq delims=" %%a in ("path+matrix.txt") do (
    set "current_line=%%a" 
    set "current_line=!current_line:,= !" 
    set "matrix_new=" 
    call :sub_1 !current_line! 
    echo !matrix_new:~1!>>"path+results.txt" 
) 
exit /b 

:sub_1 
set "current_value=%1" 
if not defined current_value exit /b 
set "array_rest=!array_all:%current_value%=!" 
set array_n=0 
call :sub_2 %array_rest% 
set /a current_value_new=%current_value%+%array_n_all%-%array_n% 
set "matrix_new=%matrix_new% %current_value_new%" 
shift 
goto sub_1 

:sub_2 
set "array_tmp=%1" 
if not defined array_tmp exit /b 
set /a array_n+=1 
shift 
goto sub_2 
2

この問題は面白いです!これは私がそれを解決する方法を次のとおりです。

rem Count the number of times each number appear in array B 
for each line in %2 do (
    for each number %%n in line do (
     add 1 to times[%%n] 
    ) 
) 

rem Process the matrix A 
for each line in %1 do (
    rem Initialize output line 
    set "out=" 
    for each number %%n in line do (
     set termC = %%n + times[%%n] 
     join termC to out 
    ) 
    echo out 
) 

EDIT:ユーザーaschipflが示されているように、この答えはポストの完全なので、私はあなたのためのヒント(として投稿この問題を解決する方法のほんの擬似コードでありますOPが問題を解決するための自分の努力を示していないときの解決策はここでは良い練習ではありません)。

しかし、今、別の作業溶液が投稿されていたことを、私は完全に動作するプログラムに、以前の擬似コードを完了:

@echo off 
setlocal EnableDelayedExpansion 

rem Check the arguments 
if "%~2" equ "" echo Usage: %~NX0 MatrixA.txt ArrayB.txt & goto :EOF 
if not exist "%~1" echo MatrixA file not found & goto :EOF 
if not exist "%~2" echo ArrayB file not found & goto :EOF 

rem Count the number of times each number appear in array B 
for /F "usebackq delims=" %%b in ("%~2") do (
    for %%n in (%%b) do (
     set /A "times[%%n]+=1" 
    ) 
) 

rem Process the matrix A and create matrix C 
(for /F "usebackq delims=" %%a in ("%~1") do (
    set "out=" 
    for %%n in (%%a) do (
     set /A termC=%%n + times[%%n] 
     set "out=!out! !termC!" 
    ) 
    echo !out:~1! 
)) > result.txt 
+0

これは一種の疑似コードですね。あなたはどこかで言及する必要があります... – aschipfl

+1

@aschipfl:私はそれをやったし、完全な作業プログラム – Aacini

関連する問題