Se connecter / S'enregistrer

Résolu Conpter nobre de colonne en batch

Solutions (20)
Tags :
  • Echo
  • Programmation
|
Bonjour,
je voudrais savoir comment faire pour calculer le nombre de colonne ( et la ligne) ensuite faire une redirection vres fichierOK.txt et fichierKO.txt selon le nombre de colonne.

Merci
Contenus similaires
  • Autres pages sur : conpter nobre colonne batch
Meilleure solution
partage
|
N n'est jamais initialisée. Faire une boulce dans un FOR, je ne pense pas que ça marche même avec l'expansion retardée.
Tu peux toujours faire une fonction récursive. Je t'en ai fait une (pour être sûr que ça marche bien :D  ), mais les lignes vides ne sont pas prises en compte et un double ";;" sera considéré comme un simple ";".
En plus, je ne teste pas si le dernier champ est vide.
Donc, des améliorations sont possibles.

  1. @ECHO off & setLocal EnableDelayedExpansion
  2. SET /A LIGNE=0
  3. FOR /F "delims=" %%A IN ('TYPE "%1"') DO (
  4. SET /A COMPTEUR=0
  5. ECHO %%A > CRicky_temp.txt
  6. CALL :FonctionRecursiveSurColonnes CRicky_temp.txt
  7. ECHO total[!LIGNE!] = !COMPTEUR!
  8. SET /A LIGNE=!LIGNE!+1
  9. )
  10. DEL CRicky_temp.txt
  11. GOTO :EOF
  12.  
  13. :FonctionRecursiveSurColonnes
  14. FOR /F "tokens=1* delims=;" %%A IN ('TYPE "%1"') DO (
  15. SET RESTANT=%%B
  16. SET /A COMPTEUR=!COMPTEUR!+1
  17. IF DEFINED RESTANT (
  18. ECHO %%B > CRicky_temp.txt
  19. CALL :FonctionRecursiveSurColonnes CRicky_temp.txt
  20. )
  21. )
  22. GOTO :EOF
  • Commenter cette solution |
Score
0
òh
òi
|
Oui, avec %LIGNE%, tu ne bénéficies pas de l'expansion retardée: %LIGNE% n'est évalué qu'à la fin de la commande en cours (une fois le FOR terminé).
  • Commenter cette réponse |
Score
0
òh
òi
|
Résolu :
setlocal enableDelayedExpansion
rem synthaxe concat.bat nom_fichier_source
rem en sortie TMP+nom_fichier_source
rem reste à préciser l'emplaceùment en parametre ou en dur
echo =============== > C:\TMP_%1
SET /a "compteur=0"
for /F "delims=" %%i in (%1) do (
SET /a "compteur+=1"
echo !compteur! ; %%i ; %1 ; NEW_LINE >> C:\TMP_%1
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour à tous,
j'ai un gros souci avec les boucle for
le code est simple de chez simple et aussi complexe de chez complexe
voici mon code comme suit :
SET /A LIGNE=0
for /F "delims=" %%i in (%1) do (
SET /A LIGNE=!LIGNE!+1
echo LIGNE=!LIGNE!
echo %LIGNE% ; %%i ; %1 ; NEW_LINE >> C:\TMP_%1
)
sur mon fichier en sortie LIGNE est toujour à 0
Merci pour votre aide
  • Commenter cette réponse |
Score
0
òh
òi
|
Meilleure réponse sélectionnée par Kock.
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour Omar,
voici mon code :
@echo off & setLocal EnableDELAYedExpansion
set C=;
for /f "delims=" %%i in ('type %1') do (
set str = %%i
:loop
if !str:~0^,1! equ !C! (
set /a N+=1
)
if "!str:~1!" neq "" (
set str=!str:~1!
goto :loop
)
set d=!str! >> t.txt
)

mais pour le résultat, je ne retrouve rien
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour Omar,
Voila le code que j'utilise :
set C=;
for /f "tokens=1 delims=" %%i in ('type %1') do (
set str = %%i
:loop
if !str:~0^,1! equ !C! (
set /a N+=1
)
if "!str:~1!" neq "" (
set str=!str:~1!
goto :loop
)
echo !N!
)

pour le moment ca tourne en boucle non stop hhhhh
j'ai du pas bien comprendre pourquoi,
Merci pour ton aide
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Voilà comment traiter toutes les lignes d'un fichier:
  1. for /F "tokens=1 delims=," %%i in (fichier.txt) do @echo %%i
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour ,
J'ai oublier de préciser qu'il faut diriger les lignes avec 4 colonnes dans fichierOK
et les autres dans fichierKO

Merci pour ton aide
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,
Voici la forme de mon fichier en entrée:
C1 ; C2 ; C3 ; C4
C1 ; C3 ; C4
C1 ; C2 ;
C1 ; C2 ; C3 ; C4

Donc, je me dois de dispatcher entre deux fichiers en sortie : FichierOK et FichierKO
Merci
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci je prend de suite
  • Commenter cette réponse |
Score
0
òh
òi
, Modérateur |
Fais voir à quoi ressemble un de tes fichiers

Edit:
Et ce lien te présente comment compter le nombre de fois qu'un caractère est présent dans une chaine: http://www.computing.net/answers/programming/batch-file...

  1. @echo off & setLocal EnableDELAYedExpansion
  2.  
  3. set /p str=str ? :
  4. set /p C=char to count ? :
  5. set N=
  6.  
  7. :loop
  8. if !str:~0^,1! equ !C! (
  9. set /a N+=1
  10. )
  11. if "!str:~1!" neq "" (
  12. set str=!str:~1!
  13. goto :loop
  14. )
  15.  
  16. echo !N!
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,
Je suis à la recherche d'une technique pour compter le nombre de caractére par ligne
Merci 4 help
  • Commenter cette réponse |
Score
0
òh
òi
|
Pour info,
J'ai essayé d'utiliser la commande FIND (pour calcluer le nombre de séparateurs) , mais je ne sais pas comment utiliser pour réussir mon objectif.
Tu pense que ca peut marcher??
  • Commenter cette réponse |
Score
0
òh
òi
|
j'ai vu et j'ai rien compris
..... :( 
  • Commenter cette réponse |
Score
0
òh
òi
|
Merci,
Je go y jeter un coup d'oeil de suite
  • Commenter cette réponse |
Score
0
òh
òi
|
non les .bat ne sont pas nécessairement plus compliqués, ils sont juste différents.

http://www.commentcamarche.net/forum/affich-450172-sed-...
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,
Je travail sur un fichier .bat
Mon objectif est de dispatcher un fichier en entré en deux partie :
1er : bon nombre de colonnes
2éme : mauvais nombre de colonnes

C'est un peux compliqué les .bat, en awk ca marche
MErci
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour,
Merci pour votre participation,
J'essaie de faire un .bat
je ne réussi toujours pas à comprendre comment m'y prendre pour calculer le nombre de colonne par ligne d'un fichier et dispatcher vers FichierOK si le bon nombre de colonne et vers FichierKO dans le cas contraire

Merci
  • Commenter cette réponse |
Score
0
òh
òi
|
Bonjour.

Dans quel langage programmes-tu ?

peux tu mettre un extrait de ton code stp ?
  • Commenter cette réponse |

Ce n'est pas ce que vous cherchiez ?

Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS