3

さまざまなテキスト行 (空白行を含む) を含む大きな (20MB) テキスト (入力) ファイルがあります。入力ファイル内の特定のテキストを検索し、検索語が含まれる文字列を取得し、その文字列を別のテキスト (出力) ファイルに書き込み、その文字列にスペース、コンマ、およびそれに続く行を追加できるバッチ ファイルが必要です。出力ファイル内の入力ファイル内。

  1. 入力ファイルデータ:

    NORTHING         EASTING   O-HEIGHT     CODE FFF STATION   STD DEV MAPPROJ 
    

    ネオ 000 020720618 4829559.470 ,12082011c.lst

    0.015 0.015 0.015
    ネオ 000 020740188 4835430.827 ,12082011c.lst

    0.009 0.009 0.009
    ネオ 000 020750232 4841535.651 ,12082011c.lst

    0.004 0.004 0.004
    PLH 000 020720615 N 43 36 15.44568 W 79 32 38.22754 67.892 m 0 ,12082011c.lst

    0.014 0.014 0.014 ,12082011c.lst

  2. 検索語: 「NEO」

  3. 出力:

    NEO 000 020720618 4829559.470、12082011C.LST、0.015 0.015 0.015
    NEO 000 020740188 4835430.827、12082011C.LST、0.009 0.009 0.009
    NEO 000

findstr コマンドを使用してみましたが、行の最初の部分 ( NEO 000 020720618 4829559.470 ,12082011c.lst) が書き込まれますが、次の行を取得して文字列に追加する方法がわかりません。(文字列はこの例で示したよりも長いので、変数に文字制限がある場合はお知らせください)。ありがとう、ゲイブ。

4

1 に答える 1

1

コメントで示したように、バッチはテキスト ファイルの処理には適していません。しかし、ここに問題に対するネイティブのバッチ ソリューションがあります。どこかに NEO を含む行ではなく、最初のトークンが NEO である行を検索していると仮定しています。

FOR /F は空行を無視するので、空行を無視したいようです。

;このソリューションでは、デフォルトの FOR /F EOL オプションにより、で始まる行も無視されます。これは、EOL を改行文字に設定することで解消できますが、構文が醜いです。で始まる行がないことを前提としています;

他のバッチ ソリューションと同様に、行は最大 8191 バイトに制限されています。

@echo off
setlocal disableDelayedExpansion
set "ln1="
>"output.txt" (
  for /f "useback delims=" %%A in ("input.txt") do (
    if defined ln1 (
      set "ln2=%%A"
      setlocal enableDelayedExpansion
      echo(!ln1! ,!ln2!
      endlocal
      set "ln1="
    )
    for /f %%B in ("%%A") do if "%%B"=="NEO" set "ln1=%%A"
  )
)
于 2012-10-24T14:18:43.983 に答える