Newsgroup: it.comp.appl.access
Titolo: Selezionare file in base al nome.

In una cartella vengono salvati dei file con dati relativi a determinati
mesi dell'anno, e dovrebbero avere nomi come: 201306.xlsx per giugno 2013,
201401.xlsx per gennaio 2014, e via dicendo.
Siccome in quella cartella potrebbero essere file di altro genere, vorrei
scorrere i nomi e caricare in un elenco solo quelli che hanno un nome
"giusto".
Per la routine che scorre i file, li copia, li macella, scrive tabelle e
ricette, non ho problemi, avendo a suo tempo scopiazzato il codice utile
(che farei senza di voi?...), ma resta il problema:
 
come faccio a spiegare che i nomi devono essere di 6 cifre, di cui le
ultime due da 01 a 12?
 
Grazie a tutti
 
-- 
Riccardo Baldinotti
http://riccardobaldinotti.wordpress.com
 
http://rikky.netii.net
 
 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it
 
 
 

 ultime due da 01 a 12?
 
cicli la directory, passi il nome file a una variabile, e ne fai il pharse:
 
Es. 201001.xlxs
 
'CONTA NUMERO CARATTERI DEL NOME
len(nomefile) 'deve essere = a 11
 
'ANNO
int(left(nomefile,4)) 'deve essere l'anno
 
'MESE
int(mid(nomefile,5,2))<13 ' deve essere il mese inferiore a 13
int(mid(nomefile,5,2))>0 ' deve essere il mese superiore a 0
 
-- 
------------
Pablitomf
Napoli sempre nel "Q"uore!
"mammasantissima" si nasce, non si diventa.
 
TheSpaceCowboy : 
Britos deve recuperare per arrivare in forma al prossimo
infortunio - 24/10/12
 

 int(mid(nomefile,5,2))>0 ' deve essere il mese superiore a 0
 
Intanto, complimenti per la velocità!
Ecco, io vorrei che il programma mi mostrasse, come risultato, l'elenco
degli anni/mesi presenti, quindi non so a priori se ci sarà un file
201401, e poi potrebbe esserci un file di nome casino.xlsx; come faccio a
spiegare che "casi" non è un anno, ma possono esserlo 2014,2015,2016 e via
così finché il programma sarà usato? A meno di mettere tutti i possibili
anni in una tabella comparativa, ma mi sembra poco elegante.
Stimolato però dal suggerimento, ho preparato una cosa così:
        Stri = Mid(NomeFile, 5, 2)
        If IsNumeric(Stri) Then
            u = CInt(Stri)
            If IsNumeric(Left(NomeFile, 4)) And u > 0 And u < 13 Then
..e qui faccio le mie operazioni...
            End If
        End If
Quella seconda If, lo ammetto, non è il massimo della raffinatezza.
Grazie ancora


 Grazie ancora
 
Crea una Tabella:
tbl_Directory
con un campo ID e un campo NomeFile
 
 
poi fai partire questo codice che cicla la cartella e ti porta i nomi file
nella taballa... 
 
 
Dim myPath As String
Dim myName As String
 
myPath = "c:\MiaDir\"
myName = Dir(myPath, vbDirectory)
 
'CANCELLA CONTENUTO CARTELLA
DoCmd.SetWarnings False
    DoCmd.RunSQL "DELETE * From tbl_Directory"
DoCmd.SetWarnings True
 
 
'CICLA CONTENUTO CARTELLA
Do While myName <> ""
    If myName <> "." And myName <> ".." Then  'controllo per escludere gli
oggetti . e .. di una cartella
        DoCmd.SetWarnings False
            DoCmd.RunSQL "INSERT INTO tbl_Directory ( NomeFile ) SELECT '" &
myName & "' AS NomeFile;"
        DoCmd.SetWarnings True
    End If
    myName = Dir  'si sposta sul file successivo
Loop
 
 
e dopo... 
 
un bel SQL
 
SELECT Len([NomeFile]) AS MISURA, Left([NomeFile],4) AS ANNO,
Int(Mid([NomeFile],5,2)) AS MESE
FROM tbl_Directory
WHERE (((Len([NomeFile]))=11));


 ha scritto: > > > > In una cartella vengono salvati dei file con dati relativi a determinati > > > mesi dell'anno, e dovrebbero avere nomi come: 201306.xlsx per giugno 2013, > > > 201401.xlsx per gennaio 2014, e via dicendo. > > > Siccome in quella cartella potrebbero essere file di altro genere, vorrei > > > scorrere i nomi e caricare in un elenco solo quelli che hanno un nome > > > "giusto". > > > Per la routine che scorre i file, li copia, li macella, scrive tabelle e > > > ricette, non ho problemi, avendo a suo tempo scopiazzato il codice utile > > > (che farei senza di voi?...), ma resta il problema: > > > > > > come faccio a spiegare che i nomi devono essere di 6 cifre, di cui le > > > ultime due da 01 a 12? > > > cicli la directory, passi il nome file a una variabile, e ne fai il pharse: > > > Es. 201001.xlxs > > > 'CONTA NUMERO CARATTERI DEL NOME > > len(nomefile) 'deve essere = a 11 > > > 'ANNO > > int(left(1nomefile,4)) 'deve essere l'anno > > > 'MESE > > int(mid(nomefile,5,2))<13 ' deve essere il mese inferiore a 13 > > int(mid(nomefile,5,2))>0 ' deve essere il mese superiore a 0 > > Intanto, complimenti per la velocità! > Ecco, io vorrei che il programma mi mostrasse, come risultato, l'elenco > degli anni/mesi presenti, quindi non so a priori se ci sarà un file > 201401, e poi potrebbe esserci un file di nome casino.xlsx; come faccio a > spiegare che "casi" non è un anno, ma possono esserlo 2014,2015,2016 e via > così finché il programma sarà usato? A meno di mettere tutti i possibili > anni in una tabella comparativa, ma mi sembra poco elegante. > Stimolato però dal suggerimento, ho preparato una cosa così: > Stri = Mid(NomeFile, 5, 2) > If IsNumeric(Stri) Then > u = CInt(Stri) > If IsNumeric(Left(NomeFile, 4)) And u > 0 And u < 13 Then > ...e qui faccio le mie operazioni... > End If > End If > Quella seconda If, lo ammetto, non è il massimo della raffinatezza. > Grazie ancora Crea una Tabella: tbl_Directory con un campo ID e un campo NomeFile poi fai partire questo codice che cicla la cartella e ti porta i nomi file nella taballa... Dim myPath As String Dim myName As String myPath = "c:\MiaDir\" myName = Dir(myPath, vbDirectory) 'CANCELLA CONTENUTO CARTELLA DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * From tbl_Directory" DoCmd.SetWarnings True 'CICLA CONTENUTO CARTELLA Do While myName <> "" If myName <> "." And myName <> ".." Then 'controllo per escludere gli oggetti . e .. di una cartella DoCmd.SetWarnings False DoCmd.RunSQL "INSERT INTO tbl_Directory ( NomeFile ) SELECT '" & myName & "' AS NomeFile;" DoCmd.SetWarnings True End If myName = Dir 'si sposta sul file successivo Loop e dopo... un bel SQL SELECT Len([NomeFile]) AS MISURA, Left([NomeFile],4) AS ANNO, Int(Mid([NomeFile],5,2)) AS MESE FROM tbl_Directory WHERE (((Len([NomeFile]))=11)); -- ------------ Pablitomf Napoli sempre nel "Q"uore! "mammasantissima" si nasce, non si diventa. TheSpaceCowboy : Britos deve recuperare per arrivare in forma al prossimo infortunio - 24/10/12
 
Intanto chiedo scusa per il ritardo nella risposta, dovuto a disguidi inenarrabili, dopodiché un doveroso:
BACIO LE MEDAGLIE, COMANDANTE! (visto che Jo Condor è tornato di moda)
Riccardo Baldinotti

 Riccardo Baldinotti
 
presumo sia "la soluzione mi e' andata bene"? ;)
