0

ユーザーが長さを定義できるテキスト文字列があります例として、ユーザーは 1234567890 を入力しました

私が欲しいのは、最初のすべての文字とそれに続くすべての 3 文字を引き出すことです

したがって、次のようになります

1st  | 1234567890 = 1
3rd  | 234567890  = 14
1st  | 23567890   = 142
3rd  | 3567890    = 1426
1st  | 357890     = 14263
3rd  | 57890      = 142638
1st  | 5790       = 1426385
3rd  | 790        = 14263850
1st  | 79         = 142638507
3rd  | 9          = 1426385079

また、最終的に最後の 2 つの数字が 3 桁未満になるという事実も考慮する必要があります。

バッチでこれを達成する方法について誰か考えていますか?

4

1 に答える 1

1

ここで、バッチ文字列操作が非常に役立ちます。

@echo off
set str="1234567890"

for %%a in (%str%) do set str=%%~a
set newstr=
:Loop
set "first=%str:~0,1%"
set "fourth=%str:~3,1%"
set "str=%str:~1,2%%str:~4%"
set "newstr=%newstr%%first%%fourth%"
if not "%fourth%"=="" goto Loop
set "newstr=%newstr%%str:~1%%str:~0,1%

echo.%newstr%

あなたの質問からの入力例の場合1234567890、出力は確かに次のようになります。

1426385079

説明

whileこのコードは、ループを使用して機能します(これは、Cのループとある程度同等です)。

ループのすべての反復で、最初と4番目の文字が抽出されstr、に追加されnewstrます。これにより、最終的に最終出力が保持されます。
次に、str次の2つの部分文字列を追加して更新します。

  • %str:~1,2%2番目の文字から始まる2つの文字を抽出します(インデックスは0から始まるため、2番目のインデックスは1です)。
  • %str:~4%5番目から始まるすべての文字を抽出します

の新しい値strは基本的に古い値であり、1番目と4番目の文字は含まれていません。

str3文字以下の場合(つまり、がfourth空の文字列の場合)、ループは停止します。ループの後、最後の(3つ以下の)文字が処理さnewstrれ、正しい順序で追加されます。これは、説明したい特殊なケースです。

お役に立てば幸いです。

于 2012-11-23T13:13:17.537 に答える