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

Scripts/Batch Discussion :

Qui est pour de petits execices pour manipulation de chaînes de caractères ?


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut Qui est pour de petits execices pour manipulation de chaînes de caractères ?
    Salut,

    qu'on dites vous de petits exercices pour tester vos acquis en scripting et rentrer en compétition avec les autres membres ? vous pouvez utiliser vbscript ou Powershell mais surtout pas de scripts hybrides et/ou d'utilitaires tierces. Chaque exercice aura une note sur 20

    le barême est un peu spécial:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Solution en scripting de commande NT:
    
    solution qui marche: 13points
    paramètrable: 2points
    explication du code: 5point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Solution en Vbscript:
    
    solution qui marche: 10points
    paramètrable: 2points
    explication du code: 5point
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Solution en PS:
    
    solution qui marche: 8points
    paramètrable: 2points
    portable en PS2: 1points
    explication du code: 5point
    je suis un dictateur, je sais


    Execice (1):
    ------------


    capturer la première lettre non repétés dans une chaîne de caractères, par exemple nous avons une chaine

    les lettres non répétes sont les caractères 'd','v', 'z', '.','c' et le 'm'
    ont veux le premier à savoir le 'd'


    Execice (2):
    -----------


    convertir en lettre majuscule apres chaque occurence d'un caractères, par exemple on a une chaine.

    l'occurence est le caractere '.'

    le resultat doit être:


    les notes seront accordés par les membres.

    bonne chance

  2. #2
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    une tentative en Vbscript pour l'execice N°1
    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
    Option Explicit
    'Déclaration des variables globales
    Dim Titre,MaChaine,fso,ws,LogFile
    'Titre du Script
    Titre = "Extraction du premier caractère dans une chaîne"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ws = CreateObject("Wscript.Shell")
    'Nom du fichier qui va stocker le résultat
    LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
    if fso.FileExists(LogFile) Then 'Si le fichier LogFile existe 
        fso.DeleteFile LogFile 'alors on le supprime
    end If
    'La boîte de saisie de la chaîne de caractères
    MaChaine = InputBox("Taper votre chaîne",Titre,"developpez.com")
    'Si la Chaîne est vide ou bien on ne tape rien dans l'inputbox,alors on quitte le script
    If MaChaine = "" Then Wscript.Quit 
    'on affiche le résultat dans un MsgBox
    MsgBox "Le premier caractère dans la chaine " & DblQuote(Machaine) &" est "& DblQuote(ExtractDebutChaine(Machaine)),64,Titre
    'Ecrire le résultat dans un fichier
    WriteLog "Le premier carctère dans la chaine " & DblQuote(Machaine) &" est "& DblQuote(ExtractDebutChaine(Machaine)),LogFile
    ws.Run LogFile,1,False
    
    '*****************************************************************
    Function ExtractDebutChaine(MaChaine)
    'Extraction du premier caractère
        ExtractDebutChaine = Left(Machaine,1)
    End Function
    '*****************************************************************
    
    '*****************************************************************
    'Fonction pour ajouter des guillemets dans une variable
    Function DblQuote(Str)
        DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '*****************************************************************
    
    '*****************************************************************
    'Fonction pour écrire le résultat dans un fichier texte
    Sub WriteLog(strText,LogFile)
        Dim fs,ts 
        Const ForAppending = 8
        Set fs = CreateObject("Scripting.FileSystemObject")
        Set ts = fs.OpenTextFile(LogFile,ForAppending,True)
        ts.WriteLine strText
        ts.Close
    End Sub
    '*****************************************************************

  3. #3
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844
    Par défaut

    Une tentative en Vbscript pour l'execice N°2
    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    Option Explicit
    'Déclaration des variables globales
    Dim Titre,MaChaine,fso,ws,LogFile
    'Titre du Script
    Titre = "convertir en lettre majuscule après chaque occurence d'un caractères"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ws = CreateObject("Wscript.Shell")
    'Nom du fichier qui va stocker le résultat
    LogFile = Left(Wscript.ScriptFullName,InstrRev(Wscript.ScriptFullName, ".")) & "txt"
    if fso.FileExists(LogFile) Then 'Si le fichier LogFile existe 
    	fso.DeleteFile LogFile 'alors on le supprime
    end If
    'La boîte de saisie de la chaîne de caractères
    MaChaine = InputBox("Taper votre chaîne de caractères séparé par un point "& DblQuote(".") & vbCrLf &_
    "Exemple : " & DblQuote("www.developpez.com"),Titre,"www.developpez.com")
    'Si la Chaîne est vide ou bien on ne tape rien dans l'inputbox,alors on quitte le script
    If MaChaine = "" Then Wscript.Quit 
    'On affiche le résultat dans un MsgBox
    MsgBox "Le résultat de la conversion est : " & DblQuote(MajDebutChaine(MaChaine,".")),64,Titre
    'Ecrire le résultat dans un fichier
    WriteLog MajDebutChaine(MaChaine,"."),LogFile
    ws.Run LogFile,1,False
    
    '*****************************************************************
    Function ExtractDebutChaine(MaChaine)
    'Extraction du premier caractère à gauche
    	ExtractDebutChaine = Left(Machaine,1)
    End Function
    '*****************************************************************
    
    '*****************************************************************
    Function MajDebutChaine(MaChaine,Separateur)
    	Dim strText,arrText,i
    	'instancier notre variable strText
      	strText = ""
      	'On stocke notre chaîne de caractères dans un tableau
      	arrText = Split(MaChaine,Separateur)
      	'On parcourt notre tableau à partir du 2ème indice i = LBound(arrText) + 1
      	For i = LBound(arrText) + 1 to  UBound(arrText)
      	'On écrit notre nouvelle chaîne de caractères dans la variable strText
      		strText = strText & Separateur & Ucase(Left(arrText(i),1)) & mid(arrText(i),2)
      		'Si l'indice i est égale à l'indice le plus haut de notre tableau alors
      		'le separateur = ""
    		If i = UBound(arrText) Then Separateur = ""
      	Next
      	'Retour de notre résultat
      	MajDebutChaine = arrText(0) & Separateur & strText
    End Function
    '*****************************************************************
    
    '*****************************************************************
    'Fonction pour ajouter des guillemets dans une variable
    Function DblQuote(Str)
    	DblQuote = Chr(34) & Str & Chr(34)
    End Function
    '*****************************************************************
    
    '*****************************************************************
    'Fonction pour écrire le résultat dans un fichier texte
    Sub WriteLog(strText,LogFile)
    	Dim fs,ts 
    	Const ForAppending = 8
    	Set fs = CreateObject("Scripting.FileSystemObject")
    	Set ts = fs.OpenTextFile(LogFile,ForAppending,True)
    	ts.WriteLine strText
    	ts.Close
    End Sub
    '*****************************************************************

  4. #4
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Superbe idée I'M Here,

    Hackoo solution 1
    - Tu n'as apparemment pas compris l'énoncé du problème.
    Il ne suffit pas seulement de récupèrer le premier carctères du string.
    Mais le premier caractère UNIQUE du string.

    Hackoo Solution 2

    - 10/10


    Voici ma solution pour le problème No 1 en BAT :

    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
    @echo off&cls
    
    set /p $var=Entrez votre string :
    if ["%$var%"]==[""] set $var=developpez.com
    echo Traitement de : %$var%
    setlocal enabledelayedexpansion
    
    :::Decomposition de la liste (test=t e s t)
    
    :test
    if defined $var (                     
                     set $car=%$var:~0,1% 
                     set $l=!$l! !$car!
                     set $var=%$var:~1%
                     goto:test)
    
    :::comptage de chaque occurence de lettre %%a dans liste %%b
    :::si $count est égal à 1 en final de traitement on a trouvé la première lettre unique du string   
    
    for %%a in (!$l!) do (set $count=0
                          for %%b in (!$l!) do (if %%a==%%b set /a $count+=1)
                          echo %%a !$count!
                          if !$count!==1 call:fin %%a) &:: si il n'y a palus de 1 occurence de %%a on a trouvé
    
    :fin
    if !$count!==1 (echo.&echo Premiere lettre unique = %1&endlocal&pause&exit)
    echo Aucune occurence unique&pause&exit

  5. #5
    Membre Expert
    Avatar de I'm_HERE
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 013
    Par défaut
    Salut hackoofr, sachadee

    Vous ne dormez pas ? En tout cas merci pour votre contribution.

    Hackoofr ton premier code ne respecte pas l'enonnce 1, par contre ton deuxieme code lui il le fait, donc t'as mérité les 17 points pour l'exercice 2

    Sachadee, j'ai teste ton code et voici le resultat:
    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
    > sacha.bat
    entrez votre string:
    traitement de: developpez.com
    d 1
    
    > sacha.bat
     entrez votre string:abcdeabcdz
    traitement de: abcdeabcdz
    d 3
    e 4
    v 1
    
    > sacha.bat
    entrez votre string:ceci est un test
    traitement de: ceci est un test

  6. #6
    Membre Expert
    Avatar de sachadee
    Homme Profil pro
    AMI DU BAT
    Inscrit en
    Janvier 2013
    Messages
    1 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : AMI DU BAT
    Secteur : Distribution

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1 478
    Par défaut
    Salut I'm Here,

    Chez-moi ça fonctionne à merveille, ça doit-être à cause des "&" en cascade.
    Je les ai supprimés Test de nouveau :

    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
    @echo off
    cls
    
    set /p $var=Entrez votre string :
    if ["%$var%"]==[""] set $var=developpez.com
    echo Traitement de : %$var%
    setlocal enabledelayedexpansion
    
    :::Decomposition de la liste (test=t e s t)
    
    :test
    if defined $var (                     
                     set $car=%$var:~0,1% 
                     set $l=!$l! !$car!
                     set $var=%$var:~1%
                     goto:test)
    
    :::comptage de chaque occurence de lettre %%a dans liste %%b
    :::si $count est égal à 1 en final de traitement on a trouvé la première lettre unique du string   
    
    for %%a in (!$l!) do (set $count=0
                          for %%b in (!$l!) do (if %%a==%%b set /a $count+=1)
                          rem echo %%a !$count!
                          if !$count!==1 call:fin %%a) 
    
    :: si il n'y a palus de 1 occurence de %%a on a trouvé
    
    :fin
    
    if !$count!==1 (echo.
                    echo Premiere lettre unique = %1
                    endlocal
                    pause
                    exit)
    
    echo Aucune occurence unique
    pause
    exit
    Pour le problème No 2 voici ma solution (assez minimaliste) :

    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
    @echo off&cls
    ::le carctère qui va definir la majuscule
    set $c=.
    setlocal enabledelayedexpansion
    set /p $var=Entrez votre string :
    if ["%$var%"]==[""] set $var=www.developpez.com
    echo Traitement de : !$var!
    
    :::Les éléments de substitution (.A .B .C, etc..) 
    set $alph=%$c%A %$c%B %$c%C %$c%D %$c%E %$c%F %$c%G %$c%H %$c%I %$c%J %$c%K %$c%L %$c%M %$c%N %$c%O %$c%P %$c%Q %$c%R %$c%S %$c%T %$c%U %$c%V %$c%W %$c%X %$c%Y %$c%Z
    
    :::La substitution
    
    for %%a in (%$alph%) do (set $var=!$var:%%a=%%a!)
    
    :::Le résultat
    echo.
    echo Resultat = !$var!
    echo.
    endlocal
    pause

Discussions similaires

  1. Réponses: 11
    Dernier message: 13/12/2011, 17h41
  2. Réponses: 3
    Dernier message: 17/08/2011, 14h40
  3. Réponses: 3
    Dernier message: 26/05/2010, 23h39
  4. un petit probleme pour vous un grand pour moi
    Par forstyle dans le forum Réseau
    Réponses: 6
    Dernier message: 04/11/2009, 20h03
  5. Meilleur algorithme pour trier de très grandes quantités de chaînes de caractères
    Par Cecilka dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 07/05/2006, 11h23

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