2012-02-21 17 views
1

各ファイルの最初のトークンを取得するコードは次の通りですが、動作しません。私に間違っていることを教えてください。また、どのように行のトークンを個別に取得できますか?以下バッチファイル内の別々のトークン

ABC  1000  GHY_GGG 
ADD  2000  
ABCSS  3000  JJY_GGG 

マイコード:

for /f "tokens=* usebackq delims= " %%a in ("%TraderWorkspaceFile%") do (
set line=%%a 

call :processToken 
) 
goto :eof 

:processToken 

    for /f "tokens=1 delims= " %%f in ("%line%") do (  
    echo Got one token: %%f 
) 

goto :eof 

おかげ

MYタブ区切りtxtファイルには、何か以下のようなものです!

+0

すべての問題報告には、問題を示す最小のコードサンプルが必要です(実際には問題ありません)、予想される動作(やはり、あなたはあなたのコードを単純化しています。これを提供してください)と_actual_の動作(いいえ、どこでも見ることができません):-) – paxdiablo

答えて

6

FOR/Fコマンドは、ファイルのを読み、「トークン= delims =」オプションに従ってトークンで彼らを分離。デフォルトでは、 "トークン"は行の最初のトークンを意味し、 "delims"にはスペースとタブ(指定されていない場合)が含まれます。このコマンドの:

for /f "usebackq" %%a in ("%TraderWorkspaceFile%") do echo %%a 

が表示されるでしょう:

ABC 
ADD 
ABCSS 

for /f "tokens=2 usebackq" %%a in ("%TraderWorkspaceFile%") do echo %%a 

一方が表示されるでしょう:

1000 
2000 
3000 

"delimsは=" と同じであることに注意してくださいデフォルト値なので無駄ですが、 "delims = "(delimsなし)は、最初のトークンに行全体を囲むトリックです。

:processToken 
    for /f %%f in ("%line%") do (  
    echo Got one token: %%f 
) 
goto :eof 

はまったく同じことをするだろう...

あなたは、個々のスペース、または - も得ることができます:がすべての行の

for /f "usebackq delims=" %%a in ("%TraderWorkspaceFile%") do (
set line=%%a 
call :processToken 
) 
goto :eof 

:processToken 
    for /f "tokens=1 delims= " %%f in ("%line%") do (  
    echo Got one token: %%f 
) 
goto :eof 

正しく表示されるでしょう最初のトークン

、この方法でサブルーチンのパラメータを使用してタブで区切られたトークンを作成します。

:processLine 
echo First token: %1, second token: %2, third one: %3 
goto :eof 
このように呼び出さなければなりません

(代わりに呼び出しの:processTokenは):

call :processLine %line% 
+0

ありがとうたくさんのAacini ..たくさんの手伝って! – NewQueries

+0

また、行のトークン数を数える方法はありますか? – NewQueries

+0

トークンにワイルドカード(*?)またはデリミタ(、; =)がない場合、カウントは即座に行われます。** set n = 0 **(%line%)の**%/a n + = 1 ** – Aacini

2

はあなたのファイルを分離<tab>であると言うが、それはあなたの「delims」オプションが<space>に設定されているように私には見えます。私が正しい場合は、 "delims ="の後のスペースをタブに変更して問題を解決できます。あるいは、値が空白でない場合は、デリミタのデフォルト値を<space><tab>とするだけで、delimsオプションを削除することができます。

最初のトークンをソートすると仮定すると、コードを拡張して3つのトークンをすべて解析するのは簡単です。 「tokens = 1-3」に変更するだけです。トークン1は%% f、トークン2は%% g、トークン3は%% hにあります。

ところで、なぜ2つのループを使用しているのか分かりません。最初のFORループで直接トークンを解析できるようです。

+0

ありがとうDbenham ..それは働いた! – NewQueries

関連する問題