hbarquero Posted December 2, 2009 at 04:04 PM Report Share #298393 Posted December 2, 2009 at 04:04 PM Boas tardes, num projecto que estou a desenvolver tenho um cadeia de texto (nome de um curso), o qual estou a importar de uma tabela já existente. Umas das coisas que tenho de fazer é colocar as inicias de cada palavra em maiúscula, menos as chamadas stop words (e, de, a, etc...), essa parte esta feita. O meu problema neste momento é em detectar numeração Romana nessa mesma cadeia. Gostava de saber se alguém tem algo do género feito. Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
yoda Posted December 2, 2009 at 10:30 PM Report Share #298503 Posted December 2, 2009 at 10:30 PM Se entendi bem, o que tens de fazer é separar as palavras da string e criar um array com a numeração romana, que quando encontrada isolada como uma palavra, aplicas o que quiseres. before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
hbarquero Posted December 2, 2009 at 10:37 PM Author Report Share #298508 Posted December 2, 2009 at 10:37 PM Eu sei isso Yoda, a minha questão era mais se alguém já tinha feito algo parecido. Porque o criar de novo eu sei como fazer 🙂 Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
yoda Posted December 3, 2009 at 12:21 AM Report Share #298529 Posted December 3, 2009 at 12:21 AM Pelo google não vi nada, e duvido que alguém tenha feito isso (não é muito comum), pelo que se fizeres tu, deixa por aqui para ser inserido na wiki 🙂 before you post, what have you tried? - http://filipematias.info sense, purpose, direction Link to comment Share on other sites More sharing options...
hbarquero Posted December 3, 2009 at 09:35 AM Author Report Share #298538 Posted December 3, 2009 at 09:35 AM Por enquanto já tenho algo a funcionar. Fica aqui então o 1º exemplo, isto porque vou melhorar a função. Neste caso a função le palavra a palavra, e verifica se uma determinanda palavra tem so caracteres romanos, o que transforma em caractares maisuculos. A função tambem coloca todas as letras das palavras em minusculas, sendo que a primeira letra de cada palavra fica a maiscula, menos as tais chamanas StopWords. Como referi, vou ainda trabalhar nela, para detectar os numeros romanos em situações por exemplo (Curso de Programação-XX), neste caso, o numero esta metido na palvra (Programação-XX), falta criar um array com possiveis simbolos a inserir numa palavra, que antecedam um numero romano. aqui esta a 1ª função: function propercase($string) { /*stop words to put in lower case*/ $stop_words=array("e","de","um","uma","a","o"); /* Estas são apenas as de exemplo, há muitas mais*/ /*Roman LETERS*/ $roman=array("I","V","X","L","C","D","M"); /*set all words to lowercase and then put the 1st letter of all words in upercase */ $string=ucwords(mb_strtolower($string,"UTF-8")); /*explode the string to check for stop words*/ $strings=explode(" ",$string); $result=""; foreach ($strings as $indice=>$piece) { /*if found stop word in array put them in lowercase*/ if (in_array(mb_strtolower($piece,"UTF-8"),$stop_words)) { $result.=mb_strtolower($piece,"UTF-8"); } else { /*check if all the leters in the string are ROMAN*/ $valid=0; for ($i = 0; $i < strlen($piece); $i++) { if (in_array(mb_strtoupper($piece[$i]),$roman)) { $valid++; } } /*If all leteres are ROMAN set to Upercase*/ if ($valid==strlen($piece)) { $piece=mb_strtoupper($piece); } /*Add the result word to string*/ $result.=$piece; } /*Add withe space after each word*/ $result.=" "; } /*Return Result witout the last whitspace*/ return substr($result,0,-1); } Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 3, 2009 at 12:59 PM Report Share #298571 Posted December 3, 2009 at 12:59 PM Citando do site php.net (ver em http://www.php.net/manual/en/language.operators.array.php#46987) <?php function roman ($nr ) { $base_digits= array ( 1=> "I", 10=> "X", 100=> "C", 1000=> "M", ); $help_digits= array ( 5=> "V", 50=> "L", 500=> "D", ); $all_digits= $base_digits+ $help_digits; foreach ($base_digits as $key1=> $value1 ) foreach ($all_digits as $key2=> $value2 ) if ($key1< $key2 && $key1 >= ($key2 / 10)) $segments[$key2- $key1 ]= $value1. $value2; $segments+= $all_digits; krsort ($segments ); foreach ($segments as $key=> $value ) while ($key<= $nr ) { $nr-= $key; $str.= $value; } return $str; } ?> Usando a função acima ao gerar o array 🙂 <?php # Vamos criar um array de "randoms" com indices de 1 a 65 (Não existe 0 na numeração romana xD LOL) $novo_array = array(); for($contador=1;$contador<66;$contador++) $novo_array[roman($contador)] = mt_rand(); var_dump($novo_array); ?> Link to comment Share on other sites More sharing options...
mAiN_iNfEcTiOn Posted December 3, 2009 at 01:01 PM Report Share #298572 Posted December 3, 2009 at 01:01 PM Oh :x ignorem o meu post anterior... só depois é que li com mais atenção a dúvida... Anyway, fica aí o código 🙂 Mas já agora uma dúvida... Então quer dizer... Imagina que tenho a seguinte string: VIAGENS-XX ... VI é um número válido :|... Se todas as palavras obedecessem a um formato específico, bastava adicionar um parâmetro $format onde especificavas o formato que a string teria 😛 Link to comment Share on other sites More sharing options...
hbarquero Posted December 3, 2009 at 04:51 PM Author Report Share #298602 Posted December 3, 2009 at 04:51 PM VIAGENS-XX ... VI é um número válido :|... Nesse caso teria de ficar Viagens-XX, ou seja, o que eu já tenho feito neste momento verifica não só palavra a palavra, como vai separar cadeias de texto como a que acabas-te de colocar, exemplo (VIAGENS.XX ou mesmo VIAGENS,XX) ou seja, onde não haja espaços. A alteração para Numero Romanos, é feita se uma determinada palavra "XX", tiver apenas caracteres romanos, teoricamente será um numero. Não é 100% garantido, pois ainda estou a limar umas arestas na função que estou a fazer, mas assim que a tiver terminado coloco-a aqui completa. Tudo o que não provoca a minha morte, torna-me mais forte.http://formacao-cursos.com Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now