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

WinDev Discussion :

Extraction de chaine


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Points : 18
    Points
    18
    Par défaut Extraction de chaine
    Bonjour, je souhaiterai extraire le contenu d'une chaîne , celle qui ce situe entre DCY et FCY donc je devrais récupérer deux bloques de chaines.
    Cependant je n'arrive pas à extraire le deuxième bloque car dans mon code je n'arrive pas à trouver deux fois la position du même mot . "DCY".
    Pouvez vous m'aider svp


    Exemple fichier txt
    05:11:32.99 Ouvre Application
    05:11:33.38 AU
    05:14:35.46 Manuel
    05:15:07.12 Automatique

    -->ICI à ...
    [COLOR="rgb(0, 191, 255)"]05:15:18.93 DCY 14508
    05:15:26.79 Pause_Cycle
    05:17:28.41 Reprise_Cycle
    05:17:30.45 Pause_Cycle
    05:17:38.27 Reprise_Cycle
    05:17:38.44 Pause_Cycle
    05:17:50.19 Reprise_Cycle
    05:18:26.90 FCY 14508[/COLOR]
    <-- là

    --> ICI à ...
    05:18:27.86 DCY 14509
    05:18:32.42 Pause_Cycle
    05:19:03.56 Reprise_Cycle
    05:19:05.47 Pause_Cycle
    05:19:14.02 Reprise_Cycle
    05:19:14.19 Pause_Cycle
    05:19:25.22 Reprise_Cycle
    05:20:01.13 FCY 14509[/I]
    <-- là
    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
    PROCEDURE import()
     
    TableSupprimeTout(TABLE_cycle)
     
    sTotalFichier est une chaîne
    sTexte est une chaîne 
    sNonFichier,sExtention,ResDate sont des chaînes
    nCycleTotal,nbCycleValide sont des entiers 
     
    rSommeTemp,rMoyTemp sont des réels = 0
     
     
    sRepertoire est une chaîne = fRepSélecteur("", "","")
    sTotalFichier = fListeFichier(sRepertoire+["\"]+"*.txt")
     
    n est un entier
     
    POUR TOUT CHAINE sFichier DE sTotalFichier SEPAREE PAR RC
    	sExtention =  fExtraitChemin(sFichier, fExtension)
     
    	SI(sExtention = ".txt")ALORS
    		sTexte = fChargeTexte(sFichier)
    		sNonFichier = fExtraitChemin(sFichier, fFichier)
    		ResDate = DateVersChaîne(sNonFichier[[3 A 10]])
    		nCycleTotal  = 0 
    		nbCycleValide  = 0
    		rSommeTemp = 0.0
    		i est un entier = 0
    		SI sTexte <> "" ALORS
     
    			POUR TOUT CHAINE sLigne DE sTexte SEPAREE PAR RC
     
    				// ----- Nombre de (Cycles total et cycles valides)
    				SI (ChaîneOccurrence(sLigne,"DCY",MotComplet)  <> 0) ALORS
    					nCycleTotal++
    				SINON
    					SI(ChaîneOccurrence(sLigne,"FCY",MotComplet) <> 0) ALORS
    						nbCycleValide++
    					FIN
    				FIN
    				// -----Temp moyen de la totalité des cyle
     
    			FIN
    			TableAjoute(TABLE_cycle,ResDate+TAB+nCycleTotal+TAB+nbCycleValide)
    		FIN
    	FIN
    FIN
    TableAffiche(TABLE_cycle)

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    En espérant avoir bien compris ce que tu veux faire...

    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
    sTexte est une chaîne
    sChaine1 est une chaîne
    sChaine2 est une chaîne
     
    sTexte = [
    05:11:32.99 Ouvre Application
    05:11:33.38 AU
    05:14:35.46 Manuel
    05:15:07.12 Automatique
     
    -->ICI A ...
    [COLOR="rgb(0, 191, 255)"]05:15:18.93 DCY	14508
    05:15:26.79 Pause_Cycle
    05:17:28.41 Reprise_Cycle
    05:17:30.45 Pause_Cycle
    05:17:38.27 Reprise_Cycle
    05:17:38.44 Pause_Cycle
    05:17:50.19 Reprise_Cycle
    05:18:26.90 FCY	14508[/COLOR]
    <-- là
     
    --> ICI A ...
    05:18:27.86 DCY	14509
    05:18:32.42 Pause_Cycle
    05:19:03.56 Reprise_Cycle
    05:19:05.47 Pause_Cycle
    05:19:14.02 Reprise_Cycle
    05:19:14.19 Pause_Cycle
    05:19:25.22 Reprise_Cycle
    05:20:01.13 FCY	14509
    <-- là
    ]
     
    sChaine1 = Milieu(sTexte,PositionOccurrence(sTexte,"DCY",1)+3,PositionOccurrence(sTexte,"FCY",1)-PositionOccurrence(sTexte,"DCY",1)-3)
    sChaine2 = Milieu(sTexte,PositionOccurrence(sTexte,"DCY",2)+3,PositionOccurrence(sTexte,"FCY",2)-PositionOccurrence(sTexte,"DCY",2)-3)

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 451
    Points
    2 451
    Par défaut
    Bonsoir,

    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
    PROCEDURE import()
    PosDCY, PosFCY sont des Entiers 
    //vont permettre se déceler les cycles non valides
    ...
    ...
    nCycleTotal = ChaîneOccurrence(sLigne,"DCY",MotComplet) 
     
    <s>SI SansEspace(sTexte) <> "" ALORS  
       //au cas où il n'y aurait que des espaces </s>
       //OU mieux me semble-t-il
     
    SI nCycleTotal > 0
       nCycleValide = 0 
       //on calcule le nombre de cycles valides pour chaque fichier ?
     
       POUR TOUTE POSITION nPositionDebut DE "DCY" DANS sTexte
          PosFCY = Position(sTexte, "FCY", nPositionDebut, MotComplet) 
          PosDCY = Position(sTexte, "DCY", nPositionDebut + 1, MotComplet)
          //on cherche le prochain DCY
     
          Si PosFCY >0 _ET_ PosDCY > PosFCY ALORS 
             //si PosFCY > 0 (à partir de la position du DCY concerné par cette itération), cela signifie qu'il y a un segment valide entre le DCY concerné (a priori) et ce FCY
             // SAUF si le cycle ouvert par le DCY testé est invalide.
             // dans ce cas, un autre DCY vient se glisser entre le DCY testé et ce FCY ou (plus clairement) s'il existe 2 DCY consécutifs sans FCY intermédiaire
             //on teste donc s'il existe un DCY situé au-delà du DCY testé 
            //supra : DCI concerné a priori car peut-être faut-il envisager le cas où il y aurait un FCY non précédé par un DCY, ce qui signeraitaussi un cycle non valide ? 
     
             nbCycleValide++
             TableAjoute(Table_cycle, sTexte[[nPositionDebut + 3 à PosFCY - 1]])
              // [[ à ]] ou Milieu()
          SINON 
             //que fait-on si cycle pas valide ?
     
          FIN
     
          // -----Temp moyen de la totalité des cycles
     
          TableAjoute(TABLE_cycle,ResDate+TAB+nCycleTotal+TAB+nbCycleValide)
    SINON
          //Que fait-on si nCycleTotal = 0 ,
    FIN
     
     
    TableAffiche(TABLE_cycle)
    Quelques remarques :
    Vous confondez l'utilisation de ChaineOccurence() et de Position()
    SI (ChaîneOccurrence(sLigne,"DCY",MotComplet) <> 0) ALORS : il n'y a aucune raison d'utiliser la première paire de parenthèses

    Je suppose que vous gérez quelque part l'ajout de la chaine extraite dans Table_cycle.

    Code non testé.

    Bon travail

    Hemgé

Discussions similaires

  1. Extraction de chaine de caractères
    Par asterix76-rouen dans le forum Langage
    Réponses: 4
    Dernier message: 20/12/2006, 23h17
  2. Extraction de chaine
    Par Daniel MOREAU dans le forum VBA Access
    Réponses: 6
    Dernier message: 14/02/2006, 09h01
  3. Requete avec extraction de chaine
    Par bestall666 dans le forum Access
    Réponses: 8
    Dernier message: 04/02/2006, 18h17
  4. [String]Extraction de chaîne
    Par sangei dans le forum Langage
    Réponses: 6
    Dernier message: 19/12/2005, 11h25
  5. [XSLT] Extraction de chaine de caractere
    Par Hugo001 dans le forum XSL/XSLT/XPATH
    Réponses: 11
    Dernier message: 28/10/2004, 08h27

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