Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]écriture dans un fichier à l'avant dernière ligne
Auteur Message
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
Bonjour,Tout est dans le titre.

Je rédige un fichier JSON à partir d'un batch.
Le contenu du code est dans la variable %created%
Le fichier à écrire existe déjà.On peut faire écho mais voila le problème :
info a écrit:
Structure d'un JSON :
Code:
{
bout de code
%created%
le problème est ce caractère :
 }


je sais pas si je l'ai bien expliqué mais voici un exemple :
fichier.JSON Avant
Code:
{
"bout": {"de":"code"}
"pour": {"le moment":"pas de probleme"}
"mais": {"je":"dois","écrire":"ici"}
}

fichier.JSON Après
Code:
{
"bout": {"de":"code"}
"pour": {"le moment":"pas de probleme"}
"mais": {"je":"dois","écrire":"ici"}
"voila": {"un":"texte ecrit"}
}


Donc mon but est d'écrire à l'avant dernière ligne sans pour autant supprimer ce qui se trouve avant ce que l'on doit écrire>.
Sachez que je travaille aussi en ce moment à ce problème.
Voilà,merci pour vos prochaines réponses !




Dernière édition par logan T le Sam 24 Déc 2016 - 12:36; édité 4 fois

______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
J'ai créé ce code ,je me suis inspiré du fonctionnement de ma fonction/commande externe ConsoleINI.
et tout marche ^^ !
Bien que mal optimisé,après des tests,cela reste toujours rapide.

Code:

@echo off
setlocal enabledelayedexpansion

rem definition des varables
set created="voila": {"un":"texte ecrit"}
set compteur=0

rem boucle for pour sauvegarder ligne par ligne le contenu du fichier JSON
for /f "delims=" %%i in ('type saved.json') do (
set /a compteur+=1
set ligne!compteur!=%%i)

rem remplace la dernière ligne par le contenu de %created%
set ligne%compteur%=%created%

rem écriture dans le fichier
echo {>saved.json
for /l %%i in (2,1,%compteur%) do echo !ligne%%i!>>saved.json
echo }>>saved.json





______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
Dans ton fichier, je remarque que la fin est "}", donc si il se trouve en début de ligne, on suppose que c'est la fin du fichier.

Au final, ça donne ça :
Code:
@Echo off
setlocal enabledelayedexpansion
set file=test.json
set out=CON
set add="voila": {"un":"texte ecrit"}

for /f "tokens=*" %%A in (%file%) do (
   set l=%%A
   if "!l:~0,1!"=="}" echo %add%
   echo %%A
) > %out%

pause
Sinon, dans le cas où ça peut être autre chose, on a pas d'autres choix que de lire le fichier (ce qui est le cas également en C).
Je te propose une version plus optimisée que la tienne
Code:
@Echo off
setlocal enabledelayedexpansion
set file=test.json
set out=CON
set add="voila": {"un":"texte ecrit"}
set count=-1

for /f %%A in (%file%) do set /a count+=1

for /f "delims=*" %%A in (%file%) do (
   if !count! EQU 0 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
TSnake41 a écrit:
....
Code:
@Echo off
setlocal enabledelayedexpansion
set file=test.json
set out=CON
set add="voila": {"un":"texte ecrit"}
set count=-1

for /f %%A in (%file%) do set /a count+=1

for /f "delims=*" %%A in (%file%) do (
   if !count! EQU 0 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause

juste une question pourquoi avoir mis "con" dans %out%?

EDIT :
en fait j'ai compris c'est juste pour afficher le résultat dans la console.
il suffit juste de modifier %out%




______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
j'ai testé ce code un peu modifié :
Code:
@Echo off
setlocal enabledelayedexpansion
set file=saved.json
set out=saved.json
set add="voila": {"un":"texte ecrit"}
set count=0

for /f %%A in (%file%) do set /a count+=1

for /f "delims=*" %%A in (%file%) do (
   if !count! EQU 1 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause

mais le code efface tout ce qui est avant
Code:
"voila": {"un":"texte ecrit"}
}


et même résultat avec l'autre code.
ça marche sur une console mais pas avec un fichier...




______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
logan T a écrit:
j'ai testé ce code un peu modifié :
Code:
@Echo off
setlocal enabledelayedexpansion
set file=saved.json
set out=saved.json
set add="voila": {"un":"texte ecrit"}
set count=0

for /f %%A in (%file%) do set /a count+=1

for /f "delims=*" %%A in (%file%) do (
   if !count! EQU 1 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause

mais le code efface tout ce qui est avant
Code:
"voila": {"un":"texte ecrit"}
}


et même résultat avec l'autre code.
ça marche sur une console mais pas avec un fichier...
Oops, j'avais mis delims=*, normal que ça marche pas Mr. Green.

Code:
@Echo off
setlocal enabledelayedexpansion
set file=saved.json
set out=saved.json
set add="voila": {"un":"texte ecrit"}
set count=0

for /f %%A in (%file%) do set /a count+=1

for /f "tokens=*" %%A in (%file%) do (
   if !count! EQU 1 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
TSnake41 a écrit:

Oops, j'avais mis delims=*, normal que ça marche pas Mr. Green.

Code:
@Echo off
setlocal enabledelayedexpansion
set file=saved.json
set out=saved.json
set add="voila": {"un":"texte ecrit"}
set count=0

for /f %%A in (%file%) do set /a count+=1

for /f "tokens=*" %%A in (%file%) do (
   if !count! EQU 1 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause

toujours le même problème...




______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
logan T a écrit:
TSnake41 a écrit:

Oops, j'avais mis delims=*, normal que ça marche pas Mr. Green.

Code:
@Echo off
setlocal enabledelayedexpansion
set file=saved.json
set out=saved.json
set add="voila": {"un":"texte ecrit"}
set count=0

for /f %%A in (%file%) do set /a count+=1

for /f "tokens=*" %%A in (%file%) do (
   if !count! EQU 1 echo %add%

   echo %%A
   set /a count-=1
) > %out%

pause

toujours le même problème...
Evite d'utiliser la sortie en tant que fichier d'entrée, car sinon, tu supprime le contenu du fichier avant même de l'avoir lu.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
TSnake41 a écrit:
Evite d'utiliser la sortie en tant que fichier d'entrée, car sinon, tu supprime le contenu du fichier avant même de l'avoir lu.

Donc à ce moment là il vaut mieux utiliser la méthode de départ.
Parce-que si j'utilise ta méthode,il faut le mettre dans un fichier temporaire et remplacer ce fichier par le fichier d'origine.




______________________________________________________
Compte inactif à partir de décembre 2016.
Ancien site
Nouveau site et site en contruction
Nombre de vues du profil :
Visiter le site web du posteur Skype
Répondre en citant
Message [R]écriture dans un fichier à l'avant dernière ligne 
logan T a écrit:
TSnake41 a écrit:
Evite d'utiliser la sortie en tant que fichier d'entrée, car sinon, tu supprime le contenu du fichier avant même de l'avoir lu.

Donc à ce moment là il vaut mieux utiliser la méthode de départ.
Parce-que si j'utilise ta méthode,il faut le mettre dans un fichier temporaire et remplacer ce fichier par le fichier d'origine.
Oui, si tu regarde le code, on lit le fichier en même temps qu'écrire le nouveau.




______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message [R]écriture dans un fichier à l'avant dernière ligne 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch