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

Linux Discussion :

sed et retour à la ligne


Sujet :

Linux

  1. #21
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Je suis désolé je n'ai pas l'autorisation de te fournir le fichier, je peux juste à la rigueur te copier le code entier du fichier dans une balise code désolé:

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    <?php
     
    include "config.php";
     
    ##########################################
    ##  Récupère le nom du jeu et le score  ##
    ##########################################
    if (!empty($_POST['gname']))
    {
    	$game_name =htmlentities($_POST['gname'], ENT_QUOTES);
    }
    if (!empty($_POST['gscore']))
    {
    	$score = intval($_POST['gscore']);
    }
     
    if (!empty($_POST['game_name']))
    {
    	$game_name =htmlentities($_POST['game_name'], ENT_QUOTES);
    }
    if (!empty($_POST['score']))
    {
    	if ( $game_name == '501darts' )
    	{
    		if ( intval($_POST['score']) >100 )
    		{
    			$score = 0;
    		}
    		else
    		{
    			$score = 100 - intval($_POST['score']);
    		}
    	}
    	else
    	{
    		$score = intval($_POST['score']);
    	}
    }
     
    #####################
    ##  Recherche tri  ##
    #####################
     
    $traitement_jeux = reqmysql('SELECT tri FROM `jeuxflash_jeux` WHERE nom_cach="'.$game_name.'"');
     
    while ($boucle = $traitement_jeux->fetch(PDO::FETCH_BOTH))
    {
    	$tri = $boucle ['tri'];
    }
     
    ######################################
    ##  Ajoute les scores dans la base  ##
    ######################################
    $varmax=time();
    $nom = ''.($pseudo == '' ? 'visiteur' : ''.$pseudo.'').'';
    reqmysql("INSERT INTO `jeuxflash_scores` (`Id`,`Jeu`,`Utilisateur`,`Score`,`time`) VALUES ('', '$game_name', '$nom', '$score',  '$varmax');");
     
    ################################
    ##  Calcul du meilleur score  ##
    ################################
     
    $select_scores = reqmysql('SELECT * FROM `jeuxflash_scores` WHERE Jeu="'.$game_name.'" AND Utilisateur="'.$nom.'" ORDER BY score DESC');
    $position      = 0;
    $exaeco        = 0;
    $ancienscore   = 0;
     
    while ($boucle_recherche = $select_scores->fetch(PDO::FETCH_BOTH))
    {
    	$score_score = $boucle_recherche['Score'];
    	$nom         = $boucle_recherche['Utilisateur'];
     
    	if ($ancienscore<>$score_score && $exaeco>0)
    	{
    		$position=$position+$exaeco+1;
    		$exaeco=0;
    	}
    	elseif ($ancienscore==$score_score)
    	{
    		$exaeco++;
    	}
    	else
    	{
    		$position++;
    	}
     
    	$ex=''.($exaeco > 0 ? 'ex.' : '').'';
     
    	#################################################
    	##  Supprime tout sauf le highscore du joueur  ##
    	#################################################
     
    	if ($tri == 0)
    	{
    		if ($position>1)
    		{
    			reqmysql('DELETE FROM `jeuxflash_scores` WHERE Score="'.$score_score.'" AND Utilisateur="'.$nom.'"');
     
    			if ($score > $score_score)
    			{
    				$meilleur='oui';
    			}
    		}
    	}
     
    	if ($tri == 1)
    	{
    		if ($position >1)
    		{
    			reqmysql('DELETE FROM `jeuxflash_scores` WHERE Score="'.$ancienscore.'" AND Utilisateur="'.$nom.'"');
     
    			if ($score < $ancienscore)
    			{
    				$meilleur='oui';
    			}
    		}
    	}
     
    	#########################
    	##  Gère les ex-eaquo  ##
    	#########################
     
    	if ($exaeco>0)
    	{
    		reqmysql('DELETE FROM `jeuxflash_scores` WHERE Score="'.$score_score.'" AND Utilisateur="'.$nom.'"');
    		reqmysql('INSERT INTO `jeuxflash_scores` (`Id`,`Jeu`,`Utilisateur`,`Score`) VALUES ("", "'.$game_name.'", "'.$nom.'", "'.$score_score.'");');
    	}
     
    	$ancienscore=$score_score;
    }
     
    ################################
    ##  Envoi la page des scores  ##
    ################################
     
    echo '
    <script type="text/javascript">
    window.open("index.php?mod=jeuxflash&ac=scoresjeu&game_name='.$game_name.'&meilleur='.$meilleur.'","_top");
    </script>';
     
    ?>
    Il te suffirat juste de le recopier dans un fichier php. (ce fichier est nommé newscore.php, je doute que ça aide mais je ne néglige aucune piste).

  2. #22
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    C'est bon, je crois avoir trouvé MON erreur

    Essaie avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :z
    /^$.*=/{
    /) *;$/ !{
        N
        b z
    }
    /^$.*) *;$/ {
    s/\($[^ ]*[^=]*\)\( *=[^)]*) *;\)$/\1\2\n\1->execute();/
        b
    }
    }

  3. #23
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Rectification (je n'avais pas vu ton dernier post, celui avec le code entier)

    Ceci devrait aller mieux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :z
    /^$.*=/{
    /) *;$/ !{
        N
        b z
    }
    /^$.*) *;$/ {
    s/\($[^ ]*[^=]*\)\( *=.*reqmysql[^)]*) *;\)$/\1\2\n\1->execute();/
        b
    }
    }

  4. #24
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Bonjour,

    Merci pour ton code zipe, il y a du mieux, plus de reqmysql sont remplacer, malheureusement il y en as encore énormément qui ne le sont pas pour 2 raisons apparentes apparemment, la première qui est donc, le faîte qu'il y est des tabulation au début de la ligne et la deuxième sur cette ligne par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC");  # Requête copiraïght b0b0
    où apparemment ce serais le faîte qu'il y ait du texte juste après le ;.

    Je continue donc de chercher de mon côté pour essayer de palier à ces problèmes.

  5. #25
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    où apparemment ce serais le faîte qu'il y ait du texte juste après le ;.
    Gagné

    Effectivement le motif recherche un ";" en fin de ligne. Je regarderai dans l'après-midi d'adapter le code.

    Voilà pourquoi je demandais de voir les fichiers en question, comme il y a plusieurs cas, difficile sans les voir de faire un code optimisé

  6. #26
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Essaye ça, mais bon...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :z
    /^$.*=/{
    /) *\(;\|; *#.*\)$/ !{
        N
        b z
    }
    /^$.*) *\(;\|; *#.*\)$/ {
    s/\($[^ ]*[^=]*\)\( *=.*reqmysql[^)]*) *;.*\)$/\1\2\n\1->execute();/
        b
    }
    }

  7. #27
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Non zipe, malheureusement aucun changement au niveau de l'éxecution du script, les deux façons d'écritures qui n'était pas prit en compte avant ne le sont toujours pas.

  8. #28
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Ben chez moi ça marche

    J'ai repris ton fichier du #21 auquel j'ai rajouté ton exemple de ligne avec un commentaire en fin...

    Extrait :
    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
    ################################
    ##  Envoi la page des scores  ##
    ################################
     
    echo '
    <script type="text/javascript">
    window.open("index.php?mod=jeuxflash&ac=scoresjeu&game_name='.$game_name.'&meilleur='.$meilleur.'","_top");
    </script>';
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC");
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC");  # Requête copiraïght b0b0
     
    ?>
     
    $
    Ce qui donne avec sed -f script.sed fich.php:
    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
    ################################
    ##  Envoi la page des scores  ##
    ################################
     
    echo '
    <script type="text/javascript">
    window.open("index.php?mod=jeuxflash&ac=scoresjeu&game_name='.$game_name.'&meilleur='.$meilleur.'","_top");
    </script>';
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC");
    $req_blocs ->execute();
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC");  # Requête copiraïght b0b0
    $req_blocs ->execute();
     
    ?>
     
    $
    Mais bon comme dit plus haut, n'ayant pas toutes les cartes en main, je ne peux guère faire mieux

  9. #29
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Non dsl zipe, cela ne fonctionne pas chez moi, tu ne m'as peut etre pas fourni le bon code ou alors je n'ai pas recopier comme il fallait le tiens mais avec un commentaire à la fin moi ca ne fonctionne pas, et après il me reste encore à gérer les tabulations en début de ligne qui ne sont pas encore prit en compte.

    Je teste d'abord chaque code sur des fichiers test où les requêtes sont écrites chacunes en individuelles donc pour le moment je ne peux te donner plus d'exemple sur si ca fonctionne ou non en environnement réel puisque je travaille actuellement sur des fichiers test avant de tester en vrai.

    Egalement si tu pouvais me recommentez un peu ton code stp, car ce n'est pas toujours simple de le comprendre.
    Par exemple tu parle d'une étiquette au début de ton code, je ne comprend pas ce que c'est et je n'ai pas réussi à trouver, le # doit faire office de "ou" je suppose. De ce que j'en ai compris :

    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
    #on créer une étiquette (je ne sais pas ce que sait malheureusement)
    :z
     
    #On définit le début de phrase que l'on cherche équivalent d'un if je suppose
    /^$.*=/{
     
    #on fait un nouveau if différent de, que je n'ai pas compris au passage
    /) *\(;\|; *	#.*\)$/ !{
     
    #alors on ajoute la ligne (je n'ai pas compris à quoi on l'ajouter)
        N
     
    #puis on termine le script et je suppose que le z fait réfèrence à l'étiquette créer au début
        b z
     
    #on ferme le if
    }
     
    #On débute le else, donc si la condition correspond
    /^$.*) *\(;\|; *	#.*\)$/ {
     
    #On exécute le remplacement
    s/\($[a-z0-9A-Z_]*\)\( *= *\)\(reqmysql *(.*) *;\)/\1\2\3\n\1->execute();/
     
    #Puis on termine le script
        b
     
    #Fin du else
    }
     
    Fin du premier IF
    }
    Je suis désolé de t'embêter à ce point, mais je ne m'y connais pas énormément en programmation linux et je tiens réellement à essayer de réussir ce programme par moi même pour être capable non seulement de le reproduire par la suite mais également de le réexpliquer si besoin est.

  10. #30
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Plus d'idées zipe? Je patauge perso.

    Si tu pouvais me dire également si ma compréhension de ton code est bonne et m'éclairer un peu plus à son sujet stp?

  11. #31
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par radgeur Voir le message
    Plus d'idées zipe? Je patauge perso.

    Si tu pouvais me dire également si ma compréhension de ton code est bonne et m'éclairer un peu plus à son sujet stp?
    Oups je n'avais pas vu ton message édité entre temps

    Pour t'aider je ne peux malheureusement que te redire ce que je t'ai déjà dit, à savoir que sans avoir toutes les cartes en main, je ne peux pas inventer de code

    Quant au reste je vais tenter d'y répondre...

    #on créer une étiquette (je ne sais pas ce que sait malheureusement)
    :z
    On définit un marqueur si tu préfères, ici nommé ":z" et précédé par ":" syntaxe oblige. Quand ce marqueur sera appelé plus loin dans le script, sed s'y branchera et exécutera les commandes qui le suivent.

    #On définit le début de phrase que l'on cherche équivalent d'un if je suppose
    /^$.*=/{
    En quelque sorte oui. On définit un motif entre "/..../" et si on rencontre son équivalent, les commandes comprises entre accolades y sont exécutées.
    Ici on cherche une ligne commençant par le caractère dollar ($) suivi d'aucun, un ou plusieurs caractères quelconque (.*) suivi(s) du signe égale (=)

    #on fait un nouveau if différent de, que je n'ai pas compris au passage
    /) *\(;\|; * #.*\)$/ !{
    Autant l'autre matchait le début d'une ligne (^) autant celui-ci matche la fin de la ligne, symbolisait par le caractère dollar ($). Placé en fin de motif il n'a plus son sens littéral, mais devient un caractère spécial.
    Donc ici on cherche une fin de ligne qui ressemblerait soit à ") *;", soit à "; *#.*".
    ) *; Une parenthèse fermante, suivie d'aucun espace,d'un espace ou de plusieurs et d'un point virgule.
    ; *#.* Un point virgule suivi d'aucun espace,d'un espace ou de plusieurs, suivi(s) du signe dièse et d'un, plusieurs ou aucun caractère(s).
    Le tout en fin de ligne ($)
    Mais c'est deux expression sont en fait comprises dans un ensemble délimité par des parenthèses protégées et d'un "pipe" (lui même protégé, caractères spéciaux oblige) afin de chercher les deux éventualités. C'est l'équivalent du OU.
    Autre caractéristique, le motif (/.../!) se termine par un point d'exclamation (!) qui signifie la négation. Donc en fait il faut interpréter en tant que : si l'un ou l'autre des 3 motifs ne se trouve pas en fin de ligne, exécuter la commande qui suit, "N" dans ton cas.


    #alors on ajoute la ligne (je n'ai pas compris à quoi on l'ajouter)
    N
    Il faut savoir que "sed" travaille dans ce qu'on a coutume d'appeler un espace de travail, ou bien mémoire principale. Chaque ligne (ou flux d'entrée) traité par sed se trouve confiné dans cette espace. Grâce à la commande "N" (Next en ajout), la ligne (ou flux) suivante est alors ajoutée dans cet espace de travail séparée de sa précédente par le caractère fin de ligne (\n)

    #puis on termine le script et je suppose que le z fait réfèrence à l'étiquette créer au début
    b z
    En fait on demande à sed de se brancher (commande "b") à l'étiquette ":z" et de recommencer le traitement avec la ligne ajoutée.

    #on ferme le if
    }
    En gros, oui.

    #On débute le else, donc si la condition correspond
    /^$.*) *\(;\|; * #.*\)$/ {
    On peut voir ça comme ça, mais ce n'est pas tout à fait vrai. Il n'y a pas de condition dans le sens "if...then...else", il y a juste des conditions qui sont examinées à chaque lecture de flux/boucle. Dans ce cas il vaut mieux y voir un "while" (tant que) pour le motif précédent, qui boucle "tant que" la fin de ligne n'est pas conforme, et c'est qu'une fois que la fin de ligne est conforme, qu'on enchaine sur cette nouvelle condition. C'est aussi cette condition qui permet de traiter les lignes comme $traitement_jeux = reqmysql('SELECT tri FROM `jeuxflash_jeux` WHERE nom_cach="'.$game_name.'"');, avec l'autre on traite celles sur plusieurs lignes.


    #On exécute le remplacement
    s/\($[a-z0-9A-Z_]*\)\( *= *\)\(reqmysql *(.*) *;\)/\1\2\3\n\1->execute();/
    Yes.

    #Puis on termine le script
    b
    Enfin, on se branche à la fin du script, s'il y a d'autres commandes derrière, elle ne seront pas traitées, et le script redémarrera avec une nouvelle ligne/flux.

    #Fin du else
    }
    On appelle plutôt ça des regroupements de commandes qui s'appliquent au motif concerné.

    Fin du premier IF
    }
    Idem.

  12. #32
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Oki, merci bien zipe, grâce à tes explications sur le code, je vais pouvoir approfondir mes recherches dessus et mieux le travailler, pour te répondre aux niveaux des problèmes que je rencontre, j'essaie déjà de faire fonctionner le script sur un fichier test qui contient les fonctions suivantes :

    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
    $req_joueurs = reqmysql('SELECT * FROM `joueurs_internationaux` ORDER BY nom');
     
    $req_joueur = $db->query('SELECT * FROM `joueurs_internationaux` ORDER BY nom');
     
    $req_joueur = mysql_fetch_object($reqparam);
    $req_joueur = mysql_fetch_object($reqparam);
    $requserverif = reqmysql(salut aurevoir);
     
    $sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
     
    //attention à la fin de cette phrase il y a \'attention à tous\' mais ça pourrait être n\'importe quoi d\'autre
    $traitement_jeux = reqmysql('SELECT tri FROM `jeuxflash_jeux` WHERE nom_cach="'.$game_name.'"'); salut à tous
     
    		$sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC"); # Requête copiraïght b0b0
    Sachant qu'actuellement il ne fonctionne pas sur l'avant dernière et la dernière fonction et qu'il ne doit pas s'appliquer sur la 2ème, 3ème et 4ème fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    :z
    /^[ \t]*$.*=/{
    /) *\(;\|; *#.*\)$/ !{
        N
        b z
    }
    /^[ \t]*$.*) *\(;\|; *#.*\)$/ {
    s/\([ \t]*$[a-z0-9A-Z_]*\)\( *= *\)\(reqmysql *(.*) *;\)/\1\2\3\n\1->execute();/
        b
    }
    }
    avec les [ \t] pour gérer les tabulations en début de ligne mais cela ne fonctionne pas.

  13. #33
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Et comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    :z
    /\(^\|\t\+\)\$.*=/{
    /) *\(;\|; *#.*\)$/ !{
        N
        /\n *$/{
        b
    }
        b z
    }
    /\(^\|\t\+\)\$.*) *\(;\|; *#.*\)$/ {
    s/\(.*\$[^ ]*[^=]*\)\( *=.*reqmysql.*) *;.*\)$/\1\2\n\1->execute();/
        b
    }
    }
    Est-ce que le résultat te convient :
    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
    $ sed -f 2_script.sed fich.php 
    $req_joueurs = reqmysql('SELECT * FROM `joueurs_internationaux` ORDER BY nom');
    $req_joueurs ->execute();
     
    $req_joueur = $db->query('SELECT * FROM `joueurs_internationaux` ORDER BY nom');
     
    $req_joueur = mysql_fetch_object($reqparam);
    $req_joueur = mysql_fetch_object($reqparam);
    $requserverif = reqmysql(salut aurevoir);
    $requserverif ->execute();
     
    $sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
    $sql_title_max2 ->execute();
     
     
    $traitement_jeux = reqmysql('SELECT tri FROM `jeuxflash_jeux` WHERE nom_cach="'.$game_name.'"');salut à tous
     
    		$sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
    		$sql_title_max2 ->execute();
     
    $req_blocs = reqmysql("SELECT * FROM `modules` WHERE  `modules`.`afficher`='1' and `modules`.`type`='bloc' ORDER BY `modules`.`emplacement`, `modules`.`position` ASC"); # Requête copiraïght b0b0
    $req_blocs ->execute();
     
    $

  14. #34
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci zipe, ton code fonctionne effectivement, il prend bien en compte les tabulations, laisse l'indentation et fait mettre attention au code qu'il peut y avoir derrière la requête, me reste une dernier léger problème je l'espère.
    J'aimerais savoir comment tu as fait pour gérer les accent stp, personnellement les tréma, accent grave ou circonflexes s'affichent bizarrement dans mon terminal, et à cause de cela, parfois le script ne comprend pas?

    j'exécute mon script de la façon suivante, peut être le problème vient il de là? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find /home/radgeur/Bureau/dossier_test/dossier_test2/test3.php -type f -printf "\n%f\n" -exec sed -f script.sed {} \;

  15. #35
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Question d'encodage, voir ce post.

  16. #36
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci zipe, il s'agissait effectivement d'un problème d'encodage.
    Me reste à résoudre un dernier problème (je l'espère ^^) qui est le suivant.
    Il s'agit de la ligne ou il y à execute(), que j'ajoute et qui ne s'ajoute pas toujours où il faut, parfois celle-ci prend des lignes en trop dans le code et place le execute() bien trop loin.

    Petit exemple où sont réunis des endroit ou cela fonctionne et d'autres non :
    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
    69
    70
    71
    72
    73
    74
    if( isset($_GET['mod']) )
    {	
    	$title = "";
    	if ( $_GET['mod'] == "forum" AND $_GET['ac'] == "voir" )
    	{
    		$sql_title_max = reqmysql("SELECT * FROM `forum_topic` WHERE  `forum_topic`.`id`= ".intval($_GET['id'])." ");
    	$title = "";
    	if ( $_GET['mod'] == "forum" AND $_GET['ac'] == "voir" )
    	{
    		$sql_title_max ->execute();
    		$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    		$title .= 'le forum : '.$req_title_max['titre'];
    		if( isset($_GET['debut']) )
    		{
    			$title .= ', page '.intval($_GET['debut']/10);
    		}
    	}
    	elseif ( $_GET['mod'] == "demos_exos_physiques"    )
    	{
    		if ( $_GET['ac'] == "demo_video_familles" )
    		{
    			$sql_title_max = reqmysql("SELECT * FROM `demos_exos_familles` WHERE  `demos_exos_familles`.`id`= ".intval($_GET['id'])." ");
    			$sql_title_max ->execute();
    			$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    			if ( isset ($req_title_max['titre']) )
    			{
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    		if ( $_GET['ac'] == "demo_video"  )
    		{
    			$sql_title_max = reqmysql("SELECT * FROM `demos_exos_physiques` WHERE  `demos_exos_physiques`.`id`= ".intval($_GET['id'])." ");
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    		if ( $_GET['ac'] == "demo_video"  )
    		{
    			$sql_title_max ->execute();
    			$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    			if ( isset ($req_title_max['titre']) )
    			{
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    	}
    	elseif ( $_GET['mod'] == "tutos" AND $_GET['ac'] == "tuto"  )
    	{
    		$sql_title_max = reqmysql("SELECT * FROM `tutos` WHERE  `tutos`.`id`= ".intval($_GET['id'])." ");
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    	}
    	elseif ( $_GET['mod'] == "tutos" AND $_GET['ac'] == "tuto"  )
    	{
    		$sql_title_max ->execute();
    		$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    		if ( isset ($req_title_max['titre']) )
    		{
    			$sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
    			$sql_title_max2 ->execute();
    			$req_title_max2 = $sql_title_max2->fetch(PDO::FETCH_BOTH);
    			$title .= 'tutoriels : '.$req_title_max2['titre'].', '.$req_title_max['titre'];
    		}
    	}
    	else
    	{
    		$title .= ax($_GET['mod']);
    		if ( isset($_GET['ac']) )
    		{
    			$title .= ': '.ax($_GET['ac']);
    		}
    		$title = preg_replace('#_#i', ' ', $title);
    	}
    }
    Voilà, je pense et j'espère que celà seras le dernier rempart avant que le code ne fonctionne comme je le souhaite ^^.

  17. #37
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Euh... je peux avoir le texte avant l'ajout de la ligne s'teuplé ?

    Histoire de voir où le bas blesse

  18. #38
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Bien sûre.

    Voili voilou :
    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
    if( isset($_GET['mod']) )
    {	
    	$title = "";
    	if ( $_GET['mod'] == "forum" AND $_GET['ac'] == "voir" )
    	{
    		$sql_title_max = reqmysql("SELECT * FROM `forum_topic` WHERE  `forum_topic`.`id`= ".intval($_GET['id'])." ");
    		$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    		$title .= 'le forum : '.$req_title_max['titre'];
    		if( isset($_GET['debut']) )
    		{
    			$title .= ', page '.intval($_GET['debut']/10);
    		}
    	}
    	elseif ( $_GET['mod'] == "demos_exos_physiques"    )
    	{
    		if ( $_GET['ac'] == "demo_video_familles" )
    		{
    			$sql_title_max = reqmysql("SELECT * FROM `demos_exos_familles` WHERE  `demos_exos_familles`.`id`= ".intval($_GET['id'])." ");
    			$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    			if ( isset ($req_title_max['titre']) )
    			{
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    		if ( $_GET['ac'] == "demo_video"  )
    		{
    			$sql_title_max = reqmysql("SELECT * FROM `demos_exos_physiques` WHERE  `demos_exos_physiques`.`id`= ".intval($_GET['id'])." ");
    			$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    			if ( isset ($req_title_max['titre']) )
    			{
    				$title .= 'exercice : '.$req_title_max['titre'];
    			}
    		}
    	}
    	elseif ( $_GET['mod'] == "tutos" AND $_GET['ac'] == "tuto"  )
    	{
    		$sql_title_max = reqmysql("SELECT * FROM `tutos` WHERE  `tutos`.`id`= ".intval($_GET['id'])." ");
    		$req_title_max = $sql_title_max->fetch(PDO::FETCH_BOTH);
    		if ( isset ($req_title_max['titre']) )
    		{
    			$sql_title_max2 = reqmysql("SELECT * FROM `tutos_familles` WHERE  `tutos_familles`.`id`= ".intval ($req_title_max['famille'])." ");
    			$req_title_max2 = $sql_title_max2->fetch(PDO::FETCH_BOTH);
    			$title .= 'tutoriels : '.$req_title_max2['titre'].', '.$req_title_max['titre'];
    		}
    	}
    	else
    	{
    		$title .= ax($_GET['mod']);
    		if ( isset($_GET['ac']) )
    		{
    			$title .= ': '.ax($_GET['ac']);
    		}
    		$title = preg_replace('#_#i', ' ', $title);
    	}
    }

  19. #39
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Essaye ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    :z
    /\(^\|\t\+\)\$.*=.*reqmysql/{
    /) *\(;\|; *#.*\)$/ !{
        N
        /\n *$/{
        b
    }
        b z
    }
    /\(^\|\t\+\)\$.*) *\(;\|; *#.*\)$/ {
    s/\(.*\$[^ ]*[^=]*\)\( *=.*reqmysql.*) *;.*\)$/\1\2\n\1->execute();/
        b
    }
    }

  20. #40
    Membre à l'essai
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 16
    Points
    16
    Par défaut
    Merci bien zipe, cela à l'air de fonctionner parfaitement, tout est bien effectuer, je verrais au fur et a mesure de mes visites sur le site si des erreurs apparaissent mais de ce que j'en ai vu cela fonctionne.

    Par contre je souhaiterais une dernière mise au point au niveau du code, car beaucoup de choses que je ne comprend pas m'intrigue :

    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
    #on définit un marqueur
    :z
     
    #On définit une chaîne de caractère que l'on cherche et qui comment par $.*=.*reqmysql , par contre pourquoi |\t\+\ je n'ai pas compris ca
    /\(^\|\t\+\)\$.*=.*reqmysql/{
     
    #si le début est bon on regarde si la fin est différente de ; ou ; # quelque chose apreès
    /) *\(;\|; *#.*\)$/ !{
     
    #si c'est le cas, on ajoute la ligne suivante
        N
     
    #là je n'ai pas compris, \n signifie saut de ligne
        /\n *$/{
     
    # là on se branche à la fin du script je suppose
        b
    }
     
    #là on se branche à l'étiquette z
        b z
    }
     
    #dès que la fin de ligne correspond
    /\(^\|\t\+\)\$.*) *\(;\|; *#.*\)$/ {
     
    #on effectue cette action
    s/\(.*\$[^ ]*[^=]*\)\( *=.*reqmysql.*) *;.*\)$/\1\2\n\1->execute();/
     
    #on se branche à la fin du script
        b
    }
     
    #on ferme le script
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Retour à la ligne après une certaine balise (sed ?)
    Par openlife dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 19/04/2011, 19h32
  2. Caractère de retour à la ligne.
    Par Pari dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 18/03/2009, 09h59
  3. [JTextArea] Fichier et retour à la ligne
    Par eraim dans le forum Composants
    Réponses: 4
    Dernier message: 23/06/2004, 08h21
  4. [MFC] Retour à la ligne dans un CEdit
    Par Kant dans le forum MFC
    Réponses: 7
    Dernier message: 18/02/2004, 08h58
  5. Conserver les retours à la ligne
    Par arwen dans le forum ASP
    Réponses: 2
    Dernier message: 04/12/2003, 12h50

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