2016-12-05 14 views
1

私は4つの分割ループから1つの最大値を分離しようとしており、これまでに謎を解明していません。複数の分割ループで最大値を見つけよう

レコードセットXlsRecWeeksは、 6のような値としてweeknumbersを含有するスケジュール週間] Excelワークシートフィールドから来る 7、 6-22、 9-12;ように14-24

と表します1週間、2週間の期間、または各フィールドの複数の期間の複数の期間であってもよい。

フィールドを1週間の配列に分割することができました。結果として得られる配列内のすべての値の単一の最も高い週番号を決定する必要があります。

私は助言を求めることができますか?

ここでのコードは、あなたがにデータから取得するものは何でも週番号を比較するために、最初は低く設定され、最大週数を格納するための変数(maxWeek)、および機能を使用する必要があり、これまで

do while not XlsRecWeeks.EOF 
    If not isnull(XlsRecWeeks("scheduled weeks")) Then 
    weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";") 
    if ubound(weekgroups) > 0 then 
    for each weekintervals in weekgroups 
    weekinterval=Split(weekintervals, "-") 
     if ubound(weekinterval)> 0 then 
     for weeknrs = weekinterval(0) to weekinterval(1) 
    Response.Write weeknrs & "<br />" 
    next 
     else 
    Response.Write weeknrs & "<br />" 
     end if 
next 
else 
    weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-") 
     if ubound(weekinterval)> 0 then 
     for weeknrs = weekinterval(0) to weekinterval(1) 
    Response.Write weeknrs & "<br />" 
     next 
     else 
    Response.Write XlsRecWeeks("scheduled weeks") & "<br />" 
     end if 
end if 
else 
end if 
XlsRecWeeks.movenext 
loop 

答えて

1

ですこの値(checkMax)。あなたがするのは、新しい週番号を得るたびに関数を呼び出すことです。プロセスの最後に、maxWeek変数の値がデータセット内の最も高い週番号になります。あなたは週の数字を配列に入れて並べ替えることでファンキーになるかもしれませんが、それはあなたがやっていることに対して過度のものになるでしょう。

注記の注意:1)コードはテストされていませんが、理解しにくく、有能なようです。 2)週番号の数値を強制的に数字にするためにcInt()またはcLng()関数が必要であることに注意してください。これを無視すると奇妙な結果が得られます。 2)コードを改訂/インデントしましたが、ロジックは元のものと同じです。読みやすくするためにスペースを入れて読みやすくするために、コードを読みやすくして渡すのが簡単です。あなたがすべてのノウハウがあなたに安らぎを与えられるように昇進しないでください。

編集:最初の編集でエラーが発生しました.VBSの無効な動詞であるreturnを使用しました。誰もが知っているように、関数から値を返すには、関数名を変数のように設定する必要があります。 CheckMax()関数が変更されました。

編集:val()からcInt()関数の使用を修正しました。 val()関数はVBSに移植されなかったVB6関数です。

dim maxWeek 
maxWeek = -1 
do while not XlsRecWeeks.EOF 
    If not isnull(XlsRecWeeks("scheduled weeks")) Then 
     weekgroups=Split(XlsRecWeeks("scheduled weeks"), ";") 
     if ubound(weekgroups) > 0 then 
      for each weekintervals in weekgroups 
       weekinterval=Split(weekintervals, "-") 
       if ubound(weekinterval)> 0 then 
        for weeknrs = weekinterval(0) to weekinterval(1) 
         Response.Write weeknrs & "<br />" 
         maxWeek = checkMax(Cint(weeknrs)), maxWeek)     
        next 
       else 
        weeknrs = weekinterval(0) 
        Response.Write weeknrs & "<br />" 
        maxWeek = checkMax(Cint(weeknrs)), maxWeek)     
       end if 
      next 
     else 
      weekinterval=Split(XlsRecWeeks("scheduled weeks"), "-") 
      if ubound(weekinterval)> 0 then 
       for weeknrs = weekinterval(0) to weekinterval(1) 
        Response.Write weeknrs & "<br />" 
        maxWeek = checkMax(Cint(weeknrs)), maxWeek)     
       next 
      else 
       Response.Write XlsRecWeeks("scheduled weeks") & "<br />" 
       weeknrs = XlsRecWeeks("scheduled weeks") 
       maxWeek = checkMax(Cint(weeknrs)), maxWeek)     
      end if 
     end if 
    end if 

    XlsRecWeeks.movenext 

loop 
' maxWeek now holds max week value.  

のResponse.Write(maxWeek)

function checkMax(theVal, currentMax) 

checkMax = currentMax 
if theVal > checkMax then 
    checkMax = theVal 
end if 

end function 
+0

おかげVW、と私はあなたのコメントに感謝 - ゆっくりコーディングで新境地を開拓しています。私はval()をCint()に変更しましたが、私は "return"を使うことはできません - "変数宣言されていません"を取得し、response.write(currentMax)への試みはすべてのspiltsの最終値として比較されます。何が欠けていますか? – MortenWB

+0

@MortenWB謝罪は、返品が許可されているところでたくさんのjavascriptをやっています。 VBSに修正するように編集しました。 checkMax関数だけが変更されたので、それをカット&ペーストします。 –

+0

スーパー、ありがとう!コードはval()の代わりにCint()を使用し、必要なところでresponse.write(maxWeek)できるようになりました。そして、謝罪は必要ありません。あなたはとても助けになりました。 – MortenWB

関連する問題