アウトライン解析No.34342
matushiro97 さん 15/08/03 15:01
 
アウトライン解析についての質問です。

次のようなコードあったとします。
if a then
 b
 for i=1 to 10
  c
 end
else
 d
end

for j=1 to 100
 if a then
  x
 elseif b then
  y
 else
  z  
 end
end

これを次のようなアウトラインで表示することはできるでしょうか。
if a then
 for i=1 to 10
  end
 else
 end
for j=1 to 100
 if a then
  elseif b then
  else
  end
  end

[ ]
RE:34342 アウトライン解析No.34343
秀丸担当 さん 15/08/03 16:06
 

インデントがされていれば、単純に行頭の文字列によって判断することが可能で
す。
[その他]→[ファイルタイプ別の設定]→[アウトライン解析]で「ツリー表示 -
通常」にします。

「追加...」で対象となる単語を追加していきます。
追加するとき、インデントによってツリー構造を決めるものは、「オプション
(O)>>」ボタンを押して「インデントの深さでレベルを決める」をONにします。
インデントのみで、インデントが同じであればツリー構造も同じにする場合、
「1つ上の定義と同じレベルとして定義」もONにします。

例えば以下のようになるように追加するとインデントのみでツリー構造になりま
す。

 LV  種類         内容
 1   行頭の文字列 for
     行頭の文字列 if
     行頭の文字列 else
     行頭の文字列 end

else,endは、for,ifと同じインデントでも1つ下の階層にする場合は、3番目の
「else」の「1つ上の定義と同じレベルとして定義」をOFFにします。

 LV  種類         内容
 1   行頭の文字列 for
     行頭の文字列 if
 2   行頭の文字列 else
     行頭の文字列 end

アウトライン解析の結果は、「アウトライン解析...」コマンド(標準でF11)で
ダイアログボックスとしての表示か、[ウィンドウ]→[アウトライン解析の枠]で
ウィンドウの一部としての表示ができます。

[ ]
RE:34343 アウトライン解析No.34346
matushiro97 さん 15/08/03 19:51
 
すみません。もっとはっきりとインデントがわかるように秀丸で作成したものをコピ
ペしたところ、インデントが明確でありませんでした。

もっとインデントを強調し、説明を付加したものを張り付けます。
自分なりにやった時の失敗で解決できなかったことは、
@最初のブロックではif文が上位にあり、for文が下位にあり、次のブロックでは逆
転しているときに、if-endとfor-endを一回登録しただけではうまくアウトラインの
構造が再現できなかった。
Ascilabでは、ifもforもそのほかの文も終結はすべて同じendなので、endがどれに
対応したendなのか解析でうまくいっていないようであった。
などです。

if a then
 b
 for i=1 to 10
  c
 end
else
 d
end

for j=1 to 100
 if a then
  x
  elseif b then
    y
 else
    z  
  end
end

これを次のようなアウトラインで表示することはできるでしょうか。
if a then
  for i=1 to 10←if文内部あることを示すために1段下げ
    end←      for文終結。for文の一部であることを示すために1段下げ
  else←if文の一部であることを示すために1段下げ
 end←if文終結。if文の一部であることを示すために1段下げ
for j=1 to 100
 if a then←for文内部あることを示すために1段下げ
  elseif b then ←if文の一部であることを示すために1段下げ
  else     ←同上
  end      ←同上if文の終結
  end←for文の終結。for文の一部であることを示すために1段下げ

一段下げたものは上位の文の一部であることがわかるようにしたいのです。

よろしくお願いします。

[ ]
RE:34346 アウトライン解析No.34347
matushiro97 さん 15/08/03 19:52
 
とうこうしたらインデントが消えました。うまくいきません。

[ ]
RE:34347 アウトライン解析No.34349
秀丸担当 さん 15/08/04 09:32
 

この会議室はタブ文字が入力されると半角空白に自動変換されていました。
半角空白としてもインデントされていることはわかりました。
一部全角空白があったりずれていると思わしきところを直してみて、視覚的に見
えるように「□」で表現すると以下のようなことかと思います。

if a then
□b
□for i=1 to 10
□□c
□end
else
□d
end

for j=1 to 100
□if a then
□□x
□elseif b then
□□y
□else
□□z
□end
end


これを、前のコメントのように設定すると、アウトライン解析は以下のようにな
ります。
これが言われていることに近い気がするのですが、どうでしょうか。

[-]if a then
│[-]for i=1 to 10
││└end
│├else
│└end
[-]for j=1 to 100
 [-]if a then
 │├elseif b then
 │├else
 │└end
 └end

[ ]
RE:34349 アウトライン解析No.34350
matushiro97 さん 15/08/04 10:14
 
ありがとうございます。まさしくこの通りです!!

アドバイス内容通りにやってみます。

結果は後日報告します。

[ ]
RE:34350 アウトライン解析No.34362
matushiro97 さん 15/08/04 19:37
 
次のコードですとうまくいきません
for i=1 :100
    if a then
       x
    elseif b then
       y
    else
       z
    end
    w
end  

アウトライン解析では
for i=1:100
  if a
    elseif b
      else← ここと
        end←ここは上のelseifと同じレベルにしたい。
  end

設定はすべて、行頭の文字列、インデントでレベルを決める=Onとしました。

あと、定義文字列の前のレベルは勝手に一つずつ増加しますが設定はまちがっていな
いでしょうか?

[ ]
RE:34362 アウトライン解析No.34364
h-tom さん 15/08/04 21:56
 

h-tom です。

>あと、定義文字列の前のレベルは勝手に一つずつ増加しますが設定はまちがっていな
>いでしょうか?
レベルが変わるって事は、アウトラインのレベルも変わっている事になります。

担当さんが、
>インデントのみで、インデントが同じであればツリー構造も同じにする場合、
>「1つ上の定義と同じレベルとして定義」もONにします。
といっていますので、その辺りの設定を確認してください。

[ ]
RE:34364 アウトライン解析No.34365
秀丸担当 さん 15/08/05 13:53
 

h-tomさんも言われる通り、各定義の「オプション(O)>>」ボタンを押して「1つ
上の定義と同じレベルとして定義」をONにしたりOFFにしたりする必要がありま
す。
レベルの表示は1,2,3,4ではなく1と2だけになるようにします。

 LV  種類         内容
 1   行頭の文字列 for
     行頭の文字列 if  (1つ上の定義と同じレベルとして定義=ON)
 2   行頭の文字列 else (1つ上の定義と同じレベルとして定義=OFF)
     行頭の文字列 end  (1つ上の定義と同じレベルとして定義=ON)

[ ]
RE:34365 アウトライン解析No.34366
matushiro97 さん 15/08/05 18:58
 
1つ上の定義と同じレベルとして定義」や「↑(U)↓(D)」の意味が分からなかったの
ですが、ようやく意味がわかりました。

希望通りの表示ができました。
ありがとうございました。

[ ]