Titolo: InStrRev trova la prima posizione di una stringa partendo dalla fine
Categoria: Codice |
|
Ultimo Aggiornamento: 20/06/12 |
Come tutti sappiamo, la funzione Position() di 4D restituisce la posizione del primo carattere trovato, ma partendo da sinistra.
In giro ho trovato questo ciclo per trovare la posizione della prima occorrenza di una stringa inclusa in un'altra a partire dalla destra della stringa.
Un po come InStrRev di VB.
C_INTEGER($Pos;$start;$lengthfound;$Result)
C_TEXT($Temp)
// Ricava la path della cartella preferenze
// Replace string(... Aggiunge un Folder separator alla stringa ricavata:
// Se Folder separator esiste, sostituisce i due Folder separator risultanti con una stringa vuota
// Se Folder separator esiste, non fa' nulla
// In ogni caso la stringa ricavata non terminerà con Folder separator !
$Temp:=Replace string(Get 4D folder(Active 4D Folder)+Folder separator;Folder separator+Folder separator;"")
$Pos:=0
$start:=1
Repeat $Result:=Position(Folder separator;$Temp;$start;$lengthfound)
If ($Result#0)
$Pos:=$Result
End if $start:=$start+$lengthfound
Until ($Result=0)
<>g_PathPreferences:=Substring($Temp;1;Length(Substring($Temp;1;$Pos)))+Folder separator
Sicuramente funzionante ma, a mio avviso, un po' troppo 'contorta'.
Si puo' semplificare cosi:
C_TEXT($Temp)
C_INTEGER($Conta)
// Ricava la path della cartella preferenze
$Temp:=Replace string(Get 4D folder(Active 4D Folder)+Folder separator;Folder separator+Folder separator;"")
For ($Conta;Length($Temp);1;-1)
If (Substring($Temp;$Conta;1)=Folder separator)
$Temp:=Substring($Temp;1;$Conta)
$Conta:=1
End if End for <>g_PathPreferences:=$Temp+Folder separator
Oltre ad avere un codice piu' leggibile, abbiamo risparmiato tre righe di procedura (a parte le note) e dichiarato
due variabili contro cinque della procedura precedente.
Non è il massimo ...ma con la crisi che incombe, bisogna centellinare tutto.
Inviato da: Roberto Condorelli |
|
Visite: 12578 |
Se accedi con utente e password, puoi aggiungere dei commenti.