Newsgroup: it.comp.lang.visual-basic
Titolo: Aprire files in ordine

Ciao, sono in difficoltà perchè non riesco a trovare un sistema per 
leggere da un directory dei files secondo un determinato ordine. I file 
sono di questo tipo.
es:
00001234.001
00001234.002
00001235.001
00001235.002
00001235.003
00001236.001
ecc...
Non sono in grado di scrivere una routine che mi permetta di leggerli 
nell'ordine come nell'esempio qui sopra. Devo partire dal file con in 
numero nel nome più basso e numero nell'estensione più basso per poi 
salire a quelli con numero nell'estensione più alto fino a quando non ce 
ne sono più e passare al prossimo gruppo (dato da quelli con il numero 
nel nome progressivo al precedente.
In pratica il nome del file è il numero del gruppo (e nella directory non 
partono sempre da 00000001) e il numero nell'estensione indica il numero 
progressivo del documento del gruppo (non si conosce a priori quanti 
documenti ci sono in un gruppo)
Vi ringrazio immensamente se potete darmi una mano!
Ciao!
Davide

 leggere da un directory dei files secondo un determinato ordine.
dim vf(0 to 0)
f=dir("C:\cartella\0000*.*")
do
    if f="" then exit do
    redim preserve vf(0 to ubound(vf)+1)
    vf(ubound(vf))=f
    f=dir
loop
Poi ti ordini il vettore (dall'elemento 1 all'elemento ubound(vf))
con un metodo qualsiasi (come Bubble-Sort o Shell-Sort)

 wrote in message news:am7u3a$vog$1...@news.ngi.it...

Non capisco se il problema è che non sai quali file esistono realmente (dato
un algoritmo che ti dice i possibili nomi) oppure se semplicemente non sai
come farli ritornare (ordinati) da funzioni tipo Dir().
Nel primo caso, ti sconsiglio ovviamente di usare una tecnica tipo "per ogni
n.n verifica verifica se il file esiste", perchè dovrestoi fare svariati
miliardi di tentativi.
Se invece il tuo problema è come avere i file ordinati, non ti resta che
ottenere i nomi con Dir(), parcheggiarli in un array via via che li leggi e
alla fine fare un sort dell'array - considerato che non saranno davvero
miliardi di file, usando un banale shellsort l'intera procedura non dovrebbe
risultare neppure troppo lenta.
Es. (codice *non* provato):
dim File() as string, sFile as string, sPath as string
dim files as long
sPath="mypath\"
sFile = Dir(sPath & "*.*")
while len(sFile)
    if left(sFile, 1) <> "." then
        if (getattr(sPath & sFile) and vbdirectory) <> vbdirectory
            files = files + 1
            redim preserve File(1 to files)
            File(files) = sFile
        end if
    end if
    sFile = Dir()
wend
ShellSort File()
[qui hai la lista ordinata, sempreché i nomi siano a lunghezza fissa]
---------------
Sub ShellSort(sArray() As string)
   Dim lLoop1 As Long, lHold As Long, lHValue As Long
   Dim lLimit As Long, uLimit As Long, lStart As Long
   Dim lTemp As String
   lLimit = LBound(sArray)
   uLimit = UBound(sArray)
   lHValue = lLimit
   Do
      lHValue = 3 * lHValue + 1
   Loop Until lHValue > uLimit
   Do
      lHValue = lHValue / 3
      lStart = lHValue + lLimit
      For lLoop1 = lStart To uLimit
         lTemp = sArray(lLoop1)
         lHold = lLoop1
         Do While sArray(lHold - lHValue) > lTemp
            sArray(lHold) = sArray(lHold - lHValue)
            lHold = lHold - lHValue
            If lHold < lHValue Then Exit Do
         Loop
         sArray(lHold) = lTemp
      Next lLoop1
   Loop Until lHValue = lLimit
End Sub
--
rumplestiltskin

Vi ringrazio per l'aiuto!
Ciao!
Davide