Valore successivo in una lista valori  Risolto!

E' l'area in cui è possibile condividere funzioni personalizzate nate dalla creatività e l'esperienza degli sviluppatori FileMaker

Moderatore: Moderatori

Rispondi
Thomas

Valore successivo in una lista valori  Risolto!

Messaggio da Thomas » domenica 12 marzo 2006, 20:03

Non ho trovato una funzione esistente per trovare il valore successivo in una lista valori. Beh, mi sono detto, faccio una funzione personalizzata. Eccovela:

Nome funzione: ValoreSuccessivo (ValoreAttuale; ListaValori)

Parametri:
ValoreAttuale: il valore attuale della lista per il quale si vuole trovare il successivo
ListaValori: il nome della lista valori definita nel DB attuale

Funzione:
Consenti([ElementiLista=ElementiListeValori(Get(NomeFile);ListaValori) & "¶";
pos=Posizione(ElementiLista;ValoreAttuale & "¶";1;1);
primo=Posizione(ElementiLista;"¶";pos;1);
secondo=Posizione(ELementiLista;"¶";pos;2)];
If(primo > 0 and secondo > 0;Mezzo(ElementiLista;primo+1;secondo-primo-1);
If(primo > 0 and secondo = 0;Sinistra(ValoriaSinistra(ElementiLista;1);Lunghezza(ValoriaSinistra(ElementiLista;1))-1);"")))

Esempio:
Lista valori = (Resoconto¶Resoconto esteso¶Giornale¶Riassunto¶Dettaglio)
Valore attuale = "Giornale"

ValoreSuccessivo ("Giornale",Lista valori) = "Riassunto"

Valore attuale = "Dettaglio"

ValoreSuccessivo ("Dettaglio",Lista valori) = "Resoconto"

In altre parole, la funzione è circolare.

Spero che serva a qualcuno!
Buon lavoro.
(NB: FM 8 Pro advanced)

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » martedì 14 marzo 2006, 19:05

Ciao, Ospite

e benvenuto nel Forum delle funzioni personalizzate ! :D

Spero che continuerai a frequentare questo sito, magari registrandoti...
perchè almeno potremo scambiarci delle idee !

La tua funzione, non essendo ricorsiva, può benissimo essere usata come calcolo... e io lo vedrei meglio così:

Codice: Seleziona tutto

Consenti ([
ElementiLista = ElementiListeValori ( Get ( NomeFile ) ; "lista" ); 
pos = ConteggioValore ( Sinistra ( ElementiLista ; Posizione ( ElementiLista ; valoreAttuale ; 1 ; 1 ) ) )
];
Casi(
pos = ConteggioValore ( ElementiLista ) ; CercaeSost (ValoriaSinistra ( ElementiLista ; 1 ); ¶ ;"" );
CercaeSost ( ValoriinMezzo ( ElementiLista ; pos + 1 ; 1 ) ; ¶ ; "" )
)
)
Ultima modifica di raybaudi il mercoledì 15 marzo 2006, 11:10, modificato 1 volta in totale.
Raybaudi FMP 12 Adv. Windows XP SP3

Thomas

Messaggio da Thomas » martedì 14 marzo 2006, 22:57

Grazie, si impara sempre qualcosa. Nel mio esempio ho lavorato con le funzioni testo fin quasi alla fine, mentre tu sei passato subito ai valori, utilizzando le funzioni di testo solo per ridurre la lista valori fino al valore trovato. Avevo visto la funzione ConteggioValori, ma ero fissato sull'idea che questa funzione mi avrebbe sempre dato il totale dei valori della lista, non vedendo che la lista poteva essere "accorciata".
Comunque la uso come funzione personalizzata, perché è generica e quindi indipendente dalla lista valori e inoltre è comoda per definire dei pulsanti.
Cari saluti.
Thomas

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » martedì 14 marzo 2006, 23:52

Thomas ha scritto:...Comunque la uso come funzione personalizzata, perché è generica e quindi indipendente dalla lista valori e inoltre è comoda per definire dei pulsanti.
Non avrai mica pensato ad una critica sull'uso di questo calcolo come funzione personalizzata ?

