Page 1 sur 1

épurer une string, besoin d'aide !

Posté : 24 juin 2011, 10:25
par sohnyrin
Salut,

Alors je dois transformer un texte en termes, tout en nettoyant le contenu pour n'avoir que des termes valables.

Voilà où j'en suis, c'est un peu le boxon mais à force de tester plein de solutions différentes, disons que j'en ai eu mare de faire le ménage et je m'énerve...

        $terms=$this->data['Tablet']['translit'];
	$terms= str_replace(array('\r\n', '\r', '\n','\n\r', '  ','   ', ' \r',' \n', ' \r\n',' \n\r' ), ' ', $terms);

	$terms = trim($terms, chr(173));
	$terms=trim($terms);
	$terms = str_replace('/\s+/', ' ', $terms);
	
	$terms = explode(" ", $terms);

	$terms=array_map('trim', $terms);
	$anti_terms = array('@tablet','1.','2.','3.','4.','5.','6.','7.','7.','9.','10.','11.','12.','13.','14.','15.','16.','17.','18.','19.','20.','Rev.',
	'Obv.','@tablet','@obverse','@reverse','C1','C2','C3','C4','C5','C6','C7','C8','C9', '\r', '\n','\r\n', '\t',''. ' ', null, chr(173), 'x' );
	
	foreach($terms as $key => $term) {
		if(in_array($term, $anti_terms) || is_numeric($term)) {
			unset($terms[$key]);
			}
		}


En gros ça fonctionne mais je me retrouve avec des termes du genre
"mot 5."
dans le texte, c'était comme ça
bla bla bla mot
5. bla bla bla
Ça veux dire que je n'arrive pas à éliminer un retour à a la ligne... En général sur les autres lignes il y a un espace à la fin de la ligne ce qui fait que le début de l'autre ligne est automatiquement mis dans un autre élément de tableau.
Est-ce que c'est mon str_replace du début qui ne fonctionne pas ? ou il y a une autre manière d'indiquer un retour à la ligne et je pourrais régler en ajoutant un autre caractère à filtrer ?

Merci de m'aider :-)

Re: épurer une string, besoin d'aide !

Posté : 24 juin 2011, 10:41
par xTG
Ton premier str_replace ne supprime pas les retours à la ligne, il les remplace par des espaces.

Re: épurer une string, besoin d'aide !

Posté : 24 juin 2011, 11:04
par sohnyrin
Oui mais comme je fait mon array avec un explode sur les espaces, normalement ça devrait donner

array [] mot
array []5.

et ensuite j'enlève les éléments qui s'appellent "5."

c'est que dans un terme par exemple je peux avoir "lu2.ku6" c'est un terme mais comme il y a 2. dedans, je peux pas juste enlever tous les 2. dans le texte ... c'est les numéros pointés en début de colonne que je veux enlever uniquement !

Voici un texte :

Code : Tout sélectionner

Obv. C1 1. 2 u 5 aš tar.ku6 2. 1 šar2 2 geš’u 5 geš2 ubix.ku6 3. 5 u ba 4. 1 aš dug la2 2 diš sila3 i3-ku6 C2 1. ne-sag 2. 5 u tar.ku6 3. 1 šar2 6 geš2 3 u ubi2.ku6 4. 4 u ba 5. 1 u sila3 i3-ku6 Rev. C1 1. lugal-ša3-la2-tuku 2. šu-ku6 ab-ba-me 3. ku6 dusu 4. ezem še gu7 5. ezem munu4 gu7 6. dnanše-ka-kam 7. šu-ku6-ne C2 1. mu-de6 2. en-ig-gal 3. nu-banda3 4. e2-mi2-a 5. i3-kux 4 AŠxDIŠ
Voici les termes qui en ressortent :

Code : Tout sélectionner

u | aš | tar.ku6 | šar2 | geš’u | geš2 | ubix.ku6 | ba | dug | la2 | diš | sila3 | i3-ku6 | ne-sag | ubi2.ku6 | ba 5. | lugal-ša3-la2-tuku | šu-ku6 | ab-ba-me | ku6 | dusu 4. | ezem | še | gu7 | munu4 | dnanše-ka-kam | šu-ku6-ne | mu-de6 2. | en-ig-gal | nu-banda3 | e2-mi2-a | i3-kux | AŠxDIŠ
à noter que je veux "ba" seul, "dusu" seul et "mu-de6" seul...

est-ce que c'est un peu plus clair ?

Re: épurer une string, besoin d'aide !

Posté : 24 juin 2011, 11:44
par sohnyrin
Bon en fait... J'ai changé

Code : Tout sélectionner

$terms = str_replace('/\s+/', ' ', $terms);
pour

Code : Tout sélectionner

$terms = preg_replace('/\s+/', ' ', $terms);

et ça marche.. alors je vais enlever tout ce que j'ai ajouté qui enlève les espaces en trop pour rien...

youpi !