spesso ci capita di dover ordinare liste di dati secondo criteri ben precisi...

per dare una mano a SMILE21 ho scritto un po' di codice, e mi sembra stupido che rimanga nei nostri PM e basta

smile21 ha un cartella con dei file che si chiamano

codice:
03_03_05Indoor_Club_final_rankings.pdf
04_10_04outdoor_club_venues,_dates_2005.pdf
05_10_04ExecmeetingSofia.pdf
07_03_05Change_EHF_Outdoor_Regulations.pdf
08_02_05_Nations_Championships_2005_-_WC_Qualifications.pdf
08_10_04Indoor_Nations_2006.pdf
09_02_05ExecmeetingZagreb.pdf
09_02_05Indoor_Hockey_Junior_Women_Championship_and_Trophy.pdf
09_12_04ProtocolAgreementwithAfrica2004.pdf
l'ordinamento era fatto secondo il FSO, e quindi in ordine alfabetico, e quindi ordinava come sopra...

a smile21 serviva fossero ordinati per la data indicata a inizio file...

ecco lo script che lo fa...

codice:
<%
'inizializzo le REGEXP (regular expression... ci serviranno per controllare se il file
'inizia, nel nome, con una data)
Dim Reg, tmp_elencofile, arr_file
Set Reg = New Regexp
Reg.IgnoreCase = True
Reg.Global = True
Reg.Pattern = "^\d\d[_]\d\d[_]\d\d"	'ovvero ^  = all'inizio
					'\d = numero (una cifra)
					'[_] = carattere "_"

Set file1 = CreateObject("Scripting.FileSystemObject")
Set file2 = file1.GetFolder(server.mappath("/bulletin/"))
Set file3 = file2.Files

'inizializza l'elenco dei file
tmp_elencofile = ""

For Each file in file3

	if Reg.test(file.name) then 'se il file inizia con una data
		
		'lo aggiunge all'elenco dei file, dividendo le stringhe dei nomi con il carattere "$"
		tmp_elencofile = tmp_elencofile & file.name & "$"
		
	end if

Next


'suddivide la stringa dell'elenco diviso da $ dei file in un array
arr_file = split(tmp_elencofile,"$")

'---ORDINO L'ARRAY------
' l'ordinamento dell'array è fatto in base alla data indicata a inizio del nome del file
dim ordflag, ordtmp, ordi
ordflag = true
do while ordflag
	ordflag = false
	for ordi = LBound(arr_file) to UBound(arr_file)-1
		if not trim(arr_file(ordi+1)) = "" then
			if cdate(replace(mid(arr_file(ordi),1,8),"_","/")) > cdate(replace(mid(arr_file(ordi+1),1,8),"_","/")) then
				ordtmp = arr_file(ordi)
				arr_file(ordi) = arr_file(ordi+1)
				arr_file(ordi+1) = ordtmp
				ordflag = true
			end if
		end if
	next
loop
'---FINE ORDINO L'ARRAY------

'stampa a schermo l'array ordinato nella maniera che serve
for i=0 to Ubound(arr_file)-1
	response.write arr_file(i) & "
"
next
%>
ci sono due conoscenze applicate...

la prima è REGULAR EXPRESSION
e la seconda (che non è una conoscenza, ma un algoritmo) è l'ordinamento dell'ARRAY

per le REGEXP (ne ho parlato spesso) esiste un mondo, quindi se non le conoscete studiatele, perchè davvero con le stringhe vengono molto utili (e io con WBSTAT http://www.imente.it/wbstat ci ho fatto un gran callo)

la parte VERDE è il PATTERN, ovvero ciò che deve cercare nella stringa...
il TEST è l'esecuzione della ricerca (TRUE se lo trova, FALSE se non lo trova)

per l'ordinamento invece... è un algoritmo RIUTILIZZABILE (ed è il motivo per cui ho fatto questo 3D)...

al posto della parte in ROSSO è possibile mettere qualsiasi condizione sulla stringa (in questo caso estrapola i primi 8 caratteri "00_00_00", scambia la "_" con una "/" "00/00/00", e trasforma il risultato in una data per fare il confronto"00/00/0000 00.00.00")

se usate ad esempio

codice:
'---ORDINO L'ARRAY------
' l'ordinamento dell'array è fatto alfanumericamente
dim ordflag, ordtmp, ordi
ordflag = true
do while ordflag
	ordflag = false
	for ordi = LBound(arr_file) to UBound(arr_file)-1
		if not trim(arr_file(ordi+1)) = "" then
			if lcase(arr(ordi))>lcase(arr(ordi+1)) then
				ordtmp = arr_file(ordi)
				arr_file(ordi) = arr_file(ordi+1)
				arr_file(ordi+1) = ordtmp
				ordflag = true
			end if
		end if
	next
loop
'---FINE ORDINO L'ARRAY------
ordinerà l'array in ordine ALFABETICO

basta dare un array che si chiama ARR_FILE prima di questo codice qui sopra..
e il risultato sarà ordinato

---

sperando che possa essere utile ad altri
saluti a tutti
(e scusate per la pessima scrittura di stasera...
sono un po' flippatino)

se avete domande o richieste per altri tipi di applicazioni son qui

ciao