DOS chaine de caractère en position fixe

Signaler
-
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
-
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

7 réponses

Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297
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 :

@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
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297
Ah oui effectivement j'ai laissé trainer un espace entre le ECHO et la redirection vers le fichier texte.

Voilà la correction :
if "!cible!"=="DC" (echo !ligne!>>tata.txt)
if "!cible!"=="DI" (echo !ligne!>>tutu.txt)
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
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297
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 :

@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



“L'intelligence artificielle se définit comme le contraire de la bêtise naturelle.”
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
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297
Pour convertir un fichier ASCII en Unicode :
CMD.EXE /U /C TYPE ascii_file.txt >> unicode.txt
>
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021

Merci pour le retour
le fichier est convertit en UCS-2 Little Endian et j'ai toujours les caractères "NUL"
:(
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297 > Hypothez*
Il y a quelque chose de bizarre chez toi, normalement si tu crées un nouveau fichier texte (tata.txt ou tutu.txt) il est créé au format ANSI et la commande que j'ai donné permet la conversion en Unicode.

Les encodages ce n'est pas ma tasse de thé, je crains de ne pouvoir t'aider davantage.
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297 >
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021

Après avoir approfondi la chose, la commande que j'ai donné convertit bien de ASCII vers Unicode (UCS-2 Little Endian).

Apparemment il n'est pas possible de convertir vers UTF-8
Messages postés
3
Date d'inscription
jeudi 15 avril 2021
Statut
Membre
Dernière intervention
15 avril 2021

Tu peux tester la formule
=STXT()
La formule "=STXT()" en DOS ?
connais pas
Messages postés
13389
Date d'inscription
lundi 2 mars 2009
Statut
Contributeur
Dernière intervention
17 avril 2021
4 297
Moi non plus, je dirais plutôt que c'est une formule Excel.