Problem with loop

Discussion in 'ASP General' started by Kim, Dec 29, 2006.

  1. Kim

    Kim Guest

    Hi, why doesn't this work inside a loop, gives me the wrong "kontrollnummer"
    (increases it as the loop goes on)

    <%
    Dim kontrollnummer
    Dim raknare
    Dim Summa
    Dim referens
    referens = (rs_faktura.Fields.Item("customer_ID").Value) &
    (rs_faktura.Fields.Item("bill_ID").Value)

    Dim faktor
    faktor = 7

    For raknare = Len(referens) To 1 Step -1
    Summa = Summa + Mid(referens, raknare, 1) * faktor
    If faktor = 7 Then
    faktor = 3
    ElseIf faktor = 3 Then
    faktor = 1
    ElseIf faktor = 1 Then
    faktor = 7
    End If
    Next

    kontrollnummer = Right((10 - (Summa Mod 10)), 1)
    %>
    <%=kontrollnummer%>
     
    Kim, Dec 29, 2006
    #1
    1. Advertising

  2. Kim wrote:
    > Hi, why doesn't this work inside a loop, gives me the wrong
    > "kontrollnummer" (increases it as the loop goes on)
    >
    > <%
    > Dim kontrollnummer
    > Dim raknare
    > Dim Summa
    > Dim referens
    > referens = (rs_faktura.Fields.Item("customer_ID").Value) &
    > (rs_faktura.Fields.Item("bill_ID").Value)
    >
    > Dim faktor
    > faktor = 7
    >
    > For raknare = Len(referens) To 1 Step -1
    > Summa = Summa + Mid(referens, raknare, 1) * faktor
    > If faktor = 7 Then
    > faktor = 3
    > ElseIf faktor = 3 Then
    > faktor = 1
    > ElseIf faktor = 1 Then
    > faktor = 7
    > End If
    > Next
    >
    > kontrollnummer = Right((10 - (Summa Mod 10)), 1)
    > %>
    > <%=kontrollnummer%>


    Show us:
    1. what the inputs look like
    2. what the output is supposed to look like
    3. what the output you are actually getting looks like

    --
    Microsoft MVP - ASP/ASP.NET
    Please reply to the newsgroup. This email account is my spam trap so I
    don't check it very often. If you must reply off-line, then remove the
    "NO SPAM"
     
    Bob Barrows [MVP], Dec 29, 2006
    #2
    1. Advertising

  3. Kim

    Kim Guest

    > Show us:
    > 1. what the inputs look like
    > 2. what the output is supposed to look like
    > 3. what the output you are actually getting looks like


    Input looks like forinstance 42146 (customer id 42 & bill id 146). Based on
    this I need a check digit to the end at this 42146 that is calculated like:

    the digits to be verified are multiplied by the weights 7, 3, 1, 7, 3,1 .
    from the right to left. The multiplied sums are added up and the sum is
    subtracted from then nearest figure ending in zero. The resulting difference
    is the check digit which is entered as the last digit in the reference
    number. If the difference is 10, the check digit is 0.

    This is calculated properly by the code in my initial post if done once. But
    when I put this into a loop only the first time are calculated properly,
    thereafter the check digits turns out wrong.
     
    Kim, Dec 29, 2006
    #3
  4. Kim wrote:
    >> Show us:
    >> 1. what the inputs look like
    >> 2. what the output is supposed to look like
    >> 3. what the output you are actually getting looks like

    >
    > Input looks like forinstance 42146 (customer id 42 & bill id 146).
    > Based on this I need a check digit to the end at this 42146 that is
    > calculated like:
    > the digits to be verified are multiplied by the weights 7, 3, 1, 7,
    > 3,1 . from the right to left. The multiplied sums are added up and
    > the sum is subtracted from then nearest figure ending in zero. The
    > resulting difference is the check digit which is entered as the last
    > digit in the reference number. If the difference is 10, the check
    > digit is 0.
    > This is calculated properly by the code in my initial post if done
    > once. But when I put this into a loop only the first time are
    > calculated properly, thereafter the check digits turns out wrong.


    Again, please show us the inputs from say, the first three records, show us
    what the desired output is supposed to look like from those three pieces of
    data, and what you are actually getting. Looking at this, combined with your
    above description, will help us analyze your code and figure out the
    problem. A picture is worth a thousand words.


    --
    Microsoft MVP - ASP/ASP.NET
    Please reply to the newsgroup. This email account is my spam trap so I
    don't check it very often. If you must reply off-line, then remove the
    "NO SPAM"
     
    Bob Barrows [MVP], Dec 29, 2006
    #4
  5. Kim

    Kim Guest

    > Again, please show us the inputs from say, the first three records, show
    > us what the desired output is supposed to look like from those three
    > pieces of data, and what you are actually getting. Looking at this,
    > combined with your above description, will help us analyze your code and
    > figure out the problem. A picture is worth a thousand words.


    First record:
    input = 3295
    output= 32955 (ok)

    second record:
    input= 4296
    output= 42966 (false, should be 42961)

    third record:
    input= 6297
    output= 62976 (false, should be 62970)
     
    Kim, Dec 29, 2006
    #5
  6. Kim wrote:
    >> Again, please show us the inputs from say, the first three records,
    >> show us what the desired output is supposed to look like from those
    >> three pieces of data, and what you are actually getting. Looking at
    >> this, combined with your above description, will help us analyze
    >> your code and figure out the problem. A picture is worth a thousand
    >> words.

    >
    > First record:
    > input = 3295
    > output= 32955 (ok)
    >
    > second record:
    > input= 4296
    > output= 42966 (false, should be 42961)
    >
    > third record:
    > input= 6297
    > output= 62976 (false, should be 62970)


    OK, I'm back. I will play with this and get back to you.

    --
    Microsoft MVP - ASP/ASP.NET
    Please reply to the newsgroup. This email account is my spam trap so I
    don't check it very often. If you must reply off-line, then remove the
    "NO SPAM"
     
    Bob Barrows [MVP], Dec 29, 2006
    #6
  7. Kim wrote:
    >> Again, please show us the inputs from say, the first three records,
    >> show us what the desired output is supposed to look like from those
    >> three pieces of data, and what you are actually getting. Looking at
    >> this, combined with your above description, will help us analyze
    >> your code and figure out the problem. A picture is worth a thousand
    >> words.

    >
    > First record:
    > input = 3295
    > output= 32955 (ok)
    >
    > second record:
    > input= 4296
    > output= 42966 (false, should be 42961)
    >
    > third record:
    > input= 6297
    > output= 62976 (false, should be 62970)


    OK, I could not use a recordset of course, so I put your inputs into an array and ran your code to get your results. I then did this to help you see what was going on:
    <%
    Dim kontrollnummer
    Dim raknare
    Dim Summa
    Dim referens
    dim ar, i
    Dim faktor
    ar=array("3295","4296","6297")
    for i = 0 to 2
    referens = ar(i)
    faktor = 7
    Response.Write "<hr><b>" & referens & "</b><br>"
    Response.Write "<TABLE><tr><th>raknare</th><th>factor" & _
    "</th><th>Summa (pre)</th><th>Summa (post)</th></tr>"
    For raknare = Len(referens) To 1 Step -1
    Response.Write "<tr><td>" & raknare & "</td>"
    Response.Write "<td>" & faktor & "</td>"
    Response.Write "<td>" & Summa & "</td>"
    Summa = Summa + Mid(referens, raknare, 1) * faktor
    Response.Write "<td>" & Summa & "</td></tr>"

    If faktor = 7 Then
    faktor = 3
    ElseIf faktor = 3 Then
    faktor = 1
    ElseIf faktor = 1 Then
    faktor = 7
    End If
    Next
    Response.Write "</table>"
    kontrollnummer = Right((10 - (Summa Mod 10)), 1)
    Response.Write kontrollnummer & "<BR>"
    next

    %>
    Running this code yields this result:

    --------------------------------------------------------------------------------

    3295

    raknare factor Summa (pre) Summa (post)
    4 7 35
    3 3 35 62
    2 1 62 64
    1 7 64 85

    5


    --------------------------------------------------------------------------------

    4296

    raknare factor Summa (pre) Summa (post)
    4 7 85 127
    3 3 127 154
    2 1 154 156
    1 7 156 184

    6


    --------------------------------------------------------------------------------

    6297

    raknare factor Summa (pre) Summa (post)
    4 7 184 233
    3 3 233 260
    2 1 260 262
    1 7 262 304

    6

    As you should see from this, the problem is the failure to initialize Summa before each loop. Adding "Summa = 0" to the code, right below the "faktor=7" line yields the correct results:

    --------------------------------------------------------------------------------
    3295
    raknare factor Summa (pre) Summa (post)
    4 7 0 35
    3 3 35 62
    2 1 62 64
    1 7 64 85
    5

    --------------------------------------------------------------------------------
    4296
    raknare factor Summa (pre) Summa (post)
    4 7 0 42
    3 3 42 69
    2 1 69 71
    1 7 71 99
    1

    --------------------------------------------------------------------------------
    6297
    raknare factor Summa (pre) Summa (post)
    4 7 0 49
    3 3 49 76
    2 1 76 78
    1 7 78 120
    0




    --
    Microsoft MVP - ASP/ASP.NET
    Please reply to the newsgroup. This email account is my spam trap so I
    don't check it very often. If you must reply off-line, then remove the
    "NO SPAM"
     
    Bob Barrows [MVP], Dec 29, 2006
    #7
  8. Kim

    Kim Guest

    Oh man, that was an impressive answer. Not only did it work perfectly, it
    also helped me understand the problem. Thank you so much, Bob.
     
    Kim, Dec 29, 2006
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. =?Utf-8?B?VGltOjouLg==?=

    Loop the loop...

    =?Utf-8?B?VGltOjouLg==?=, Feb 16, 2005, in forum: ASP .Net
    Replies:
    2
    Views:
    1,392
    Karl Seguin
    Feb 16, 2005
  2. Steven

    while loop in a while loop

    Steven, Mar 24, 2005, in forum: Java
    Replies:
    5
    Views:
    2,256
    Tim Slattery
    Mar 30, 2005
  3. -
    Replies:
    12
    Views:
    701
    Remon van Vliet
    Jun 15, 2005
  4. Byte
    Replies:
    4
    Views:
    420
  5. Isaac Won
    Replies:
    9
    Views:
    397
    Ulrich Eckhardt
    Mar 4, 2013
Loading...

Share This Page