Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    script di ordinamento array

    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
    san imente saluta

    * http://simonecingano.it *

  2. #2
    Moderatore di ASP e MS Server L'avatar di Roby_72
    Registrato dal
    Aug 2001
    Messaggi
    19,559
    Era ora che facessi qualcosa di utile....

    Grande imente!

    Roby

  3. #3
    ora poi comincio a postare un po' di vere pillole, in particolare sulle regular expression, e su un po' di cosette che ho in testa da un po', ma volevo formalizzare

    thanks mod
    san imente saluta

    * http://simonecingano.it *

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.