Newsgroup: it.comp.lang.visual-basic
Titolo: for o do? problema ciclo!

non riesco a venirne fuori da sto benedetto loop! :-)
ho 3 array di: articoli,scatole,buste, come di seguito.
ARTICOLO     SCATOLE    BUSTE
pippo                    0                  200
pluto                     0                 2000
minnie               1200                250
pippo                   0                   100
in teoria devo scorrere per tutti gli articoli presenti nell'array
sArt(iNumRec)  e se trovo dei doppioni,farne la somma in modo da ottenere:
ARTICOLO     SCATOLE    BUSTE
pippo                    0                  300
pluto                     0                 2000
minnie               1200                250
mi sto inkasinando una cifra con i cicli!
ho inizializzato per prova degli altri array (uguail ai miei):
sArtConfr(iNumRec)
lTotScatoleConf(iNumRec)
lTotBusteConf(iNumRec)
per poter confrontare gli articoli e poi ho fatto un ciclo del genere:
ReDim Preserve sArtConfr(iNumRec)
iConta = 1
Do
    If sArtConfr(iConta) = sArt(iConta) Then
        MsgBox "sommo i tot"
    Else
         iConta = iConta + 1
         sArtConfr(iConta) = sArt(iConta - 1)
    End If
Loop While iConta <> iNumRec + 1
ma nn va! :-(((
provo con un ciclo for......
for iconta=1 to iNumRec+1
    if sArt(iconta)=sArtConfr(iconta) then
        MsgBox "sommo i tot"
    else
            ????
    end if
next iconta
scusate,mi sento tanto una super neofita!        sono fusa a qs ora!!!!!!!
ah.....dimenticavo,sto sviluppando in Embebbed per CE!
grazie
Beba

ah.....dimenticavo,sto sviluppando in Embebbed per CE!
  L'ora e' quella che e' comunque su due piedi mi pare che la tua
impostazione non possa funzionare perche' innanzitutto ti serve un
array che contenga si i nomi degli articoli ma ognuno deve essere
presente una ed una sola volta mentre mi pare che tu utilizzi un
doppione dell'array contenente gli articoli ma in numero variabile e
quindi al di la' della non correttezza dei tuoi tentativi mi pare che
ci sia quest'errore di fondo.
  Io creerei un array ex novo per tenere i dati finali e poi
comincerei una scansione dell'array esistente creando un nuovo
"record" ogni volta che trovo un prodotto non ancora inserito o
sommando la quantita' a quella presente se il "record" e' gia'
esistente nell'array dei dati finali. Certo, per ogni record
dell'array esistente dovrai riscandire quello nuovo per fare il
controllo di esistenza ma senza far ricorso a database (e non so cosa
ci sia nella versione embedded in questo senso) sul momento e a
quest'ora non mi viene in mente nulla di un po' piu' efficiente.
  Ciao :-)
  Massimo
  Nell'indirizzo, sostituire "micio" con "mc"

 Beba
 L'ho fatto direttamente mentre rispondevo al post provalo.
 E' con due array solamente e con uno nel quale memorizzo il risultato, è
solo a scopo dimostrativo per metterti sulla buona strada.
Naturalmente ho usato la sintassi del VB perchè non conosco "Embebbed" per
CE, quindi non so se la sintassi è uguale.
Ciao (segue codice)
Dim art(5) As String
Dim bart(5) As Integer
Dim tot(5) As String
Dim index As String
Dim s as Long
art(0) = "pippo"
art(1) = "pluto"
art(2) = "pippo"
art(3) = "pippo"
art(4) = "paperino"
art(5) = "pluto"
bart(0) = 10
bart(1) = 3
bart(2) = 5
bart(3) = 0
bart(4) = 2
bart(5) = 1
For i = 0 To 5
    If InStr(index, art(i)) = 0 Then
       s = 0
       index = index + art(i) + ";"
       For y = i To 5
           If art(i) = art(y) Then _
              s = s + bart(y)
 
       Next
       tot(i) = art(i) & ":" & s
    End If
 
Next
For i = 0 To 5
 If tot(i) <> vbNullString Then Print tot(i)
Next
--------------------------------
Inviato via 
http://usenet.libero.it

 ah.....dimenticavo,sto sviluppando in Embebbed per CE!
    Se in quel "mondo" esistono le classi...
Option Base 0
Option Compare Text
Option Explicit
Private Sub Main()
  Dim a_sArticoli()   As String
  Dim a_lScatole()    As Long
  Dim a_lBuste()      As Long
  Dim lIndex          As Long
  Dim oArticolo       As Progetto1.CArticolo
  Dim oVbaColArticoli As VBA.Collection
  ReDim a_sArticoli(3)
  ReDim a_lScatole(UBound(a_sArticoli))
  ReDim a_lBuste(UBound(a_sArticoli))
  lIndex = LBound(a_sArticoli)
  a_sArticoli(lIndex) = "pippo"
  a_lScatole(lIndex) = 0
  a_lBuste(lIndex) = 200
  lIndex = lIndex + 1
  a_sArticoli(lIndex) = "pluto"
  a_lScatole(lIndex) = 0
  a_lBuste(lIndex) = 2000
  lIndex = lIndex + 1
  a_sArticoli(lIndex) = "minnie"
  a_lScatole(lIndex) = 1200
  a_lBuste(lIndex) = 250
  lIndex = lIndex + 1
  a_sArticoli(lIndex) = "pippo"
  a_lScatole(lIndex) = 0
  a_lBuste(lIndex) = 100
  For lIndex = LBound(a_sArticoli) To UBound(a_sArticoli)
    Debug.Print _
      a_sArticoli(lIndex), a_lScatole(lIndex), a_lBuste(lIndex)
  Next
  Debug.Print
  Set oVbaColArticoli = New VBA.Collection
  For lIndex = LBound(a_sArticoli) To UBound(a_sArticoli)
    Set oArticolo = New Progetto1.CArticolo
    With oVbaColArticoli
      On Error Resume Next
      .Add oArticolo, a_sArticoli(lIndex)
      On Error GoTo 0
      With .Item(a_sArticoli(lIndex))
         .sArticolo = a_sArticoli(lIndex)
        .lScatole = .lScatole + a_lScatole(lIndex)
        .lBuste = .lBuste + a_lBuste(lIndex)
      End With
    End With
  Next
  For Each oArticolo In oVbaColArticoli
    With oArticolo
      Debug.Print .sArticolo, .lScatole, .lBuste
    End With
  Next
  Debug.Print
  Set oArticolo = Nothing
  Set oVbaColArticoli = Nothing
End Sub
    (Facci sapere se ed eventualmente come hai risolto. Grazie.)
--
Ciao :o)
Maurizio
--------
?SPQR(C)
 X
--------

 non riesco a venirne fuori da sto benedetto loop! :-)
