Ho il numero e devo aggiungere il suffisso: "st", "nd", "rd", "th". Quindi per esempio: se il numero è 42 il suffisso è 'nd', 521 è 'st' e 113 è 'th' e così via. Ho bisogno di farlo in perl. Qualsiasi suggerimento.Come recuperare il suffisso ordinale di un intero in Perl (come st, nd, rd, th)
risposta
Prova questo:
my $ordinal;
if ($foo =~ /(?<!1)1$/) {
$ordinal = 'st';
} elsif ($foo =~ /(?<!1)2$/) {
$ordinal = 'nd';
} elsif ($foo =~ /(?<!1)3$/) {
$ordinal = 'rd';
} else {
$ordinal = 'th';
}
Usa Lingua::EN::Numbers::Ordinate. Dalla sinossi:
use Lingua::EN::Numbers::Ordinate;
print ordinate(4), "\n";
# prints 4th
print ordinate(-342), "\n";
# prints -342nd
# Example of actual use:
...
for(my $i = 0; $i < @records; $i++) {
unless(is_valid($record[$i]) {
warn "The ", ordinate($i), " record is invalid!\n";
next;
}
...
}
Prova questa breve subroutine
use strict;
use warnings;
sub ordinal {
return $_.(qw/th st nd rd/)[/(?<!1)([123])$/ ? $1 : 0] for int shift;
}
for (42, 521, 113) {
print ordinal($_), "\n";
}
uscita
42nd
521st
113th
C'è qualcosa che non capisco completamente qui. Perché un ciclo 'for' quando c'è un solo elemento come argomento? Potrebbe anche funzionare 'return int (shift). (qw/... '. Per molti parametri il ciclo' for' non funzionerebbe neanche a causa dell'istruzione 'return'. Funziona bene così com'è, ma mi sono perso qualcosa del ciclo? – Birei
@Birei: è solo un modo di mettere '$ _ [0]' in '$ _'. Il tuo modo non funzionerebbe in quanto l'espressione regolare ha bisogno che il valore sia in' $ _'. È molto simile alla nuova parola di lingua 'given' ma tu non posso usare questo come un modificatore di istruzioni come è possibile con 'for'. – Borodin
Ah, ok Grazie, non ho capito il punto di $ _ _. Merita un ** + 1 **. – Birei
Ecco una soluzione which I originally wrote for a code golf challenge, leggermente riscritto per conformarsi alle consuete buone pratiche per il codice non-golf :
$number =~ s/(1?\d)$/$1 . ((qw'th st nd rd')[$1] || 'th')/e;
Il modo in cui funziona è che l'espressione regolare (1?\d)$
corrisponde all'ultima cifra del numero, più la cifra precedente se è 1
. La sostituzione utilizza quindi la (e) cifra (e) corrispondente come indice alla lista (qw'th st nd rd')
, mappando da 0 a , da 1 a , da 3 a rd
e qualsiasi altro valore a undef. Infine, l'operatore ||
sostituisce undef con th
.
Se non ti piace s///e
, in sostanza la soluzione potrebbe essere scritta ad es. in questo modo:
for ($number) {
/(1?\d)$/ or next;
$_ .= (qw'th st nd rd')[$1] || 'th';
}
o come una funzione:
sub ordinal ($) {
$_[0] =~ /(1?\d)$/ or return;
return $_[0] . ((qw'th st nd rd')[$1] || 'th');
}
Un'altra soluzione (se mi piace le risposte preesistenti che sono indipendenti di utilizzare moduli migliore):
use Date::Calc 'English_Ordinal';
print English_Ordinal $ARGV[0];
- 1. formato python datetime con "st", "nd", "rd", "th" (suffisso ordinale inglese) come "S" di PHP
- 2. PHP data di conversione gg [th/st/rd]/mese/aaaa
- 3. Come aggiungere le abbreviazioni ordinali Formato fino alla data In iOS, ad es. "Th", "ST"
- 4. Come trasformare un numero (1,2,3, ecc.) In un numero ordinale (1 °, 2 °, 3 ° ecc.) Usando xslt
- 5. Ordinamento intero in Ruby/Rails
- 6. Come ottenere il tempo di calcolo in ND
- 7. Come faccio a produrre un formato di data come "1 novembre" in C#
- 8. Come creare un file di documentazione R (.Rd) in lattice?
- 9. come fare il numero di suffisso stringa
- 10. Come recuperare la larghezza del terminale in Perl?
- 11. Come formattare una data in ruby per includere "rd" come in "3rd"
- 12. più funzioni in un unico file .rd
- 13. Come recuperare intestazioni HTTP in perl quando si utilizza CGI
- 14. 'stringa' per [ 's', 'st',, 'stri' 'str', 'perl', 'stringa']
- 15. Conversione Android in formato ordinale
- 16. Come accedere alla documentazione di aiuto/documentazione .rd in R?
- 17. Come ottenere un intero da MySQL come intero in PHP?
- 18. Thymeleaf th: ogni filtrato con th: se
- 19. Esiste un modo in Java per convertire un intero nel suo ordinale?
- 20. Come imposto il valore predefinito di un intero in mongodb?
- 21. Come estrarre il segno di un intero in Ruby?
- 22. JSONP come recuperare il testo
- 23. Come recuperare il bundle onSaveInstanceState() in onResume()?
- 24. Che cos'è ST in PostGIS?
- 25. Come recuperare il testo di un nodo di testo DOM?
- 26. th: block e th: remove = "tag" aggiunta di spazi indesiderati
- 27. tela Immagine di ridimensionamento/scew/ND
- 28. Da ND ad array 1D
- 29. Come dividere un file usando un suffisso numerico
- 30. Come posso chiamare una funzione esportata usando il numero ordinale
Upvote per uso produttivo dell'affermazione elusiva di look-behind negativa a larghezza zero. Sebbene (purtroppo) come fa notare Bill Ruppert, esiste già un modulo CPAN. –
Anche se ci * è * una soluzione CPAN, mi piace anche questa. È ben congegnato, altamente leggibile, privo di dipendenze e preciso come la soluzione CPAN per qualsiasi intero. – DavidO