DOS chaine de caractère en position fixe
Hypothez7
-
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
barnabe0057 Messages postés 14455 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'aimerai découper un fichier en plusieurs, selon ce que j'ai en position fixe.
Ex : dans toto.txt
01000001C20210331150123
02000002DC04718727 CCEE
02000003DC04718726 CCEI
02000003DC04718726 CCEI
02000019DI047173781CCDC
03000013DI047180322CCDC
selon ce que j'ai en position 8, sur 2 caractères,
je souhaite un fichier tata.txt avec le résultat "DC"
02000002DC04718727 CCEE
02000003DC04718726 CCEI
02000003DC04718726 CCEI
un fichier tutu.txt avec le résultat "DI"
02000019DI047173781CCDC
03000013DI047180322CCDC
etc...
merci
J'aimerai découper un fichier en plusieurs, selon ce que j'ai en position fixe.
Ex : dans toto.txt
01000001C20210331150123
02000002DC04718727 CCEE
02000003DC04718726 CCEI
02000003DC04718726 CCEI
02000019DI047173781CCDC
03000013DI047180322CCDC
selon ce que j'ai en position 8, sur 2 caractères,
je souhaite un fichier tata.txt avec le résultat "DC"
02000002DC04718727 CCEE
02000003DC04718726 CCEI
02000003DC04718726 CCEI
un fichier tutu.txt avec le résultat "DI"
02000019DI047173781CCDC
03000013DI047180322CCDC
etc...
merci
A voir également:
- DOS chaine de caractère en position fixe
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Caractere speciaux - Guide
- Ma position - Guide
- Chaine tnt gratuite sur mobile - Guide
7 réponses
Bonjour,
Tu auras besoin d'une boucle FOR /F pour parcourir chaque ligne du fichier texte, ensuite il faudra découper la ligne puis tester les 2 caractères avec une condition IF.
Donc ça donnerait un truc du genre :
Tu auras besoin d'une boucle FOR /F pour parcourir chaque ligne du fichier texte, ensuite il faudra découper la ligne puis tester les 2 caractères avec une condition IF.
Donc ça donnerait un truc du genre :
@echo off setlocal enableextensions enabledelayedexpansion for /f "usebackq delims=" %%A in ("toto.txt") do ( set "ligne=%%A" set "cible=!ligne:~8,2!" if "!cible!"=="DC" (echo !ligne! >>tata.txt) if "!cible!"=="DI" (echo !ligne! >>tutu.txt) ) pause exit
Bonjour,
Parfait !!!!!
un petit détail près, dans le résultat des fichiers tata et tutu, j'ai un espace à chaque fin de ligne
:(
pourquoi, et comment peut-on faire pour qu'il n'y soit pas ?!
Encore merci
Parfait !!!!!
un petit détail près, dans le résultat des fichiers tata et tutu, j'ai un espace à chaque fin de ligne
:(
pourquoi, et comment peut-on faire pour qu'il n'y soit pas ?!
Encore merci
Bonjour,
C'est ok pour le caractère de fin > merci
Mais je n'ai pu le faire qu'un fois, depuis quand je lance mon batch, rien ne se passe
résultat :
C:\Windows\system32>setlocal enableextensions enabledelayedexpansion
C:\Windows\system32>for /F "usebackq delims=" %A in (toto.txt) do (
set "ligne=%A"
set "cible=!ligne:~8,2!"
if "!cible!" == "M6" (echo !ligne! 1>>tata.txt )
if "!cible!" == "DI" (echo !ligne! 1>>tutu.txt )
)
Le système ne peut trouver le fichier toto.txt.
C:\Windows\system32>pause
Appuyez sur une touche pour continuer...
le toto se trouve au même endroit que le batch
toto.txt
et avec ça comme commande, c'est pareil
c:
cd c:\script
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%A in (toto.txt) do (
set "ligne=%%A"
set "cible=!ligne:~8,2!"
if "!cible!"=="M6" (echo !ligne!>>tata.txt)
if "!cible!"=="DI" (echo !ligne!>>tutu.txt)
)
pause
Merci
C'est ok pour le caractère de fin > merci
Mais je n'ai pu le faire qu'un fois, depuis quand je lance mon batch, rien ne se passe
résultat :
C:\Windows\system32>setlocal enableextensions enabledelayedexpansion
C:\Windows\system32>for /F "usebackq delims=" %A in (toto.txt) do (
set "ligne=%A"
set "cible=!ligne:~8,2!"
if "!cible!" == "M6" (echo !ligne! 1>>tata.txt )
if "!cible!" == "DI" (echo !ligne! 1>>tutu.txt )
)
Le système ne peut trouver le fichier toto.txt.
C:\Windows\system32>pause
Appuyez sur une touche pour continuer...
le toto se trouve au même endroit que le batch
toto.txt
et avec ça comme commande, c'est pareil
c:
cd c:\script
setlocal enableextensions enabledelayedexpansion
for /f "usebackq delims=" %%A in (toto.txt) do (
set "ligne=%%A"
set "cible=!ligne:~8,2!"
if "!cible!"=="M6" (echo !ligne!>>tata.txt)
if "!cible!"=="DI" (echo !ligne!>>tutu.txt)
)
pause
Merci
Bonjour,
Quand tu postes du code merci d'utiliser les balises de code, sous peine de te faire flageller par un modérateur ;)
On va rajouter une ligne pour tester l'existence de toto.txt :
Quand tu postes du code merci d'utiliser les balises de code, sous peine de te faire flageller par un modérateur ;)
On va rajouter une ligne pour tester l'existence de toto.txt :
@echo off setlocal enableextensions enabledelayedexpansion if not exist "toto.txt" (dir /b *.txt & pause) for /f "usebackq delims=" %%A in ("toto.txt") do ( set "ligne=%%A" set "cible=!ligne:~8,2!" if "!cible!"=="M6" (echo !ligne!>>tata.txt) if "!cible!"=="DI" (echo !ligne!>>tutu.txt) ) pause exit
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Cela fonctionne très bien avec la plupart des fichiers, sauf que je sais pourquoi le système ne voit pas certains fichiers,
en les ouvrant avec Notepad++ ceux-ci sont codé en AINSI avec des caractères "NUL", quand je le convertis en UTF-8 et que je lance ma commande, ça fonctionne.
Ma question est : quel ligne de commande DOS permet de convertir un fichier en UTF-8 ?
D'avance merci encore
Cela fonctionne très bien avec la plupart des fichiers, sauf que je sais pourquoi le système ne voit pas certains fichiers,
en les ouvrant avec Notepad++ ceux-ci sont codé en AINSI avec des caractères "NUL", quand je le convertis en UTF-8 et que je lance ma commande, ça fonctionne.
Ma question est : quel ligne de commande DOS permet de convertir un fichier en UTF-8 ?
D'avance merci encore