Non certo da me, che ne sono un appassionato, verrebbe una tale critica !

Ho voluto solo rimarcarne la non ricorsività e quindi il possibile suo uso anche da parte di chi non abbia la versione 8 Advanced o 7 Developer :wink:

Tornando alla funzione il mio primo pensiero, proprio perchè si trattava di estrarre un elemento (valore) da una lista, è stato l'uso delle funzioni relative ai valori.

Invece non ho ben capito il possibile utilizzo...hai accennato ai pulsanti...parlamene ancora :)
Raybaudi FMP 12 Adv. Windows XP SP3

Thomas

Messaggio da Thomas » giovedì 16 marzo 2006, 21:54

È vero, l'uso dei pulsanti apparentemente è misterioso, visto che ci sono i menu a tendina, i pulsanti a opzione o le caselle di controllo per selezionare i valori di una lista.

Però, nella mia applicazione uso una piccola finestra con un formato apposito per scegliere le opzioni di una ricerca: ci troviamo dunque nel modo "Trova". In questa modalità possiamo senz'altro introdurre valori nei campi normali che verranno utilizzati per la ricerca (che scatta con un pulsante definito con l'azione "continua lo script").

Cosa fare con altri parametri che controllano ad esempio il formato della lista che viene allestita con i record trovati nella ricerca? Ho scelto di introdurre questo parametro con un campo "globale" che per controllo dell'utente viene visualizzato nella finestra come gruppo di pulsanti ad opzione. Nel modo "Trova" non è però possibile modificare un campo globale, mentre viene visualizzato correttamente con il valore attuale.

Ho quindi definito un pulsante con l'azione "Definisci il campo". Nel risultato calcolato di questo campo ho inserito la funzione descritta [ValoreSuccessivo (ValoreAttuale; ListaValori)]. Premendo il pulsante, l'opzione prescelta si sposta avanti di un valore, arrivati in fondo alla lista si ricomincia da capo. In questo modo si può modificare un campo globale anche nel modo "Trova".

Non so se è una soluzione elegante, tuttavia funziona e per gli utilizzatori è semplice da capire e applicare. :wink:

Scusami: non ho pensato agli utilizzatori senza la possibilità di definire le funzioni. In questo caso si può risolvere il problema analogamente, ma nel risultato calcolato di "Definisci il campo" - come giustamente segnalato da te - si inserisce direttamente il calcolo e non la funzione, avendo però cura di adattare di volta in volta i riferimenti alle liste e alle variabili anche all'interno del calcolo stesso.

Colgo l'occasione per fare un po' di pubblicità per la versione 8 advanced (visto che dal tuo piè di pagina si potrebbe intuire che utilizzi FM 7 Developer): più di una novità facilita di molto il compito del programmatore. Ad esempio il visualizzatore di dati permette di verificare il contenuto dei campi e delle variabili in ogni momento. Particolarmente interessante è l'uso nel modo debug di uno script. :D

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » venerdì 17 marzo 2006, 9:23

Thomas ha scritto:Non so se è una soluzione elegante, tuttavia funziona e per gli utilizzatori è semplice da capire e applicare. :wink:
Invece è una soluzione ingegnosa... appena ho un pò di tempo la provo !
Thomas ha scritto:Colgo l'occasione per fare un po' di pubblicità per la versione 8 advanced (visto che dal tuo piè di pagina si potrebbe intuire che utilizzi FM 7 Developer): più di una novità facilita di molto il compito del programmatore. Ad esempio il visualizzatore di dati permette di verificare il contenuto dei campi e delle variabili in ogni momento. Particolarmente interessante è l'uso nel modo debug di uno script. :D
so di tutte le meraviglie della nuova versione... sto tuttavia ancora aspettando prima dell'Upgrade... (e spero in qualche offerta dell'ultimo minuto!) :wink:
Raybaudi FMP 12 Adv. Windows XP SP3

Rispondi