Extraction de chaine de caractère [Résolu]

cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 22 nov. 2017 à 20:57 - Dernière réponse : cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention
- 7 déc. 2017 à 20:04
Bonsoir le forum,

Je dispose d'un fichier .cfg
define service{
	host_name				IGFRPA1BACKUP1
	service_description		C:
	_SERVICE_ID			192357
	;_CRITICALITY_NAME			
	_CRITICALITY_LEVEL			
	_CRITICALITY_ID			
	use				TPL_OS_WINDOWS_DISK_NSCLIENT
	contact_groups			ADNT
	_CRITICAL				95
	_WARNING				85
	_DISK				C
	_EQUIPE				ADNT
	notes				MOP0034
}



Via une RegEx, je souhaite récupérer toutes les variables _ (ex _DISK) et les formater d'une certaine façon.

Pour l'instant avec
		if (strpos($value, '	_') !== false && $hostname == $onehost) {
		
			$value = preg_replace("/^\s*_\s*/", "[", $value);

			$value = str_replace("\n","",$value); // suppression nouvelle ligne (\n)
			$value = str_replace("\r","",$value); // suppression retour-chariot (\r)
			
			 
			$keywords = preg_replace("/^\s*_\s*/", "[", $value);
			
			// ici je positionne un pipe pour check visuel début et fin de string
			echo ("<pre>"); print_r("|$keywords|"); echo ("</pre>");
			
			//$keywords = preg_split("/[\s,]+/", $keywords);
			$servicevar[] = $keywords;
		}

j'obtiens

|[SERVICE_ID			192357|

|[CRITICALITY_LEVEL			|

|[CRITICALITY_ID			|

|[CRITICAL				95|

|[WARNING				85|

|[DISK				C|

|[EQUIPE				ADNT|

Array
(
    [IGFRPA1BACKUP1] => Array
        (
            [0] => Array
                (
                    [service] => C:
                    [use] => TPL_OS_WINDOWS_DISK_NSCLIENT
                    [macros] => Array
                        (
                            [variables] => Array
                                (
                                    [0] => [SERVICE_ID			192357
                                    [1] => [CRITICALITY_LEVEL			
                                    [2] => [CRITICALITY_ID			
                                    [3] => [CRITICAL				95
                                    [4] => [WARNING				85
                                    [5] => [DISK				C
                                    [6] => [EQUIPE				ADNT
                                )

                        )

                )

        )

)


Je souhaiterai obtenir
                                    
[0] => Array
                (
                    [service] => C:
                    [use] => TPL_OS_WINDOWS_DISK_NSCLIENT
                    [macros] => Array
                        (
                            [variables] => Array
                                (
                                    [SERVICE_ID] => 192357
                                    [CRITICALITY_LEVEL] => ‘’
                                    [CRITICALITY_ID] => ‘’
                                    [CRITICAL] => 95
                                    [WARNING] => 85
                                    [DISK] => C
                                    [EQUIPE] => ADNT
                                )

                        )

                )


Je bute sur le remplacement de
|[SERVICE_ID			192357|
par
[SERVICE_ID] => 192357
ainsi que sur le remplacement de
CRITICALITY_LEVEL
par
[CRITICALITY_ID] => ‘’


Merci pour vos conseils,
jean-marc
Afficher la suite 

5 réponses

Répondre au sujet
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 22 nov. 2017 à 21:14
0
Utile
3
Salut,

est ce que ceci serait un début de réponse?
http://regexstorm.net/tester?p=%28%3f%3c%3d%5ct%29%5c%3b%3f_%28%3f%3cvariable%3e%5bA-Z_%5d%2b%29%5ct%2b%28%3f%3cvaleur%3e%5cw*%29&i=define+service%7b%0d%0a%09host_name%09%09%09%09IGFRPA1BACKUP1%0d%0a%09service_description%09%09C%3a%0d%0a%09_SERVICE_ID%09%09%09192357%0d%0a%09%3b_CRITICALITY_NAME%09%09%09%0d%0a%09_CRITICALITY_LEVEL%09%09%09%0d%0a%09_CRITICALITY_ID%09%09%09%0d%0a%09use%09%09%09%09TPL_OS_WINDOWS_DISK_NSCLIENT%0d%0a%09contact_groups%09%09%09ADNT%0d%0a%09_CRITICAL%09%09%09%0995%0d%0a%09_WARNING%09%09%09%0985%0d%0a%09_DISK%09%09%09%09C%0d%0a%09_EQUIPE%09%09%09%09ADNT%0d%0a%09notes%09%09%09%09MOP0034%0d%0a%7d&r=%5b%24%7bvariable%7d%5d+%3d%3e+%24%7bvaleur%7d


Clique sur l'onglet "Context"
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 22 nov. 2017 à 21:27
Bonsoir Whismeril,
Tu es meilleur que moi pour les recherches !!!
En effet, je suis allé, il y a 1h, sur "http://regexstorm.net/tester" pour tester
$tmp = preg_replace("/^\s*_\s*/", "", $line);
.
Le plus "dur" est d'écrire le pattern, je vais tester.
Merci et bonne soirée.

jean-marc
Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 22 nov. 2017 à 22:58
http://www.commitstrip.com/fr/2014/02/24/coder-on-the-verge-of-extinction/

Mais je ne te donnerais pas l'adresse de la colline ;)
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention > Whismeril 10526 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 13 décembre 2017 Dernière intervention - 22 nov. 2017 à 23:03
merci pour cette plaisenterie
Commenter la réponse de Whismeril
cs_JMO 1816 Messages postés jeudi 23 mai 2002Date d'inscription 7 décembre 2017 Dernière intervention - 7 déc. 2017 à 20:04
0
Utile
Bonsoir le Forum,

Retour tardif, problème résolu avec
$pattern = '/(?<=\t)\;?_(?<variable>[A-Z0-9_]+)\t+(?<valeur>[A-Za-z0-9- \/.!,#\t]+)/';

if  (strpos($value, '	_') !== false && $service_name_current === $service_use) {
	preg_match($pattern, $value, $array_var);	
	$array_var[1] = "\$_SERVICE$array_var[1]\$";
	if ($array_var[2] === "\t"){ // test si value vide donc tabulation
		$array_var[2] = "‘’"; 
	}	
	$service_var[$array_var[1]] = $array_var[2];
}
Commenter la réponse de cs_JMO

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.