Traitement de fichier TXT [Fermé]

Signaler
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014
-
 Yoda -
J'ai consulté le forum mais les réponses trouver à mon problème ne fonctionnent guère (trop ancienne peut etre?)

J'ai plusieurs fichiers texte dans un répertoire (en fait ce sont des écritures comptables prêtent a être récupérées par un logiciel comptable), manquent de pot , certains comptes sont mal paramétrés et je voudrais modifier certains comptes par un autre)
exemple
dans mes fichiers j'ai la suite de caractères "53000013" que je voudrais remplacer par "5301300" dans tous les fichiers texte
Comment faire (un .bat) ? pour que le remplacement s'execute sur tous les fichiers avec extension .txt ?

Merci a tous

2 réponses

Messages postés
101
Date d'inscription
dimanche 21 mars 2010
Statut
Membre
Dernière intervention
29 novembre 2014
10
Essai ceci

find.bat :

@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION

::BatchSubstitude - parses a File line by line and replaces a substring"
::syntax: BatchSubstitude.bat OldStr NewStr File
:: OldStr [in] - string to be replaced
:: NewStr [in] - string to replace with
:: File [in] - file to be parsed
:$changed 20100115
:$source https://www.dostips.com/
if "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
for /f "tokens=1,* delims=]" %%A in ('"type %3|find /n /v """') do (
set "line=%%B"
if defined line (
call set "line=echo.%%line:%~1=%~2%%"
for /f "delims=" %%X in ('"echo."%%line%%""') do %%~X
) ELSE echo.
)


Ouvre une invite de commande avec le chemin où t'es fichiers texte ainsi que le programme en batch est situé.

Et écrit

find.bat "53000013" "5301300" "tonfichiertext.txt">"nouveaufichier.txt"

Source
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

Y a un truc ca ne marche pas
Mon fichier de départ
C05201114OD4675000000 000000359 ANEM VT 20/11/14 A201114D00000000000000000.00N
C05201114OD4675000000 AANEM 000000359 ANEM VT 20/11/14 A D00000000000000000.00N
C05201114OD5111000000 000000359 ANEM VT 20/11/14 C201114D00000000000000977.80N
C05201114OD5111000000 AANEM 000000359 ANEM VT 20/11/14 C D00000000000000977.80N
C05201114OD5113000000 000000359 ANEM VT 20/11/14 C201114D00000000000000114.97N
C05201114OD5113000000 AANEM 000000359 ANEM VT 20/11/14 C D00000000000000114.97N
C05201114OD5300000013 000000359 ANEM VT 20/11/14 E201114D00000000000000829.67N
C05201114OD4457110000 000000359 ANEM VT 20/11/14 201114C00000000000000320.26N
C05201114OD7071000000 000000359 ANEM VT 20/11/14 201114C00000000000001602.18N

quand j'applique ton batch, fichier de sortie, que des lignes comme ceci

c:\temp>find.bat :

C:\temp>find.bat :

C:\temp>find.bat :

C:\temp>find.bat :

C:\temp>find.bat :

?????
Messages postés
101
Date d'inscription
dimanche 21 mars 2010
Statut
Membre
Dernière intervention
29 novembre 2014
10 >
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

Je t'ai fait un exemple avec ton fichier de départ, j'ai changer les premiers numéro de la liste

Regarde ici
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

Merci, je vais essayer.
Par contre trés intéressant le site que tu mentionnes www.dostips.com
J'en profites..si le batch fonctionne correctement est ce qu'il est possible de remplacer un groupe de compte par un autre.
(exemple 5300000013 en 5300001300 puis le 5300000012 en 5300001200 ?

MERCI
@Yoda
si tu regardes l'exemple que me donne KHETSURO en cliquant sur son lien, tu vois bien que le fichier de départ est exactement le meme que le fichier d'arrivée , et que dans sa ligne de commande y a des numéros de comptes qui n'existent pas dans le fichier de départ... donc sa ligne de commande ne peut rien faire..c'est pour cela que j'ai dit que c'était farfelu..
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

je retire ce que j'ai écrit plus haut !! mille excuses c'est moi qui n'ai pas bien regardé..il n'empeche que je retrouve en sortie toujours le meme fichier ?
Peut etre qu'il ne faut pas faire du copier coller pour reprendre le fichier .BAT qui est mentionné ?
>
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

Salut,

Il faut reprendre le script tel quel (copier/coller).

Voilà en détail ce qu'il faut faire:

Créer un nouveau fichier txt dans le dossier où se trouvent les fichiers à manipuler
Ouvrir ce nouveau fichier avec bloc note et coller le script donné par khetsuro. Enregistrer,Fermer.
Renommer ce fichier Finda.bat (pour ne pas interférer avec la commande originale Find de windows).

Ensuite ouvres une fenêtre de commandes. (Démarrer / Executer / cmd.exe)
Positionnes-toi dans le dossier où se trouvent ton fichier Finda.bat. ainsi que les fichiers à manipuler, par exemple:
cd "c:\Documents and Settings\User\Mes documents\comptabilité\"
Mets bien le chemin entre guillements "..." si le chemin contient des espaces.

Enfin tu tapes la commande:
Finda "5300000013" "5301300000" "nomfichier1.txt">"nomfichier2.txt"

5300000013 est la chaine recherchée
5301300000 est la chaine à substituer
nomfichier1.txt est le nom fichier à modifier (existant)
nomfichier2.txt est le nom du fichier à créer (nouveau)

Mets bien des guillemets "" comme indiqué pour éviter une mauvaise interprétation des paramètres.

Essayes comme ça, et si ça ne va pas reviens ici.
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014
> Yoda
merci mais cela continue a me sortir un fichier comme ceci dans mon nouveau fichier texte


:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

C:\temp>finda.bat

Merci les gars --j'abandonne, je vais utiliser Notepad avec la fonction remplacer y aura pas beaucoup plus de manipulation ---
>
Messages postés
6
Date d'inscription
jeudi 27 novembre 2014
Statut
Membre
Dernière intervention
2 décembre 2014

Bon, mais si tu veux j'ai une autre solution.

Un script vbs qui fait la même chose, si ça t'intéresses je te le poste à la suite.