[R] Problème de remplacement de ligne

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

[R] Problème de remplacement de ligne

#1

Message par nunurs »

Bonjour, excusez moi de vous déranger mais je rencontre un problème lors de l'exécution de mon script. Le remplacement de la ligne ne s'effectue pas, si j'ouvre par un autre fichier alors uniquement cette commande la cela fonctionne, donc l'erreur de mon script doit se situer en amont
La premiere partie du script recherche la ligne où se trouve le texte et donne en résultat un numero de ligne utilisé pour la 2eme partie, meme si je rentre le numéro de ligne manuellement j'ai la meme erreur.

Code : Tout sélectionner

#Include <File.au3>

$pseudo = InputBox("Script By Nunurs","Quel est votre pseudo?"&@CRLF&@CRLF&"Ne pas utiliser de caractere speciaux","","")
$NomFichier = "server.cfg" ; le nom du fichier a parcourir


$ChaineRecherchee = "seta sv_hostname" ; le nom de l'utilisateur en  cours
$Resultat = "" ; le début de la popup en cas de résultat
$Trouve = False ; le switch qui indiquera si on trouve
$i=1 ; le compteur de lignes

$Fichier = FileOpen(@ScriptDir & "\players2\" & $NomFichier, 0) ; on ouvre le fichier
If $Fichier = -1 Then ; Vérification que le fichier est correctement ouvert
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier")
    Exit
EndIf

While 1 ; Et on parcourt le fichier...
    $ligne = FileReadLine($Fichier) ; ... en lisant chaque ligne...
    If @error = -1 Then ; ... jusqu'a la fin...
        ExitLoop
    Else
        If StringInStr($ligne,$ChaineRecherchee,2) <> 0 Then ; Si on trouve la chaine a chercher dans la ligne
            $Resultat = $Resultat & $i  ; ... on l'inscrit dans les résultats ...
            $Trouve = True ;... et on précise qu'on a trouvé

        EndIf
        $i = $i + 1 ; On incrémente le compteur de ligne
    EndIf

Wend

FileClose($NomFichier) ; on n'oublie pas de fermer le fichier

if $Trouve = True Then; Si on a trouvé...

Else ; ... sinon ...
    MsgBox(0,"Résultat", chr(34) & $ChaineRecherchee & chr(34) & " n'a pas été trouvé")
EndIf
FileClose(@ScriptDir & "\players2\server.cfg")



_FileWriteToLine(@ScriptDir & "\players2\server.cfg", $Resultat, 'seta sv_hostname "MW3 de ' & $pseudo & '"',1)
if @error Then
    MsgBox(4096,"Error", @error)
    EndIf
 
Quand je l'exécute tout se passe bien sauf la derniere partie de remplacement de ligne qui me met l'erreur numéro 3.

Si vous avez une idee de réponse ca m'aiderai grandement.

Cordialement.
Nunurs
Modifié en dernier par nunurs le sam. 28 avr. 2012 13:48, modifié 1 fois.
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#2

Message par nunurs »

Apparement c'est la premiere partie qui ne ferme pas le fichier mais je ne vois pas comment ...
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#3

Message par PandiPanda »

Bonjour,
j'ai parcouru vite fait votre code et remarqué que vous vous trompé dans "ce que contient" chaque variable

$NomFichier est une variable qui contient une chaine de caractere, plus loin vous faites ...

Code : Tout sélectionner

FileClose([color=#BF0000]$NomFichier[/color]) ; on n'oublie pas de fermer le fichier
Or avant vous avez fait ...

Code : Tout sélectionner

[color=#008000]$Fichier[/color] = FileOpen(@ScriptDir & "\players2\" & [color=#BF0000]$NomFichier[/color], 0) ; on ouvre le fichier
ceci répond à votre question, en effet vous ne fermez jamais le "1er fichier"

Bonus: cette fonction devrai vous facilité la tâche ... _ReplaceStringInFile()
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#4

Message par nunurs »

J'essai de regarder ca merci de votre aide
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#5

Message par nunurs »

Oui c'était une erreur d'inattention de ma part lors de différents test,

Code : Tout sélectionner

#include <File.au3>



$pseudo = InputBox("Script By Nunurs", "Quel est votre pseudo?" & @CRLF & @CRLF & "Ne pas utiliser de caractere speciaux", "", "")



$NomFichier = "server.cfg" ; le nom du fichier a parcourir

$ChaineRecherchee = "seta sv_hostname" ; le nom de l'utilisateur en  cours
$Resultat = "" ; le début de la popup en cas de résultat
$Trouve = False ; le switch qui indiquera si on trouve
$i = 1 ; le compteur de lignes
$Fichier = FileOpen(@ScriptDir & "\players2\" & $NomFichier, 0) ; on ouvre le fichier

If $Fichier = -1 Then ; Vérification que le fichier est correctement ouvert
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier")
    Exit
EndIf

While 1 ; Et on parcourt le fichier...
    $ligne = FileReadLine($Fichier) ; ... en lisant chaque ligne...
    If @error = -1 Then ; ... jusqu'a la fin...
        ExitLoop
    Else
        If StringInStr($ligne, $ChaineRecherchee, 2) <> 0 Then ; Si on trouve la chaine a chercher dans la ligne
            $Resultat = $i ; ... on l'inscrit dans les résultats ...
            $Trouve = True ;... et on précise qu'on a trouvé
        EndIf
        $i = $i + 1 ; On incrémente le compteur de ligne
    EndIf

WEnd

FileClose($Fichier) ; on n'oublie pas de fermer le fichier
MsgBox(0, "Erreur", @error)

If $Trouve = True Then; Si on a trouvé...
Else ; ... sinon ...
    MsgBox(0, "Résultat", Chr(34) & $ChaineRecherchee & Chr(34) & " n'a pas été trouvé")
EndIf



If @ScriptDir & "\players2\server.cfg" = -1 Then ; Vérification que le fichier est correctement ouvert
    MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier")
Else
    MsgBox(0, "Erreur", "fichier ouvert")
    Exit
EndIf
_FileWriteToLine(@ScriptDir & "\players2\server.cfg", $Resultat, 'seta sv_hostname "MW3 de ' & $pseudo & '"', 1)
If @error Then
    MsgBox(4096, "Error", @error)
EndIf
Cela ne fonctionne toujours pas il me dit que le fichier est encore ouvert.. La fonction que vous m'avez indiqué semble intéressante mais je dois effacer la ligne entiere pour réecrire ce que je souhaite, parce la ligne par defaut est "seta sv_hostname "MW3 de Nunurs" et je voudrais qu'a chaque lancement du script , qu'il soit possible de changer le pseudo, donc je me disais que le plus simple était de rechercher la ligne qui commence par "seta sv_hostname", de l'effacer la ligne et de réecrire a la place le debut et finir par le pseudo.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#6

Message par mikell »

Tu posterais pas une copie de ce fichier ? ça irait plus vite
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#7

Message par nunurs »

http://lutte.verygames.net/script/

J'ai mis dessus mon script complet ainsi que le fichier server.cfg . Il se trouve normalement dans le repertoire "players2".

Cordialement
Eric
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#8

Message par mikell »

Bon, j'arrive pas à accéder à ton lien...
D'après ta description, ce script pourrait le faire (à tester)

Code : Tout sélectionner

$cfg= FileRead("\players2\server.cfg")
$txt = StringRegExpReplace($cfg, 'sv_hostname(.*?)\s', 'sv_hostname "MW3 de ' & $pseudo & '"')
$file = FileOpen("\players2\server.cfg", 2)
FileWrite($file, $txt)
FileClose($file)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#9

Message par nunurs »

J'ai mis les fichiers en pieces jointes mais il faut renommer l'extension du fichier server en .cfg.
J'ai testé ton code dans un script presque vide :

Code : Tout sélectionner

$pseudo = InputBox("Script By Nunurs","Quel est votre pseudo?"&@CRLF&@CRLF&"Ne pas utiliser de caractere speciaux","","")


$cfg= FileRead("\players2\server.cfg")
$txt = StringRegExpReplace($cfg, 'sv_hostname(.*?)\s', 'sv_hostname "MW3 de ' & $pseudo & '"')
$file = FileOpen("\players2\server.cfg", 2)
FileWrite($file, $txt)
FileClose($file)

Mais il ne se passe rien, j'ai du faire une erreur quelque part ://.

Cordialement
Eric
Fichiers joints
script MW3.au3
(2.21 Kio) Téléchargé 51 fois
server.txt
Renommer l'extension en .cfg
(2.64 Kio) Téléchargé 52 fois
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#10

Message par mikell »

J'ai testé ce script sur ton fichier, il marche
Surtout fais bien attention à la syntaxe pour le chemin du fichier

Code : Tout sélectionner

$cfg= FileRead(".\players2\server.cfg")

Code : Tout sélectionner

_ChangePseudo("server.txt", "mikell")

Func _ChangePseudo($fichier, $pseudo)
    $cfg= FileRead($fichier)
    $txt = StringRegExpReplace($cfg, '(sv_hostname)(.*?)(\n|\r)', '$1' & ' "MW3 de ' & $pseudo & '"' & '$3')
    $file = FileOpen($fichier, 2)
    FileWrite($file, $txt)
    FileClose($file)
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#11

Message par nunurs »

Je n'ai pas compris a 100% ton dernier post la désolé, une fois tu mets server.txt, une autre server.cfg , avant que tu l'edites je comprenais plus. Désolé un peu perdu la
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#12

Message par mikell »

Oui j'ai testé d'abord sur le fichier txt
Mais on s'en fout, l'essentiel c'est que le script fonctionne, il te suffit juste de mettre le nom et le chemin qu'il faut et ça ira :wink:
par exemple

Code : Tout sélectionner

_ChangePseudo(".\players2\server.cfg", "mikell")
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#13

Message par nunurs »

Et comme le pseudo est mis par l'utilisateur je mets _ChangePseudo(".\players2\server.cfg", $pseudo) ??
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#14

Message par mikell »

Oui
Essaye juste de ne pas utiliser le même nom de variable que celui qui est utilisé dans la fonction

Code : Tout sélectionner

$user = Inputbox(....)
ou
$user = GuiCtrlRead(....)

_ChangePseudo(".\players2\server.cfg", $user)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#15

Message par nunurs »

Voila alors ca fonctionne comme ca

Code : Tout sélectionner

;Définition du chemin pour le changement de Pseudo dans jeu
$chemin = (".\teknogods.ini")
;Génération d'un ID aléatoire allant de 1 a 7848773
$nombre = Random(1, 7848773, 1)

;Définition du Pseudo
$pseudo = InputBox("Script By Nunurs", "Quel est votre pseudo?" & @CRLF & @CRLF & "Ne pas utiliser de caractere speciaux", "", "")


$cfg= FileRead(".\players2\server.cfg")

_ChangePseudo(".\players2\server.cfg", $pseudo)

Func _ChangePseudo($fichier, $pseudo)
    $cfg= FileRead($fichier)
    $txt = StringRegExpReplace($cfg, '(sv_hostname)(.*?)(\n|\r)', '$1' & ' "MW3 de ' & $pseudo & '"' & '$3')
    $file = FileOpen($fichier, 2)
    FileWrite($file, $txt)
    FileClose($file)
EndFunc
et comme ca

Code : Tout sélectionner

;Définition du Pseudo
$pseudo = InputBox("Script By Nunurs", "Quel est votre pseudo?" & @CRLF & @CRLF & "Ne pas utiliser de caractere speciaux", "", "")
IniWrite($chemin, "Settings", "Name", $pseudo);Injection du pseudo dans le fichier correpondant
IniWrite($chemin, "Settings", "ID", $nombre);Injection d'un nouvel ID
FileCreateShortcut(".\TeknoMW3.exe", @DesktopDir & "\Call Of Duty MW3.lnk", @ScriptDir & "\", "", "", @ScriptDir & "\icone.ico"); Raccourci sur le bureau avec icone


$cfg= FileRead(".\players2\server.cfg"); Lecteur du fichier server.cfg
$txt = StringRegExpReplace($cfg, '(sv_hostname)(.*?)(\n|\r)', '$1' & ' "Serveur MW3 de ' & $pseudo & '"' & '$3'); remplacement de la ligne dans lekel se trouve sv_hostname
$file = FileOpen(".\players2\server.cfg", 2); Ouverture du fichier server.cfg
FileWrite($file, $txt); écriture sur le fichier server.cfg sur la ligne correspondant a sv_hostname.....
FileClose($file); Fermeture du fichier
 
Merci de ton aide :)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème de remplacement de ligne

#16

Message par mikell »

Image
Enfin bon si ça foctionne c'est le principal...
Manque plus que le [R] dans le titre
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
nunurs
Niveau 2
Niveau 2
Messages : 16
Enregistré le : ven. 27 avr. 2012 15:05
Status : Hors ligne

Re: [R] Problème de remplacement de ligne

#17

Message par nunurs »

Voila c'est fait, merci :)
Répondre