|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Feb 2006
Città: Mi sono perso nello spazio...
Messaggi: 119
|
[Visual Basic 6] Estrarre numeri da un array
Ciao a tutti
![]() Sarà semplice, sarà il caldo o forse la vecchiaia ma, è un po' che ci sto provando senza venire a capo di questo problema semplicissimo. ![]() Ho un'Array con sei numeri, (ma potrebbero essere molti di più) esempio: Array 1 9.13.14.15.16.17 vorrei trasferire nel secondo Array solo i numeri mancanti del primo, esempio: Array 2 10.11.12 Un grosso grazie a chi mi vorrà aiutare ![]()
__________________
Il miglior dialogo è l'intesa ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2007
Città: Catania
Messaggi: 840
|
Qualora gli array siano variant e sorted (come appare dal tuo esempio)
... Dim IndexArrayFrom as integer ... For IndexArrayFrom = 0 to UBound(vArrayFrom) sbLoadMissedValue(vArrayFrom(IndexArrayFrom),vArrayFrom(IndexArrayFrom+1),vArrayTo Next ... private sub sbLoadMissedValue(byval myStart as integer, byval myEnd as integer, byref myArrayTo as variant) dim myTempValue as integer myTempValue = myStart + 1 while myTempValue < myEnd myArrayTo.add myTempValue myTempValue = myTempValue + 1 wend end sub In tutti i casi il concetto è riapplicabile anche su tipi di dato diversi. Ciao.
__________________
Trattato positivamente con : daddyxx1, vale69, Ing_Peppe |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: Feb 2006
Città: Mi sono perso nello spazio...
Messaggi: 119
|
@ Key2710
anzitutto grazie per avermi risposto e proposto una soluzione ![]() Veramente la pensavo più semplice, ora proverò e ti farò sapere. Attualmente l'Array è Integer ma, ho provato anche con Variant senza risultati attendibili. Il mio procedimento: Avevo creato un ciclo For-Next dal 9 al 17 e confrontato ogni numero dell'Array 1 con il numero del ciclo For scartando i numeri uguali e aggiungendo i numeri differenti all'Array 2. L'idea poteva anche essere giusta ma, chissà perchè i conti non mi tornavano !!! ![]() Ciao e ancora grazie ![]()
__________________
Il miglior dialogo è l'intesa ![]() |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2007
Città: Catania
Messaggi: 840
|
Quote:
Inoltre a giudicare da quello che dici forse ho capito male io il problema. Quello che ho scritto io esamina i numeri presenti dentro un array1, attendendosi l'array1 già sorted ed infila dentro un array2 i buchi presenti dentro l'array1. Posta il codice da te sviluppato.
__________________
Trattato positivamente con : daddyxx1, vale69, Ing_Peppe |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Feb 2006
Città: Mi sono perso nello spazio...
Messaggi: 119
|
Ciao Key,
In modulo.bas Codice:
Public Numeri(6, 90) As Integer Public Pri(6) As Integer Public Ult(6) As Integer Public A(6) As Integer Public Ci1(6) As Integer Public Ci2(6) As Integer Public Fram(6) As Variant Public Cot(6) As Integer Public Ava(6) As Integer Codice:
Pri(1) = Memo(1, 1) ' Primo numero dell'array Memo(1, 1), "9" Ult(1) = Memo(1, Con(1)) ' Ultimo numero dell'array Memo(1, 6), "17" ' Array Memo = 9.13.14.15.16.17 Lista(1).Clear: Erase Cot() For Ci1(1) = Pri(1) To Ult(1) ' da 9 a 17 Fram(1) = Ci1(1) Cot(1) = Cot(1) + 1 A(1) = Memo(1, Cot(1)) For Ci2(1) = Pri(1) To Ult(1) If A(1) <> Ci2(1) Then ' confronta i numeri dell'Array con il ciclo For Ava(1) = Ava(1) + 1 ' Se differente incrementa Ava(1) Numeri(1, Ava(1)) = Ci2(1) ' e lo salva in Numeri() Lista(1).AddItem Numeri(1, Ava(1)) ' Visualizza in una ListBox Else End If Next Ci2(1) Next Ci1(1) L'output è: 10.11.12.13.14.15.16.17.9.10.11.12.13.14.15.16.17.9.10 ecc. Spero si possa capire il funzionamento ![]() ![]() Grazie Key ![]()
__________________
Il miglior dialogo è l'intesa ![]() |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: Feb 2006
Città: Mi sono perso nello spazio...
Messaggi: 119
|
Estrarre numeri mancanti da un'Array
A forza di tentarle tutte credo di averlo risolto così:
![]() Dopo averlo ottimizzato un pochino, comunque l'output è: 10.11.12 come desideravo. ![]() 'Numeri mancanti Codice:
' Dichiarazioni nel modulo bas Public Memo2(6, 90) As Integer Public MyArray(90) As Variant ' Nel Form Lista(1).Clear Pri(1) = Memo(1, 1) ' Primo numero della lista 1, "9" Ult(1) = Memo(1, Con(1)) ' Ultimo numero della lista 1, "17" Found = False: Erase Cont() For B1 = 1 To Con(1) ' La variabile Con() contiene il totale di numeri provenienti da una routine precedentemente elaborata. MyArray(B1) = Val(Memo(1, B1)) ' Trasferisce in MyArray() i dati di Memo() Next B1 ' For B2 = Pri(1) To Ult(1) Cerca = B2 Found = InStr(1, vbNullChar & Join(MyArray, vbNullChar) & vbNullChar, _ vbNullChar & Cerca & vbNullChar) > 0 If Found = True Then Found = False Else Cont(1) = Cont(1) + 1 Memo2(1, Cont(1)) = Cerca ' Popola Memo2() con i numeri mancanti Lista(1).AddItem Memo2(1, Cont(1)) ' Visualizza i numeri mancanti End If Next B2 ![]()
__________________
Il miglior dialogo è l'intesa ![]() Ultima modifica di © Rocky : 08-07-2010 alle 11:40. Motivo: Modifica codice |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:50.