Private Sub Form_Load()
'       Dimensiono i vettori
    Dim a(1 To 10)  'Articoli
    Dim s(1 To 10)  'Scatole
    Dim b(1 To 10)  'Buste
    Debug.Print
    Debug.Print "Dati Art/Scatole/Buste"
'       Carico i dati e li espongo
    For n = 1 To 10
        a(n) = CStr(Fix(n / 2)) 'Per "duplicare" articoli
        s(n) = n + 1
        b(n) = n + 2
        Debug.Print a(n) & vbTab & s(n) & vbTab & b(n)
    Next n
'       Preparo vettore per totali
    Dim at(1 To 10, 1 To 3)  '1=Articolo, 2=Scatole, 3=Buste
'       Azzero totali
    For n = 1 To 10
        at(n, 1) = ""
        at(n, 2) = 0
        at(n, 3) = 0
    Next n
'       Totalizzo
    uat = 0     'Ultimo articolo totalizzato
    For n = 1 To 10
        Do
            For nt = 1 To uat
                If at(nt, 1) = a(n) Then
                    at(nt, 2) = at(nt, 2) + s(n)
                    at(nt, 3) = at(nt, 3) + b(n)
                    Exit Do
                End If
            Next nt
            uat = uat + 1
            at(uat, 1) = a(n)
            at(uat, 2) = s(n)
            at(uat, 3) = b(n)
            Exit Do
        Loop
    Next n
'       Risultati
    Debug.Print
    Debug.Print "Totali Art/Scatole/Buste"
    For n = 1 To 10
        If at(n, 1) = "" Then Exit For
        Debug.Print at(n, 1) & vbTab & at(n, 2) & vbTab & at(n, 3)
    Next n
End Sub

     Se in quel "mondo" esistono le classi...
[...]
    Oppure:
Option Base 0
Option Compare Text
Option Explicit
Private Sub Main()
  Const c_lLen& = 3
  Dim a_sArticoli()   As String
  Dim a_lScatole()    As Long
  Dim a_lBuste()      As Long
  Dim a_lTotScatole() As Long
  Dim a_lTotBuste()   As Long
  Dim lIndex1         As Long
  Dim sFmt            As String
  Dim sIndex          As String
  Dim lPos            As Long
  Dim lIndex          As Long
  Dim lItem           As Long
  Dim a_sIndex()      As String
  ReDim a_sArticoli(3)
  ReDim a_lScatole(UBound(a_sArticoli))
  ReDim a_lBuste(UBound(a_sArticoli))
  lIndex1 = LBound(a_sArticoli)
  a_sArticoli(lIndex1) = "pippo"
  a_lScatole(lIndex1) = 0
  a_lBuste(lIndex1) = 200
  lIndex1 = lIndex1 + 1
  a_sArticoli(lIndex1) = "pluto"
  a_lScatole(lIndex1) = 0
  a_lBuste(lIndex1) = 2000
  lIndex1 = lIndex1 + 1
  a_sArticoli(lIndex1) = "minnie"
  a_lScatole(lIndex1) = 1200
  a_lBuste(lIndex1) = 250
  lIndex1 = lIndex1 + 1
  a_sArticoli(lIndex1) = "pippo"
  a_lScatole(lIndex1) = 0
  a_lBuste(lIndex1) = 100
  For lIndex1 = LBound(a_sArticoli) To UBound(a_sArticoli)
    Debug.Print _
      a_sArticoli(lIndex1), a_lScatole(lIndex1), a_lBuste(lIndex1)
  Next
  Debug.Print
  sFmt = String$(c_lLen, "0")
  For lIndex1 = LBound(a_sArticoli) To UBound(a_sArticoli)
    lPos = InStr(sIndex, ";" & a_sArticoli(lIndex1) & "|")
    If (lPos = 0) Then
      sIndex _
        = sIndex _
        & ";" & Format$(lIndex, sFmt) _
        & ";" & a_sArticoli(lIndex) _
        & "|"
      If (lIndex = 0) Then
        ReDim a_lTotScatole(lIndex)
        ReDim a_lTotBuste(lIndex)
      Else
        ReDim Preserve a_lTotScatole(lIndex)
        ReDim Preserve a_lTotBuste(lIndex)
      End If
      lItem = lIndex
      lIndex = lIndex + 1
    Else
      lItem = Mid$(sIndex, lPos - c_lLen, c_lLen)
    End If
    a_lTotScatole(lItem) = a_lTotScatole(lItem) + a_lScatole(lIndex1)
    a_lTotBuste(lItem) = a_lTotBuste(lItem) + a_lBuste(lIndex1)
  Next
  a_sIndex = Split(sIndex, "|")
  For lIndex1 = LBound(a_sIndex) To UBound(a_sIndex) - 1
    lItem = Mid$(a_sIndex(lIndex1), 2, c_lLen)
    Debug.Print _
        Mid$(a_sIndex(lIndex1), 3 + c_lLen) _
      , a_lTotScatole(lItem) _
      , a_lTotBuste(lItem)
  Next
  Debug.Print
End Sub


Lupo,Maurizio, ragazzi ma non avevte scritto un po troppo...?
Ciaooo


 Lupo,Maurizio, ragazzi ma non avevte scritto un po troppo...?
    :-)
    Meglio troppo che troppo poco, no?...


alla fine ho fatto cosi'....
               ReDim Preserve sArtConfr(iNumRec)    ....1 array = al mio di
articoli
               For iConta = 1 To iNumRec
                    For iContaB = 1 To iNumRec
                        If sArt(iConta) = sArtConfr(iContaB) Then
                            lTotScatole(iContaB) = lTotScatole(iContaB) +
lTotScatole(iConta)
                            lTotBuste(iContaB) = lTotBuste(iContaB) +
lTotBuste(iConta)
                            iNumRec = iNumRec - 1
                            Exit For
                        Else
                            If sArtConfr(iContaB) = "" Then
                                sArtConfr(iContaB) = sArt(iConta)
                                lTotScatole(iContaB) = lTotScatole(iConta)
                                lTotBuste(iContaB) = lTotBuste(iConta)
                                Exit For
                            End If
                        End If
                    Next iContaB
                Next iConta
l'unika kosa è che cmq se avevo 4 record iniziali ne ho ankora 4.......
ovvero ho:
articolo pippo con la somma giusta 300 (200+100)
articolo minnie con il valore di prima (nn sommato)
articolo pluto  con il valore di prima (nn sommato)
articolo pippo con il valore che è stato sommato (100)
dovrei ottenere solo i primi 3!
Grazie
Beba

 l'unika kosa č che cmq se avevo 4 record iniziali ne ho ankora 4.......
No, se azzeri il vettore di appoggio prima di ricavarne i totali, avrai sě 4
elementi, ma potrai testare quelli che sono "veri" in quanto contengono il
codice articolo. Vedi nel mio esempio quando espongo i risultati. Nel tuo
caso devi testare il valore di sArtConfr. se ="" indica elemento vuoto e
oltre non ve ne sono altri.
Io nell'esempio ho usaro uat per indicare l'ultimo elemento usato, nel tuo
devi trovare qualche artificio per "segnalare" il record "non valido" in
quanto giŕ totalizzato da altra parte

 articoli
 
  Ma questo Array con che cosa č inizializzato?
Ciao


 ha scritto nel messaggio
news:194Z185Z250Z2Y1...@usenet.libero.it...



 Guarda se puň esserti utile la mia soluzione postata piů in alto.


 ha scritto nel messaggio
news:194Z185Z250Z2Y1...@usenet.libero.it...
