0

パラメータを受け取るスクリプトを作成しようとしました:

  • 線の範囲
  • 列の範囲

例: cmd filename 1 5 12 87 ここで、1 と 5 は行の範囲、12 と 87 は列の範囲です。

これらの範囲からテキストを抽出したい。

頭と尾を使用して行の何かを見つけましたが、対応する列を選択する方法がわかりません。

Windows のみ: バッチ、powershell。


更新 1

file.txt

define('HTTP_REQUEST_METHOD_GET',     'GET',     true);
define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
define('HTTP_REQUEST_METHOD_POST',    'POST',    true);
define('HTTP_REQUEST_METHOD_PUT',     'PUT',     true);
define('HTTP_REQUEST_METHOD_DELETE',  'DELETE',  true);
define('HTTP_REQUEST_METHOD_OPTIONS', 'OPTIONS', true);
define('HTTP_REQUEST_METHOD_TRACE',   'TRACE',   true);

cmd file.txt 1 3 19 27

出力:

                  ST_METHOD_GET',     'GET',     true);
define('HTTP_REQUEST_METHOD_HEAD',    'HEAD',    true);
define('HTTP_REQUEST_METHO

より良い表現のために、最初の行を空白にします。

実際、スクリプトは、行 X から行 Y までのテキストの選択を、列 W (最初の行のみ) から開始し、列 Z (最後の行のみ) で編集することをシミュレートします。

4

2 に答える 2

2
@echo off
setlocal EnableDelayedExpansion

set n=1
set /a start=%4-1
set /a len=%5-%4

for /f "usebackq delims=" %%a in ("%1") do (
  if !n! gtr %3 exit /b
  if not !n! lss %2 (
    set "row=%%a"
    echo !row:~%start%,%len%!
  )
  set /a n += 1
)

編集:あなたの例に基づいて、私は私の答えを更新しました、私はあなたがこれを探していると思います:

@echo off
setlocal EnableDelayedExpansion

set n=1
set /a startc=%4-1
set /a endc=%5-1

for /f "usebackq delims=" %%a in ("%1") do (
  set "row=%%a"
  if !n! == %3 (
    if !n! == %2 echo !row:~%startc%,%endc%!
    if not !n! == %2 echo !row:~0,%endc%!
    exit /b
  )
  if !n! == %2  echo !row:~%startc%!
  if !n! gtr %2 echo !row!
  set /a n += 1
)
于 2012-11-23T11:25:56.113 に答える
2

これを試して:

Function SelectTextRange( $path, $SL, $EL, $SS , $ES)
{
  $txt = gc $path
  $txt | select -First (($EL+1)-$SL) -Skip ($SL-1) |
     % { $_.substring( ($SS-1) ,($ES-$SS+1) )}
}

列と行の値が含まれている値であることを理解しています。

より正確なサンプルを作成したら、次のことを試してください。

Function SelectTextRange( $path, $SL, $EL, $SS , $ES)
{
  $txt = gc $path
  $c = 0
  $txt[($sl+1)..($el+1)] | % { 

  if ($c -eq 0) { $_.substring($ss-1) } 
  if ($c -gt 0 -and $c -lt $txt[$sl..$el].count ) { $_}
  if ($c -eq ($txt[$sl..$el].count) ) { $_.substring(0,$es+1) } ;

  $c++
  }
}
于 2012-11-23T10:57:04.207 に答える