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

Signaler
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
-
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

2 réponses

Messages postés
14734
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 septembre 2020
431
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"
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
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
Messages postés
14734
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 septembre 2020
431
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 ;)
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25 >
Messages postés
14734
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
10 septembre 2020

merci pour cette plaisenterie
Messages postés
1854
Date d'inscription
jeudi 23 mai 2002
Statut
Membre
Dernière intervention
24 juin 2018
25
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];
}