Page 1 sur 1
[R] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 21:20
par corrs78
Bonjour,
j'ai besoin de faire un petit script qui écrit dans une fichier " *.properties "
j'ai bien tenté d'utiliser les fonction FileWriteLine() ou _FileWritetoline() mais je n'obtiens pas satisfaction.
concrètement, il faut que Je vérifie si 4 lignes existent et si ce n'est pas le cas
il faut que je les insère (peut importe l'endroit)
Ce fichier comporte d'autres lignes (paramètres qui peuvent varier) qui doivent évidement ne pas être écrasées
Merci pour votre concours.
Cdlt.
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 21:21
par Tlem
Ces 3 lignes sont elles identifiées et fixes ?
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 21:28
par corrs78
Et non justement c'est bien ça la difficulté. Selon les para métrages de l'application il y a plus ou moins de ligne (entre 3 et 10) et elles ne sont pas forcément à la même place, même si ce dernier critère n'a pas d'importance.
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 21:34
par Tlem
Alors sur quoi comptez vous vous baser pour savoir si telle ou telle ligne est présente ?
Y à t-il un ou plusieurs éléments fixes ?
Edit : Un exemple concret de deux situations serait d'un grand secours pour minimiser les questions futures.
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 21:51
par corrs78
Désolé je n'avais pas compris la question. En fait le numéro de la ligne importe peu mais ces trois lignes ont en effet une valeur fixe. Elles ne changent jamais. Mais par contre dans le fichier présent il y a une plusieurs lignes fixes qui peuvent êtres la ou pas en fonction des paramètres valides manuellement dans l'applications. Je vous donne un exemple concret des lundi si vous souhaitez. Désolé si je suis confus
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : ven. 31 janv. 2014 22:33
par mikell
C'est effectivement confus
Ce qu'il faut obligatoirement savoir c'est LE critère/mot/phrase/string qui permet de définir *précisément* la ligne en question - sans risque de confusion avec une autre - et donc de détecter sa non-existence éventuelle
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : lun. 03 févr. 2014 12:24
par corrs78
Bonjour, comme convenu voici le "fichier type" que je modifier (ou pas) :
Code : Tout sélectionner
#Fri Jan 31 11:02:11 CET 2014
locale=fr_FR
spreadsheet=OPEN_OFFICE
[color=#FF0000]proxy.server.port=3128[/color]
[color=#FF0000]proxy.server.url=192.168.1.1[/color]
oo.file=C\:\\Program Files (x86)\\LibreOffice 4.0\\program\\scalc.exe
[color=#FF0000]proxy.use.authentication=true[/color]
[color=#FF0000]proxy.server.used=true[/color]
police.size=SMALL
En rouge, ce sont les 4 lignes que je dois impérativement ajouter (seulement dans le cas ou elles n'existeraient pas déjà)
l'ordre de ces lignes importe peu.
La "valeur" de ces 4 chaines est invariable.
Les autres lignes sont variables, elle peuvent d'ailleurs ne pas être présentes ou d'autres peuvent être ajoutées (en fonction du paramètrage de l'application concernée par ce "fichier de configuration")
j'espère que maintenant c'est plus clair.
Bonne semaines à tous et merci encore de votre contribution.
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : lun. 03 févr. 2014 14:03
par mikell
Ben voilà !
► Afficher le texte
Code : Tout sélectionner
Dim $array[4] = [ _
"proxy.server.port=3128", _
"proxy.server.url=192.168.1.1", _
"proxy.use.authentication=true", _
"proxy.server.used=true"]
Local $file = "test.properties", $modif = 0
$txt = StringStripWS(FileRead($file), 2) & @crlf
For $i = 0 to 3
If not StringInStr($txt, $array[$i]) Then
$txt &= $array[$i] & @crlf
$modif = 1
EndIf
Next
If $modif = 1 Then
FileOpen($file, 2)
FileWrite($file, $txt)
FileClose($file)
EndIf
Re: [..] Ecrire dans un fichier si lignes n'existent pas
Posté : lun. 03 févr. 2014 18:28
par corrs78
C'est parfait. cela fonctionne exactement comme je l’espérais.
En plus j'ai tout à fait compris le code, donc c'est un double merci.
A+
Re: [R] Ecrire dans un fichier si lignes n'existent pas
Posté : lun. 03 févr. 2014 20:27
par jguinch
Le code fourni par Mikell respecte le cahier des charges, mais que se passe-t-il si deux lignes avec des valeurs différentes sont présentes dans le fichier ?
Exemple :
► Afficher le texte
#Fri Jan 31 11:02:11 CET 2014
locale=fr_FR
spreadsheet=OPEN_OFFICE
proxy.server.port=3128
proxy.server.url=192.168.1.1
oo.file=C\:\\Program Files (x86)\\LibreOffice 4.0\\program\\scalc.exe
proxy.server.url=192.168.1.1
proxy.server.used=true
police.size=SMALL
proxy.server.used=false
Le plus propre serait quand même de modifier la ligne existante, non ?
Je dis ça pour aider hein, pas pour critiquer...

Re: [R] Ecrire dans un fichier si lignes n'existent pas
Posté : lun. 03 févr. 2014 21:44
par mikell
Des remarques, des sarcasmes, mais pas de code ? ... tsss
► Afficher le texte
Code : Tout sélectionner
Dim $array[4][2] = [ _
["proxy.server.port", "3128"], _
["proxy.server.url", "192.168.1.1"], _
["proxy.use.authentication", "true"], _
["proxy.server.used", "true"]]
Local $file = "test.properties", $modif = 0
$txt = StringStripWS(FileRead($file), 2) & @crlf
For $i = 0 to 3
If not StringInStr($txt, $array[$i][0] & "=" & $array[$i][1]) Then
$txt = StringRegExpReplace($txt, $array[$i][0] & '.*\R', "") ; vire la ligne inexacte si existe
$txt &= $array[$i][0] & "=" & $array[$i][1] & @crlf
$modif = 1
EndIf
Next
If $modif = 1 Then
FileOpen($file, 2)
FileWrite($file, $txt)
FileClose($file)
EndIf