1

以下の内容の A.txt と B.txt という 2 つのテキスト ファイルがあります。

A.txt

value_a1,value_a2
value_b
value_c
value_d
value_e1,value_e2

B.txt

12,14
13
15
16
23,34

出力ファイル C.txt が欲しい

"value_a1","12","value_a2","14"
"value_b","13"
"value_c","15"
"value_d,"16"
"value_e1,"23","value_e2","34"

私はバッチスクリプトを初めて使用するので、ガイドしてください。

4

2 に答える 2

3

次のコードが機能します。

    @Echo off

    echo. >>d.txt
    type b.txt >>d.txt

    set dec=1
    For /F "usebackq tokens=1,* delims=, " %%a in ("a.txt") do call :File1 %%a %%b
    set dec1=0
    del d.txt

    exit /b

    :File1
    SET str1=%~1
    SET str2=%~2
    SET Count=1
    For /F "usebackq tokens=1,* skip=%dec% delims=," %%A in ("d.txt") do call :File2   %%A %%B
    set /a dec=%dec%+1

    exit /b

    :File2
    SET str3=%~1
    SET str4="%~2"
    IF %Count% EQU 1 (
    IF %str4%=="" (
    echo "%str1%","%str3%" >>c.txt
    set /a Count=%Count%+1
    ) ELSE (
    echo "%str1%","%str3%","%str2%",%str4% >>c.txt
    set /a Count=%Count%+1) 
    )
    exit /b 
于 2013-01-28T15:52:11.627 に答える
2

このソリューションには多くの制限がありますが、純粋なネイティブ バッチで可能な限りシンプルなソリューションです。また、バッチ ソリューションとしてもかなり効率的です。

@echo off
setlocal enableDelayedExpansion
<b.txt >c.txt (
  for /f delims^=^ eol^= %%L in (a.txt) do (
    set "ln="
    set /p "ln="
    set "out="
    for %%A in (%%L) do (
      for /f "tokens=1* delims=," %%a in ("!ln!") do (
        set "out=!out!,"%%A","%%a""
        set "ln=%%b"
      )
      echo !out:~1!
    )
  )
)

制限:

  • A.TXT に*or?またはを含めることはできません!
  • A.TXT 値に次のいずれかが含まれる場合は、引用符で囲む必要があります。<space> <tab> , ; =
  • A.TXT 行の最大長は約 8191 バイトです
  • B.TXT に含めることはできません!
  • B.TXT 値に含めることはできません,(,は厳密には区切り文字です)
  • B.TXT 行の最大長は 1021 バイトです
  • B.TXT 行では、Unix スタイル (改行) ではなく、Windows スタイルのターミネータ (復帰/改行) を使用する必要があります。

いくつかの制限はかなり簡単に克服できます。他のものは、完全に非現実的になるまで、より多くの努力を必要とします。

于 2013-01-29T04:44:28.740 に答える