2016-12-05 2 views
1

Ich versuche den Maximalwert von 4 Split-Loops zu isolieren und habe das Rätsel bisher nicht gelöst.Max-Wert in mehreren Split-Loops finden

die Datensatzgruppe XlsRecWeeks kommt von einem Arbeitsblatt Feld Excel [Geplante Wochen] Wochennummern als Werte wie 6, 7 , 6-22, 9-12 enthält; 14-24

und so weiter, was entweder eine Woche, ein Zeitraum zwischen zwei Wochen oder sogar mehrere Perioden von mehreren Wochen in jedem Feld.

Ich habe es geschafft, die Felder in ein Array von einzelnen Wochen zu teilen, und ich muss die einzelne höchste Wochennummer aller Werte im resultierenden Array bestimmen.

Darf ich um einen Rat bitten?

Hier ist der Code so weit

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 

Antwort

1

Sie benötigen eine Variable (maxWeek) verwenden, um die maximale Wochennummer, zunächst auf niedrig gesetzt, und eine Funktion enthalten, was Woche Zahlen, die Sie aus den Daten erhalten zu vergleichen, um zu dieser Wert (checkMax). Sie müssen die Funktion nur aufrufen, wenn Sie eine neue Wochennummer erhalten, und am Ende des Vorgangs ist der Wert der Variable maxWeek die höchste Wochennummer im Datensatz. Sie könnten funky werden, indem Sie die Wochennummern in ein Array setzen und sortieren, aber das wäre zu viel für das, was Sie tun.

Einige Anmerkungen zur Vorsicht: 1) Der Code ist nicht getestet, aber es ist nicht schwer zu verstehen und Sie scheinen kompetent; 2) Beachten Sie, dass Sie die Funktion cInt() oder cLng() benötigen, um den Vergleich der Wochennummer als numerisch zu erzwingen - wenn Sie dies vernachlässigen, erhalten Sie ungerade Ergebnisse. 2) Ich habe den Code reformiert/eingerückt, aber die Logik ist wie Ihr Original - Sie werden feststellen, dass Ihr Code leichter zu lesen und weiterzugeben ist, wenn Sie ihn zur besseren Lesbarkeit formatieren und formatieren und zur Erläuterung kommentieren werde nie befördert, da das ganze Know-how bei dir ruht [Angenommen, du bist neu im Codieren - tut mir leid, wenn du predigst]

Edit: Fehler beim ersten Editieren - Ich habe das return verwendet, das ein ungültiges Verb in VBS ist. Wie jeder weiß, müssen Sie den Funktionsnamen so einstellen, als wäre es eine Variable, um einen Wert von einer Funktion zurückzugeben. CheckMax() -Funktion geändert.

Bearbeiten: Korrigierte Verwendung der Funktion val() zu cInt(). Die Funktion val() ist eine VB6-Funktion, die nicht nach VBS portiert wurde.

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

Dank VW, und ich schätze Ihre Kommentare - langsam Neuland bei der Codierung. Ich habe val() in Cint() geändert, aber ich kann nicht "return" verwenden - "Variable nicht deklariert" erhalten und der Versuch, response.write (currentMax) als Endwert aller verglichenen Spilts zu verwenden, ist leer. Was vermisse ich? – MortenWB

+0

@MortenWB Entschuldigungen gemacht eine Menge Javascript, wo Rückkehr erlaubt ist. Jetzt bearbeitet, um VBS zu korrigieren. Nur die checkMax-Funktion wurde geändert, also schneide einfach das aus. –

+0

super, danke! Der Code macht jetzt genau das Richtige, verwendet Cint() anstelle von val() und ist in der Lage zu response.write (maxWeek) wo nötig. Und keine Entschuldigung nötig - Sie waren sehr hilfreich. – MortenWB

Verwandte Themen