BATCH lire un fichier ligne X

Fermé
Thyarflam - 1 nov. 2009 à 08:43
 librequetucrois - 12 févr. 2012 à 08:47
Bonjour, je connais le moyen de lire un fichier avec un point virgule ou un autre caractères sur la même ligne.
De ce type
mon ami;10949;kbu@wanadoo.fr;ect ...;


Par contre je n'arrive pas à lire ce type de schéma :
mon ami
1809398
kbu@gmail.com
http://www.monamiskuku.net/aymizi
Code Binaire de son ordinateur
1010111001010100111
[Ect]


Donc je voudrais quelle que chose de différent de :
for /f "tokens=1 delims=;" %%G IN (MonFichier.txt) DO echo %%G


Que doit-je faire comme code en BATCH ?
Merci d'avance
A voir également:

13 réponses

slt re

Code amélioré un peu :

* L'existante du fichier f1.txt est vérifié ; sortie si le fichier n'existe pas
* Le nombre des lignes dans f1.txt est récupéré automatiquement
* Vous pouvez choisir le numéro de ligne quand la question s'affiche
* Répondre 0 (zéro) vous fera sortir du programme

@echo off
cls

setlocal enableextensions enabledelayedexpansion

:debut

set afflign=
set compt=

If not exist "C:\Development Folder\Scripts\Nouveau dossier\f1.txt" (
echo Le fichier n'existe pas
echo fin
echo.
goto fin
)

for /f "delims=" %%i in ('type "C:\Development Folder\Scripts\Nouveau dossier\f1.txt"') do set /a compt+=1

rem !!!!!!!!!!! Quelle numero de ligne (0 (quit) to %compt%) ?1SpaceHere
set /p afflign= Quelle numero de ligne (0 (quit) to %compt%) ? 

if "%afflign%"=="0" goto fin

for /f  "tokens=1,* delims=:" %%a in ('findstr /n /r . "C:\Development Folder\Scripts\Nouveau dossier\f1.txt" ^| findstr "^%afflign%:"') do (
set l=%%b
echo !l!
)

goto debut

:fin
endlocal
echo.
echo Sortie ...
echo.
pause
exit /B


Pensez à changer le chemin pour le fichier et le nom ...

Astuce :

Utilisez la police "Lucida Console" dans le Bloc-notes Windows !
Cela permet de voir le texte comme dans l'invite de commandes :))
Les dessins restent avec les caractères spéciaux (...) ; pas de dessins.
"Lucida Console", Normal, 10, Occidental ...

Enregistrez au format Ansi (par défaut), sinon ça bug ; essayez Unicode.

/!\ Les fichiers pour le registre ".reg" sont en Unicode par contre.

merci
3
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 nov. 2009 à 09:32
si je veux la troisième ligne :
C:>\  type f1.txt
Comparaison des fichiers image1.jpg et IMAGE2.JPG
0000000C: 02 01
00000015: ED E1
00000016: 09 07
00000017: 6A DE
00000018: 50 45
00000019: 68 78
0000001A: 6F 69
0000001B: 74 66
0000001C: 6F 00
FC : IMAGE2.JPG est plus long que image1.jpg
C:>\  findstr /n "^" f1.txt | findstr "^3:"
3:00000015: ED E1
2
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
1 nov. 2009 à 08:56
hello
C:>\  type f1.txt
mon ami
1809398
kbu@gmail.com
http://www.monamiskuku.net/aymizi
Code Binaire de son ordinateur
1010111001010100111
[Ect]

C:>\ for /F "delims=" %a in ('type f1.txt') do @echo %a
mon ami
1809398
kbu@gmail.com
http://www.monamiskuku.net/aymizi
Code Binaire de son ordinateur
1010111001010100111
[Ect]
0
Merci quand même !
Disons que je veux choisir la ligne X.
Pour l'exemple c'était peut être pas ... disons pratique.
Voilà mon vrai fichier (Une partie) :

Comparaison des fichiers image1.jpg et IMAGE2.JPG
0000000C: 02 01
00000015: ED E1
00000016: 09 07
00000017: 6A DE
00000018: 50 45
00000019: 68 78
0000001A: 6F 69
0000001B: 74 66
0000001C: 6F 00
FCÿ: IMAGE2.JPG est plus long que image1.jpg


Et je veux faire une boucle pour retrouver la ligne X.
1 = Comparaison des fichiers image1.jpg et IMAGE2.JPG
2 = 0000000C: 02 01
[ect]

Merci !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ok merci !
Seulement comment enregistre t-on la commande dans la variable "msg" ?
set msg=findstr /n "^" f1.txt | findstr "^3:"

Le code en haut ne marche pas
Et puis c'est bizard ton code, on est obliger de mettre X:"la valeur de la ligne X" ?
Enfin ça encore ... ça peut passer.
Comme suis :
set msg=%msg:%X%:=%


Merci !
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
2 nov. 2009 à 08:00
DOS est très limité, j'utilise la numérotation des lignes par findstr pour trouver la ligne 3, on pourrait aussi le faire avec un compteur.
pour supprimer le No de ligne et mettre la ligne dans une variable:

for /f "delims=: tokens=1,*" %%a in ('findstr /n "^" f1.txt ^| findstr "^3:"') do (
set l=%%b
echo %l%)
0
Bonjour, le prototype ne marche pas. Et puis pour les retours à la lignes c'est pas commode non plus.
Le prototype de retour à la ligne marche ailleurs sauf sur mon programme :(
Merci bien !!! Je vais essayer de le réparer
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 nov. 2009 à 07:34
je n'ai rien compris
0
Je voulais dire que
for /f "delims=: tokens=1,*" %%a in ('findstr /n "^" f1.txt ^| findstr "^3:"') do (
set l=%%b
echo %l%)


Ne marche pas ! Tu es sur du code ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
10 nov. 2009 à 09:09
Ca m'affiche bien la ligne 3
C:> type f1.txt
Comparaison des fichiers image1.jpg et IMAGE2.JPG
0000000C: 02 01
00000015: ED E1
00000016: 09 07
00000017: 6A DE
00000018: 50 45
00000019: 68 78
0000001A: 6F 69
0000001B: 74 66
0000001C: 6F 00
FC : IMAGE2.JPG est plus long que image1.jpg

C:> aa
00000015: ED E1

C:> type aa.bat
@echo off
for /f  "delims=: tokens=1,*" %%a in ('findstr /n "^" f1.txt ^| findstr "^3:"') do (
set l=%%b
echo %l%)
0
Liftome1109
13 nov. 2009 à 21:49
ça ne dois pas être la même version de la console.
Moi j'ai Vista.
0
En tous cas il me dit que "le echo est désactivé". Que faire ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
14 nov. 2009 à 09:39
tu as bien mis la même lettre:
essaye
set A=%%b
echo %A%)
0
slt

Windows 7 x64 ; si le code ne fonctionne pas c'est qu'il manque l'option :

setlocal enabledelayedexpansion

Commande ECHO désactivée. = la variable "l" est vide ET était vide.
La commande echo sans rien affiche l'état de echo ...

"Sans le "setlocal enabledelayedexpansion", la modification du contenu d'une variable dans une boucle if n'a pas d'effet. Cela s'applique à tous les blocs d'instructions." On peut faire un call :processexterne %%x (comme un goto, pas un fichier, ":" devant la balise) pour passer outre (sauf erreur, je viens de le lire dans l'un des 40 onglets ouverts).

ÉDIT : echo %l% doit être echo !l! mais ça semble pareil en l'état.

"Les variables d'environnement comme "l" devront obligatoirement être encadrées du caractère "!" à la place du caractère "%" pour que l'interpréteur de commandes %comspec% (i.e. cmd.exe) sache gérer cette situation. Il faut donc considérer l'expansion retardée comme une lecture séquentielle du fichier batch. Ce mode de fonctionnement est à priori le plus naturel. Nous sommes invités donc à toujours activer cette option."

(( On rencontre de plus en plus souvent dans des textes français les mystérieuses abréviations i.e. et e.g., utilisées respectivement au sens de « c'est-à-dire » et de « par exemple ». Je ne savais pas trop cela et ça complique donc la lecture : Source ; http://www.druide.com/points_de_langue_16.html ))

(( Réponse Rotation variables en batch, entraide, FAQ, conseils, avis, Scripting Microsoft, Développement :
http://www.generation-nt.com/reponses/rotation-variables-batch-entraide-3336831.html ))

Et le message "FINDSTR : Impossible d'ouvrir f1.txt" veut dire :

* Que le fichier n'est pas présent ; ce n'est donc pas une erreur d'ouverture.
* Il faut entourer le chemin avec des guillemets et mettre le chemin complet.
* Les guillemets sont à priori obligatoires si le chemin contient des espaces.

Le code dans aa.bat qui affiche bien "00000015: ED E1" :))

@echo off
cls

setlocal enableextensions enabledelayedexpansion

for /f  "delims=: tokens=1,*" %%a in ('findstr /n "^" "C:\Development Folder\Scripts\Nouveau dossier\f1.txt" ^| findstr "^3:"') do (
set l=%%b
echo !l!
)

endlocal
exit /B


Vous pouvez remplacer "findstr /n "^"" par "findstr /n /r ." :))

les quotes ICI sont faites avec la touche 4 ; c'est pas l'accent grave ALTGr+7

la variable "l", L minuscule, n'est pas du tout facilement lisible (...)

le fichier f1.txt est le même que plus haut

Comparaison des fichiers image1.jpg et IMAGE2.JPG
0000000C: 02 01
00000015: ED E1
00000016: 09 07
00000017: 6A DE
00000018: 50 45
00000019: 68 78
0000001A: 6F 69
0000001B: 74 66
0000001C: 6F 00
FC : IMAGE2.JPG est plus long que image1.jpg


(pas de ligne vide à la fin dans les 2 fichiers)

je suis venu là car je cherche sur le web des infos pour un sujet avec moi ici :

Bat dos variable dans find ne marche pas help [Résolu] | CommentCaMarche :
http://www.commentcamarche.net/forum/affich-24365520-bat-dos-variable-dans-find-ne-marche-pas-help#4 (post #4 ; le dernier pour l'instant)

merci
0