Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
trouver une ligne...
Auteur Message
Répondre en citant
Message trouver une ligne... 
Bonjour !
Alors voilà, j'ai un problème, je suis en train de faire un programme, qui lit et édite des fichiers, et j'aimerais sur un fichier à plusieurs lignes qu'il puissent sélectionner une ligne en particuliuer..
En gros, voici une illustration :
Le fichier texte :
Bonjour
salut
Hello
ss
Et imaginons que je veuille que la ligne 3 (Hello) soit dans une variable, quelle commande je dois éxecuter ?
Merci d'avance !
EDIT : Et imaginons également que je veuille changer la ligne 3, pour transformer le Hello en Bye, comment faire ?




______________________________________________________
Visiter le site web du posteur
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message trouver une ligne... 
Hello,
Voici un code qui permets de lire le fichier texte...
[Vive la boucle for!]
Code:
@echo off
setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
set num=0
echo contenu de fichier_texte :
echo.

For /f "delims=" %%$ in (fichier_texte.txt) do (
   set /a num+=1
   set ligne!num!=%%$
   echo %%$
)

echo un exemple : ligne 3="%ligne3%"
pause>nul


par contre pour le modifier,je crois qu'il va aussi falloir une boucle for : soit les autres membres la font,soit je commence à la créer...

PS: petit gâchis de moral mais ça vaut quant même le coup de continuer ton projet car il sera en batch : un éditeur de texte pour ligne de commandes mais codé en C


EDIT : nouveau code.

J'ai fait un petit code pour toi :
Juste un bug inconnu pour réécrire sur une ligne...Je cherches toujours pourquoi ça ne marches pas.
Pour l'idée du logiciel,je me suis un peu inspiré de ma commande externe ConsoleINI (le lien est dans mon commentaire de profil)...
Code:
@echo off
   mode con cols=150 lines=100
   setlocal ENABLEDELAYEDEXPANSION ENABLEEXTENSIONS
   title Editeur de texte en batch par LT-Soft. Vous pouvez modifier comme vous voulez le code source du programme.
   set /p "fichier=droppez un fichier dans la fenˆtre ou entrez son nom complet et validez >>"
:debut
   set num=0
      ::supprime les variables
      for /f "delims=[=]" %%a in ('set ligne') do (set %%a=)
   cls
   echo contenu de %fichier% :
   echo ___________________________________________________
   echo.
   ::cree les variables
   For /f "delims=" %%$ in (%fichier%) do (
      set /a num+=1
      set ligne!num!=%%$
      echo !num!³%%$
   )   
   echo.
   echo ___________________________________________________
   echo.
   echo [1]Modifier une ligne [2]Continuer … taper du texte
   echo [3]Charger un fichier [4]Quitter
   
   Choice /c 1234
   goto %errorlevel%
   
:1
   set /p "UNligne=entrez un num‚ro de ligne>"
   echo changez sa valeur :
   set /p "UNvaleur=%UNligne%³"
   echo.&echo ˆtes vous sur de vouloir changer sa valeur?&echo.
   echo ³   [1] OUI    ³   [2] NON   ³ &echo.
   choice /c 12
   if errorlevel 2 goto debut

   echo criture du fichier en cours...Patientez s'il vous plait.
      set ligne%UNligne%=%UNvaleur%
      echo.>"%fichier%"
      for /f "tokens=2* delims=[=]" %%a in ('set ligne') do (echo %%a>>"!fichier!")
   echo termin‚.  &echo.&echo.&pause>nul
   goto debut
:2
   echo ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿
   echo ³Vous continuez … tapez du texte sur le fichier en cours³
   echo ³       Tapez #exit pour quitter la pr‚sentation        ³
   echo ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ
   set /a num+=1
   echo.>>"%fichier%
   :2_boucle
      set /p "entree=%num%³"
      if "%entree%"=="#exit" goto debut
      echo %entree%>>"%fichier%"
      set /a num+=1
   goto 2_boucle
:3
   echo.
   set /p "fichier=droppez un fichier dans la fenˆtre ou entrez son nom complet et validez >>"
   goto debut
:4
exit





______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Répondre en citant
Message trouver une ligne... 
J'ai hâte de voir ton programme Okay

EDIT :


Si jamais tu bloque sur quelques choses, inspire-toi de ça :
(Les "à" sont des "�" ici, je met le code sur pastebin)

Lien du code : http://pastebin.com/xpd1BL82

Code:
@echo off

::Permet d'afficher les accents lorsque le fichier est encodé en ANSI (encodage par défaut)
chcp 28591 > nul

::Ceci va nous servir pour les variables dans les boucles for
setlocal EnableDelayedExpansion EnableExtensions

::permet de revenir au début du programme lorsque le programme sera terminé
:back

::On va compter le nombre de ligne dans le fichier avec cette variable
set /a num=1

::On demande à l'utilisateur de faire un glisser/déposer ou d'écrire le nom du fichier
set /p file="Fichier à modifier : "

::Ce petit code va nous permettre d'enlever les guillemets ---->
::On enlève les guillemets car si l'utilisateur fait un glisser/déposser : le script affichera "Fichier introuvable"
::car il y aura des guillemets en double
echo "%file%"> "%programdata%\temp"
setlocal EnableDelayedExpansion
type nul > "%programdata%\CaB.txt"
for /F "delims=" %%A in ('type "%programdata%\temp"') do (
  set row=%%A
  set row=!row:"=!
  echo.!row!>> "%programdata%\CaB.txt"
)
del "%programdata%\temp"
ren "%programdata%\CaB.txt" temp
set /p file=<"%programdata%\temp"



::On vérifie si le fichier est bon (qu'il existe)
if not exist "%file%" goto :error_file


::On demande à l'utilisateur de choisir la ligne qu'il veut modifier
:back_line
set /p "line=Ligne à modifier : "


::On vérifie que le numéro de ligne est bien un nombre
for /f "delims=0123456789" %%a in ("%line%") do (
   goto :error_line
)


::On sauvegarde le nombre de la ligne à afficher
set /a nb_line=%line%
echo.


::On met la ligne dans la variable line
for /f "tokens=*" %%a in ('type "%file%"') do (
   if "!line!"=="!num!" set "line=%%a"
   set /a num+=1
)


::On vérifie si la ligne existe
if "%line%"=="%nb_line%" goto :error_nb_line


::On réinitialise la variable num
set /a num=1


::On affiche la ligne à modifier
echo.
echo Ligne qui va être modifier :
echo.
echo        " %line% "
echo.


::On demande à l'utilisateur de remplacer la ligne qui va être modifier par autre chose
set /p "edit_line=Remplacer par : "


::On applique le changement
for /f "tokens=*" %%a in ('type "%file%"') do (
   if "!num!"=="1" (
      if "!nb_line!"=="!num!" (
         echo %edit_line%> "%programdata%\temp"
      ) else (
         echo %%a> "%programdata%\temp"
      )
   ) else (
      if "!nb_line!"=="!num!" (
         echo %edit_line%>> "%programdata%\temp"
      ) else (
         echo %%a>> "%programdata%\temp"
      )
   )
   set /a num+=1
)


::On supprime l'ancien fichier qui contient l'ancienne ligne
del "%file%"


::On copie "%programdata%\temp" à l'emplacement de %file% et on le renomme avec le nom du fichier %file%
copy "%programdata%\temp" "%file%"


::On supprime le fichier temp
del "%programdata%\temp"

::On vérifie que le fichier temp a bien été copier et renommer à l'emplacement %file%
::S'il n'a pas été copier et renommer c'est que l'UAC bloque l'accès au fichier et qu'il est nécessaire d'exécuter ce programme en mode administrateur
if not exist "%file%" goto :error_file_droit

echo.
echo Modification de la ligne %nb_line% du fichier %file% avec succès !
echo.
echo.


::On écrit cette ligne sans retour à la ligne pour simuler un "vrai" pause :)
set/p =Appuyer sur n'importe quel touche pour revenir au début du programme..<nul
pause>nul
cls
goto :back



:: #### Les messages d'erreurs ####
:error_file
cls
echo Le fichier sélectionné n'existe pas !
echo.
pause
cls
goto :back
:error_line
cls
echo La ligne ne correspond pas à un nombre !
echo.
pause
cls
echo Fichier à modifier : %file%
goto :back_line
:error_nb_line
cls
echo Le fichier ne contient que %num% lignes !
echo.
pause
cls
echo Fichier à modifier : %file%
goto :back_line
:error_file_droit
cls
echo Impossible de créer le fichier !
echo Veuillez exécuter ce script en mode administrateur !
echo.
pause
cls
goto :back



J'ai mis des commentaires partout, j'espère que c'est assez bien expliqué (je dis ça parce que pour expliquer quelques choses j'ai souvent un peu du mal, j'ai fait de mon mieux Okay )


Il te reste plus qu'à regarder, comparer avec ton code, apprendre de ce code, faire un beau menu avec beaucoup d'option si ce n'est pas déjà fait et sûrement beaucoup de couleur (faut que ce soit éblouissant Mr. Green )


Sinon bonne continuation pour ton programme Okay




EDIT 2 : Si tu veux participer à ce projet : http://batch.xoo.it/t5324-Gestionnaire-de-commandes-externes-outils-batch.htm#p40137 tu peux, il faudra juste m'aider à envoyer des commandes externes ou tes commandes externes sur mon site (http://batch-external-controls.site88.net/), il faut juste le code source et le code de génération Okay



Et ce site aura pour but de référencer toutes les commandes externes : http://batch-external-controls.site88.net/
Dis-moi ce que tu pense du site ici : http://batch.xoo.it/t5345-Icone-pour-le-site-et-quelques-demandes.htm

Je ferai une commande externe et un logiciel relié à ce site Okay



Il faudra télécharger ma commande externe et mettre ce code dans un code batch pour avoir accès à n'importe quel commande :
Code:
get <commande_externe>





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message trouver une ligne... 
Logan t, j'ai regardé vite fait ton code est le problème vient de cette ligne :

Code:
 for /f "tokens=2* delims=[=]" %%a in ('set ligne') do (echo %%a>>"!fichier!")


Et cette ligne peut poser problème :
Code:
For /f "delims=" %%$ in (%fichier%) do (



Si tu ne trouve pas par quoi les remplacer dis le moi et je te donne la correction Okay




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message trouver une ligne... 
Flammrock a écrit:
Logan t, j'ai regardé vite fait ton code est le problème vient de cette ligne :

Code:
 for /f "tokens=2* delims=[=]" %%a in ('set ligne') do (echo %%a>>"!fichier!")


Et cette ligne peut poser problème :
Code:
For /f "delims=" %%$ in (%fichier%) do (



Si tu ne trouve pas par quoi les remplacer dis le moi et je te donne la correction Okay


Hello,j'ai trouvé l’erreur...
Je crois que Set trie les variables par dates de modifications ce qui entraine quelques erreurs...



Je pense qu'il faut juste modifier la boucle for (genre faire un for /l ...)




______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Répondre en citant
Message trouver une ligne... 
set trie dans l'ordre alphabétique donc :
Code:
ligne1
ligne10
car il commence par ligne1
et bien après
Code:
ligne9


il faudrait faire par une boucle for :
Code:
for /l %%A in (0,1,%nbrlignes%) do echo %ligne%%A%





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Répondre en citant
Message trouver une ligne... 
ok Okay
Dommage que ton script ne gère pas les erreurs, faut tous prévoir dans un script Mr. Green




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message trouver une ligne... 
TSnake41 a écrit:
set trie dans l'ordre alphabétique donc :
Code:
ligne1
ligne10
car il commence par ligne1
et bien après
Code:
ligne9

OK,merci mais j'avais trouvée une autre solution pour réparer le problème avant : une simple boucle for /l.
Code:
::ligne 67
   REM Modification d'une érreur : remplacement par une boucle For /l
      for /l %%a in (1,1,%num%) do (echo !ligne%%a!>>"!fichier!")


EDIT : vous avez fait des modifications pendant que je rédigeais mon message... Crying or Very sad Evil or Very Mad



Dernière édition par logan T le Lun 1 Aoû 2016 - 11:36; édité 1 fois

______________________________________________________
LT-S Batch explorer :Un explorateur en Batch
ConsoleINI : utilisez des fichiers INI dans vos Batch
Epileptic : un mini jeu de rapidité
Faites parler votre téléphone avec mon app android
Mon site pour voir tout mes autres programmes
Visiter le site web du posteur Skype
Répondre en citant
Message trouver une ligne... 
logan T a écrit:
TSnake41 a écrit:
set trie dans l'ordre alphabétique donc :
Code:
ligne1
ligne10
car il commence par ligne1
et bien après
Code:
ligne9

OK,merci mais j'avais trouvée une autre solution pour réparer le problème avant : une simple boucle for /l.
Code:
::ligne 67
   REM Modification d'une érreur : remplacement par une boucle For /l
      for /l %%a in (1,1,%num%) do (echo !ligne%%a!>>"!fichier!")

Plus simple :
Code:
(for /l %%a in (1,1,%num%) do echo !ligne%%a!)>"!fichier!





______________________________________________________
Partager permet le savoir. Le savoir permet de partager de nouveau savoirs.
Message trouver une 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