|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
VB6 array
come posso ottenere il numero di elemnti di un array?
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Con il metodo Ubound(nomeArray)
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino Ultima modifica di mynos79 : 24-06-2006 alle 16:07. |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Apr 2006
Messaggi: 194
|
Quote:
dim nomearray(9) as integer nomearray(0) = "var1" nomearray(1) = "var2" Ubound(nomearray) mi dara 9 e non 2 spero di essermi spiegato |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Che sappia io non c'è un metodo che restituisca il numero effettivo di elementi presenti in un array (o almeno non lo ricordo).
Quelle volte che mi serve faccio un ciclo for con un contatore che incremento in base che la posizione sia diversa da "" (in caso di array di stringhe) o 0 (in caso di array numerici).
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Oppure puoi adattarti dinamicamente l' array in base a quanti oggetti devi inserirci ...
Ad esempio se hai un array di 2 elementi e devi inserirne un altro, puoi usare i comandi: i = ubound(nomearray) redim preserve nomearray(i+1) così da ridimensionare l' array (redim) col numero di elementi che vuoi (in questo caso 1 in più di prima) e con la proprietà preserve mantieni gli elementi già presenti nelle loro posizioni. In questo modo puoi sempre sfruttare il metodo uboud(nomearray) per sapere l' ultimo indice, senza dover fare ogni volta un ciclo for e contare fino a quando non trovi posizioni "" o 0 (ma anche così può non funzionare, nel caso avessi proprio un oggetto di quei valori). Ho cercato nei vecchi manuali che usavo prima della certificazione ed in effetti consigliano l' uso del redim con o senza preserve (in base ai casi). Nel .net è stata aggiunta un proprietà che indica anche il numero di oggetti effettivamente presenti.
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
|
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Ops, mi sono confuso con la proprietà Lenght del vb.net ... ho avuto un lapsus, non riporta il numero effettivo di elementi, ma semplicemente la dimensione totale dell' array (in pratica ubound + 1).
Chiedo venia per l' ultima frase errata
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
|
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Ma se nell'array (dinamico) non c'è nulla come si fa? Se uso l'ubound mi da errore, non c'è un modo x sapere prima se c'è almeno un elemento nel vettore? A parte tenere un contatore..
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
else ubound(vettore) end if |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
No, per poter usare un array devi sempre e solo dichiararlo dicendogli anche quante posizioni deve avere.
Puoi cambiare poi la sua dimensione con l' istruzione redim, mentre se vuoi anche mantenere gli elementi che possiede, ci aggiungi la proprietà preserve. Quando dichiari un array (dimensionato con un tot di elementi): dim a(5) as integer il vb lo inizializza già con tutti gli elementi a 0 (se array numerico) o a "" (se stringa) ... quindi ubound funzionerà sempre ... però non sai quanti elementi effettivi ci sono dentro ... L' unica è costruirti una funzione apposita che te li calcola ... Puoi usare un trucchetto, mettere come ultimo elemento dell' array un terminatore (* o un simbolo che non userai mai) ... così quando cicli, conti la posizione del terminatore ... Purtroppo ... è così ...
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Aug 2004
Città: Provincia di Monza e Brianza
Messaggi: 6270
|
Giusto oggi ho creato un array 'infinito'
Dim matrice() as String Poi con un'istruzione Split l'ho popolata Matrice = Split (variabile, "\") dove variabile è così composta "C:\cartella\cartella2\cartella3" Con UBOUND vedi quanti elementi di questa matrice hai popolato. (praticamente mi ritorna 4, perchè ha gli elementi dallo 0 al 3 popolati).
__________________
AMD Ryzen 5 7600X - Dissipatore Thermalright Assassin King 120SE - RAM Kingston Fury Beast 2x16Gb DDR5 CL30 @ 6000 - Motherboard ASROCK B650 Pro RS - NVME Kingston KC3000 2Tb - PSU FSP Hydro PRO 600w - Win 11 PRO |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
No, vedi sempre la grandezza dell' intero array (o meglio l' indice dell' ultimo elemento (popolato o no) dell' array) ...
Split è una funzione particolare che ridimensiona il vettore iniziale in base a quanti spezzoni vengono restituiti ...
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Eh eh, io e Stiwy siamo sempre in sintonia
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Dec 2005
Messaggi: 611
|
Quote:
if vettore is nothing then |
|
|
|
|
|
|
#19 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Non mi funziona nessuna delle due, può essere che sia perchè le sto usando con un array di record?
|
|
|
|
|
|
#20 |
|
Senior Member
Iscritto dal: Jun 2005
Città: Mestre (VE)
Messaggi: 1415
|
Come ho spiegato nei primi post .. in vb6 quando si dichiara un array (con la dimensione), le varie posizioni vengono impostate coi valori "zero" del tipo di dato dell' array ...
Se è un array di numeri, vengono inizializzati a 0; se sono stringhe vengono inizializzati a "" ... lo stesso per array di altri tipi di dato ...
__________________
IN WIN 909 / AMD Ryzen 9 3950X / Gigabyte X570 Aorus Xtreme / 4x8gb G.Skill 3200 / Gigabyte Aorus RTX2080Ti Xterme / 2x Gigabyte Aorus NVMe M.2 1Tb / Corsair AX1200i / full liquid EK - Bitspower / circa 160 trattative nel mercatino |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:18.



















