Extraire des sous chaines de caractères

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

ameni melki
Messages : 40
Enregistré le : 24 Fév 2021, 14:54

Extraire des sous chaines de caractères

Messagepar ameni melki » 04 Fév 2022, 10:29

Bonjour,

J'ai une variable avec des chaines de caractères, je cherche le code qui cherche un mot spécifique et quand il le trouve il prends tous les caractères qui viennent après.

Sous excel la fonction est la suivante: =DROITE(A2;NBCAR(A2)-CHERCHE("CRITERES_ATTRIBUTION";A2))

"ADRESSE"": "Route de la Base Aéronavale BP 569 Les Salines", "CORRESPONDANT": "M. MACALUSO Rémi", "CP": "20186", "TYPE": {""TECH": "}}]}}, "TYPE_ORGANISME": {"ETAT": "}, "PROCEDURE": {""NB_CANDIDATS": {"REDUCTION_PROGRESSIVE_NON": "}, ""TYPE_PROCEDURE": {"PROCEDURE_ADAPTE": ""}, "CRITERES_ATTRIBUTION": {"CRITERES_PONDERES": {""CRITERE": [{"#text": "Prix", ""@POIDS": "50"}, {"#text": "Valeur technique (Au regard du mémoire technique fourni par le candidat )", "@POIDS": "40"}, {"#text": ""Ecologique", "@POIDS": "10"}]}}}}


Je veux qu'il cherche le mot "CRITERES_ATTRIBUTION" et quand il le trouve il prends tous ce qui vient après jusqu’à la fin comme ça:

Code : Tout sélectionner

"CRITERES_ATTRIBUTION": {"CRITERES_PONDERES": {""CRITERE": [{"#text": "Prix", ""@POIDS": "50"}, {"#text": "Valeur technique (Au regard du mémoire technique fourni par le candidat )", "@POIDS": "40"}, {"#text": ""Ecologique", "@POIDS": "10"}]}}}}


Sur Rstudio j'ai trouvé ces codes qui ne donnent pas le résultat que je veux:

Code : Tout sélectionner

data$test <- str_extract(data$DONNEES, "CRITERES_ATTRIBUTION" )
ou

Code : Tout sélectionner

data$test <-str_subset(data$DONNEES, "[CRITERES_ATTRIBUTION]")


Est ce que vous avez une idée?

Merci beaucoup

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Extraire des sous chaines de caractères

Messagepar Pierre-Yves Berrard » 04 Fév 2022, 17:41

Utiliser un parser de json.
viewtopic.php?f=3&t=10501&p=48743#p48744
PY

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Extraire des sous chaines de caractères

Messagepar Mickael Canouil » 05 Fév 2022, 09:01

Bonjour,

le code n'est pas reproductible, et le résultat souhaité est obscure.

Code : Tout sélectionner

data$test <- str_extract(data$DONNEES"CRITERES_ATTRIBUTION" )
#> Error in str_extract(data$DONNEES, "CRITERES_ATTRIBUTION") : 
#>   could not find function "str_extract" 

La chaîne de caractères est comme Pierre-Yves l'indique du JSON, mais incomplète.

Code : Tout sélectionner

text <- '"ADRESSE"": "Route de la Base Aéronavale BP 569 Les Salines", "CORRESPONDANT": "M. MACALUSO Rémi", "CP": "20186", "TYPE": {""TECH": "}}]}}, "TYPE_ORGANISME": {"ETAT": "}, "PROCEDURE": {""NB_CANDIDATS": {"REDUCTION_PROGRESSIVE_NON": "}, ""TYPE_PROCEDURE": {"PROCEDURE_ADAPTE": ""}, "CRITERES_ATTRIBUTION": {"CRITERES_PONDERES": {""CRITERE": [{"#text": "Prix", ""@POIDS": "50"}, {"#text": "Valeur technique (Au regard du mémoire technique fourni par le candidat )", "@POIDS": "40"}, {"#text": ""Ecologique", "@POIDS": "10"}]}}}}'
jsonlite::fromJSON(text)
#> Error: parse error: trailing garbage
#>                            "ADRESSE"": "Route de la Base Aéronavale B
#>                      (right here) ------^   


Code : Tout sélectionner

text <- '"ADRESSE"": "Route de la Base Aéronavale BP 569 Les Salines", "CORRESPONDANT": "M. MACALUSO Rémi", "CP": "20186", "TYPE": {""TECH": "}}]}}, "TYPE_ORGANISME": {"ETAT": "}, "PROCEDURE": {""NB_CANDIDATS": {"REDUCTION_PROGRESSIVE_NON": "}, ""TYPE_PROCEDURE": {"PROCEDURE_ADAPTE": ""}, "CRITERES_ATTRIBUTION": {"CRITERES_PONDERES": {""CRITERE": [{"#text": "Prix", ""@POIDS": "50"}, {"#text": "Valeur technique (Au regard du mémoire technique fourni par le candidat )", "@POIDS": "40"}, {"#text": ""Ecologique", "@POIDS": "10"}]}}}}'

sub(
  ".*(CRITERES_ATTRIBUTION.*)",
  "\\1",
  gsub("\"", "", text)
)
#> [1] "CRITERES_ATTRIBUTION: {CRITERES_PONDERES: {CRITERE: [{#text: Prix, @POIDS: 50}, {#text: Valeur technique (Au regard du mémoire technique fourni par le candidat ), @POIDS: 40}, {#text: Ecologique, @POIDS: 10}]}}}}"  


Si vous voulez une réponse plus détaillée (et pour les prochains messages) :

Cordialement,
Mickaël
mickael.canouil.fr | rlille.fr

ameni melki
Messages : 40
Enregistré le : 24 Fév 2021, 14:54

Re: Extraire des sous chaines de caractères

Messagepar ameni melki » 08 Fév 2022, 15:02

Bonjour,

Je vous remercie pour votre aide, le code

Code : Tout sélectionner

sub( ".*(CRITERES_ATTRIBUTION.*)","\\1",gsub("\"", "", text))
réponds à mes besoins, il permet d'extraire la partie que je veux.

Concernant les données, malheureusement il y a des erreurs de syntaxe dans le format JSON et j'ai pas pu corriger le problème, ce sont des données accessible sur le site du open data soft, ils ont été publiés comme ça, j'essaye de trouver un moyen pour exploiter et extraire les champs qui m’intéresse
dans ces données mais c'est laborieux.

Ci-dessous le site de la base, les 2 derniers champs(DONNES et GESTION) sont des sous bases de données sous format JSON, j'ai essayé d’éclater les champs et de les transformer en bases de données mais je n'ai pas réussi à cause des erreurs de syntaxe.

https://boamp-datadila.opendatasoft.com ... teparution

Si vous avez des idées qui puissent m'aider je suis preneuse.

Merci encore pour votre aide

Cordialement


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité