IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Parcourir une longue chaine de caractères


Sujet :

JavaScript

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Parcourir une longue chaine de caractères
    Bonjour tout le monde,

    Je viens vous voir parce que je bute sur le traitement d'une chaine de caractères et que c'est un projet à rendre dans les jours qui viennent.
    En fait cette chaine est composée de plusieurs types d'informations et je souhaiterais avoir accès à chacune d'elle.

    Voici ma chaine de caractère :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        var data = 'Core Data "Status","Location","Raw Score","Max Score","Min Score","Time" "passed","3","20","20","0","00:00:19" Interaction Data "Date","Time","Interaction ID","Objective ID","Interaction Type","Correct Response","Student Response","Result","Weight","Latency" "07/31/2009","16:01:59","ResultatInteraction10185","Quiz10111","true-false","true","true","C","10","00:00:02" "07/31/2009","16:02:04","ResultatInteraction10492","Quiz10111","matching","0.A,1.B","0.a,1.b","C","10","00:00:03" "07/31/2009","16:02:09","ResultatInteraction10716","Quiz10111","long-fill-in","","ezfezf ezaf zaefzea","C","0","00:00:02"';
     
        core_data = getData(data);
    Notez que j'ai des informations type "Core Data", sur une ligne : passed","3","20","20","0","00:00:19" ( "Status","Location","Raw Score","Max Score","Min Score","Time" sont les en têtes mais je n'en ai pas besoin)

    et des informations de type "Interaction Data" qui peuvent être de 1 à x lignes. Voici une ligne qui correspond à ses informations dans ma chaine :
    "07/31/2009","16:01:59","ResultatInteraction10185","Quiz10111","true-false","true","true","C","10","00:00:02"

    Pareil pour celles là je ne veux pas les en-têtes, juste les valeurs.

    Je la transmets donc a ma fonction getData qui doit normalement se charger de me renvoyer toutes les informations dont j'ai besoin. Pour cela je parcours d'abord les "Core Data" que je récupère facilement puisqu'elles ne sont que sur une ligne.
    Par contre pour les "Interaction Data" je bute, car il peut y avoir 1 ou x lignes.

    L'idéale serait donc de pouvoir identifier chaque groupe d'information "Interaction Data" (les mettre dans un tableaux différents) pour accéder à chacune des valeur présente dans ce groupe

    Voici la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    function getData(a) {
    if(!a){
        return false
      }
     
    	var stripCoreData = a.replace("Core Data", "");
    	stripCoreData = stripCoreData.replace("Interaction Data", " \" \"");
    	stripCoreData = stripCoreData.split("\" \"");
     
    	// Enlever les doubles quotes dans Core Data
    	var stripQuotes = stripCoreData[1]; // stripCoreData[1] = données Core Data
    	while(stripQuotes.indexOf("\"") !=-1){
        stripQuotes=stripQuotes.replace("\"", "");
    	}
    	// Retouner le résultat sous forme de tableau (Core Data)
    	var results_coreData = stripQuotes.split(",");
     
      // Enlever les doubles quotes dans Interaction Data
      for(var i = 3; i<stripCoreData.length;i++)
      {
      	var stripQuotes = stripCoreData[i];
      	while(stripQuotes.indexOf("\"") !=-1){
          stripQuotes = stripQuotes.replace("\"", "");
          alert(stripQuotes);
      	}
      }
     
    	// Remplissage des variables core Data
    	var result = {};
    	result.RawScore = results_coreData[2];
    	result.MaxScore = results_coreData[3];
    	result.MinScore = results_coreData[4];
    	var Pourcentage = result.RawScore/result.MaxScore;
    	result.Pourcentage = Pourcentage*100;
     
      return result
    }
    N'hésitez pas à me demander plus d'explications parce que c'est difficile à décrire je ne suis pas sûr que toute le monde comprenne.

    Je vous remercie d'avance pour l'aide que vous allez m'apporter.

  2. #2
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Salut,
    Citation Envoyé par SnoT- Voir le message
    Je viens vous voir parce que je bute sur le traitement d'une chaine de caractères et que c'est un projet à rendre dans les jours qui viennent.
    C'est une autre façon de nous dire que c'est urgent?

    Quel idée ce format, intéresse toi à la notation JSON, ça répondra à ton problème.

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci, pourrais-tu me montrer comment tu utiliserais Json avec ma chaine de caractères ? (pour récupérer les 3 premiers mots par exemple) merci

    Ce que j'ai oublié de dire c'est que cette chaine de caractère je ne choisi pas son format, elle m'est donnée comme cela (par Adobe Captivate, logiciel de création de contenus e-learning). Donc d'après ce que j'ai lu concernant Json, il faudrait que je modifie le format de ma chaine or je ne peux pas: )

  4. #4
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Cela ne servirait à rien, le serpent se mordrait la queue. J'ai regardé le format d'un peu plus près. En fait c'est simple, chaque ligne est séparée d'un espace, t'as juste à utiliser split, pour avoir un tableau contenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     - Core data
     - "Status","Location","Raw Score","Max Score","Min Score","Time" 
     - "passed","3","20","20","0","00:00:19" 
     - Interaction Data 
     - "07/31/2009","16:01:59","ResultatInteraction10185","Quiz10111","true-false","true","true","C","10","00:00:02" "07/31/2009","16:02:04","ResultatInteraction10492","Quiz10111","matching","0.A,1.B","0.a,1.b","C","10","00:00:03" 
     - "07/31/2009","16:02:09","ResultatInteraction10716","Quiz10111","long-fill-in","","ezfezf ezaf zaefzea","C","0","00:00:02"
     - ...
    Avec ça il y a de quoi se débrouiller facilement.

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Le problème c'est qu'avec un split sur les espaces ma chiane se coupe aussi à "Raw" puis "Score" ("Raw Score"), pareil pour max score etc...

    J'ai réussi à récupérer mes données lignes par lignes comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    var stripCoreData = a.replace("Core Data", "");
    	stripCoreData = stripCoreData.replace("Interaction Data", " \" \"");
    	stripCoreData = stripCoreData.split("\" \"");
     
    	// Enlever les doubles quotes dans Core Data
    	var stripQuotes = stripCoreData[1]; // stripCoreData[1] = données Core Data
    	while(stripQuotes.indexOf("\"") !=-1){
        stripQuotes=stripQuotes.replace("\"", "");
    	}
    	// Retouner le résultat sous forme de tableau (Core Data)
    	var results_coreData = stripQuotes.split(",");
      alert(results_coreData[0]);
      // Enlever les doubles quotes dans Interaction Data
      tabLength = stripCoreData.length - 3;
      tabInteractionData = new Array(tabLength);
      var intCompteur = 0;
      for(var i = 3; i<stripCoreData.length;i++)
      {
      	var stripQuotes = stripCoreData[i];
      	while(stripQuotes.indexOf("\"") !=-1){
          stripQuotes = stripQuotes.replace("\"", "");
     
      	}
      	tabInteractionData[intCompteur] = stripQuotes;
      	intCompteur++;
      }
    si je fais alert(tabInteractionData); j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    07/31/2009,16:01:59,ResultatInteraction10185,Quiz10111,true-false,true,true,C,10,00:00:02,07/31/2009,16:02:04,ResultatInteraction10492,Quiz10111,matching,0.A,1.B,0.a,1.b,C,10,00:00:03,07/31/2009,16:02:09,ResultatInteraction10716,Quiz10111,long-fill-in,,ezfezf ezaf zaefzea,C,0,00:00:02
    et si je fais alert(tabInteractionData[0]) j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    07/31/2009,16:01:59,ResultatInteraction10185,Quiz10111,true-false,true,true,C,10,00:00:02
    Maintenant je revoie déjà ma variable result comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var result = {};
    	result.RawScore = results_coreData[2];
    	result.MaxScore = results_coreData[3];
    	result.MinScore = results_coreData[4];
    	var Pourcentage = result.RawScore/result.MaxScore;
    	result.Pourcentage = Pourcentage*100;
     
      result.InteractionData = tabInteractionData;
      return result;
    Et ce que je voudrai c'est renvoyer aussi chaque ligne de mon tableau tabInteractionData dans result.

    Une idée peut-être ? Si j'arrive à le faire mon problème sera résolu Merci

  6. #6
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Citation Envoyé par SnoT- Voir le message
    Et ce que je voudrai c'est renvoyer aussi chaque ligne de mon tableau tabInteractionData dans result.
    Je ne comprends pas, tue le fais déjà, result.InteractionData[0] devrait te retourner la première ligne du tableau. Tu peux donc choisir n'importe quel indice ensuite.

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Yesss, c'est bon j'ai réussi

    Voici ma solution (peut-être besoin d'optimisation mais en tout cas ça marche ^^ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    function getData(a) {
      //Nombre de réponses au quizz
      var totalReponses = 3;  
     
      if(!a){
        return false
      }
     
    	var stripCoreData = a.replace("Core Data", "");
    	stripCoreData = stripCoreData.replace("Interaction Data", " \" \"");
    	stripCoreData = stripCoreData.split("\" \"");
     
    	// Enlever les doubles quotes dans Core Data
    	var stripQuotes = stripCoreData[1]; // stripCoreData[1] = données Core Data
    	while(stripQuotes.indexOf("\"") !=-1){
        stripQuotes=stripQuotes.replace("\"", "");
    	}
    	// Retouner le résultat sous forme de tableau (Core Data)
    	var results_coreData = stripQuotes.split(",");
     
      // Enlever les doubles quotes dans Interaction Data
      tabLength = stripCoreData.length - 3;
      tabInteractionData = new Array(tabLength);
      var intCompteur = 0;
      for(var i = 3; i<stripCoreData.length;i++)
      {
      	var stripQuotes = stripCoreData[i];
      	while(stripQuotes.indexOf("\"") !=-1){
          stripQuotes = stripQuotes.replace("\"", "");
     
      	}
      	tabInteractionData[intCompteur] = stripQuotes;
      	intCompteur++;
      }
     
    	// Remplissage des données core Data
    	var result = [ 4 + tabInteractionData.length ];
     
    	result['RawScore'] = results_coreData[2];
    	result['MaxScore'] = results_coreData[3];
    	result['MinScore'] = results_coreData[4];
    	var Pourcentage = result.RawScore/result.MaxScore;
    	result['Pourcentage'] = Pourcentage*100;
     
    	//Remplissage des données interaction Data
    	for(var j = 0; j < tabInteractionData.length;j++ ){
        result['InteractionData' + j.toString()] = tabInteractionData[j];
      }
     
      return result;
    }
    Merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. position d'une sous-chaine de caractère
    Par trax44 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 01/02/2007, 21h14
  2. Réponses: 1
    Dernier message: 15/12/2006, 20h07
  3. Réponses: 4
    Dernier message: 07/12/2006, 11h01
  4. Réponses: 10
    Dernier message: 17/05/2006, 11h50
  5. Découper une longue chaine
    Par lili_bzh dans le forum Linux
    Réponses: 13
    Dernier message: 23/01/2006, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo