RESOLU MERCI besoin d'une aide pour "construire" un BAT MERCI

Une difficulté, une précision posez vos questions

Modérateur : WIN32-[GG]

MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

RESOLU MERCI besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,

je travaille en informatique mais mes connaissances en BAT sont limitées.
Je dois fournir un script BAT qui prendrait des valeurs dans un fichiers Excel ou TXT et les insérer dans un autre fichier plus complexe de type:
Positon 1 à 16 Clé unique
Position 17 Sur 3 caractères
Etc....
Je vous sollicite donc pour m'aider si vous le voulez bien à construire ce type de script BAT.

Merci par avance pour vos aides.
Modifié en dernier par MAXLEGRAN le 04 avr. 2019 15:01, modifié 1 fois.
300317
Batcheur occasionnel
Messages : 8
Enregistré le : 30 mars 2017 13:24

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par 300317 »

Bonjour,
si tu pouvais donner un exemple de la composition du fichier dans lequel
tu souhaites récuperer tes valeurs et où tu souhaiterais les insérer dans le fichier cible.
MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,
J'ai 2 exemples de fichiers le premier Input et le second Output. Mais je ne vois pas comment les inserer dans ce message, le format TXT ou XLS n'est pas pris en charge?
Alors voici un extrait:
FICHIER ENTREE:
VALEUR1 VALEUR2
TXX1H8 TXX1H8
TXX1H9 TXX1H9
TXX1H10 TXX1H10
TXX1H11 TXX1H11

Fichier généré via BAT:
ZONE PRIVEE
CLE UNIQUExxxxxxA000DESCRIPTION
CLE UNIQUExxxxxxA001DESCRIPTION VALEUR1XXXXXXXXX VALEUR2
CLE UNIQUExxxxxxA001DESCRIPTION CHAMP DESCR VALEUR1XXXXXXXXX VALEUR2

Du fichier input j'ai deux valeurs et dans le fichiers Output ils doivent apparaitre dans des colonnes bien précises.
Exemple de la structure du fichier output
<field id="CLE UNIQUE" len="16"
<field id="Rese" len="1"
<field id="CLE2" len="3"
<field id="DESC" len="24"
<field id="VALEUR1" len="16"
<field id="DESCRIPT" len="16"
<field id="RESERVE" len="6"
<field id="RESERVE" len="4"
<field id="RESERVE" len="6"
<field id="RESERVE" len="4"
<field id="VALEUR2" len="8"

Merci beaucoup pour vos conseils et aide.
300317
Batcheur occasionnel
Messages : 8
Enregistré le : 30 mars 2017 13:24

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par 300317 »

Bonjour,
apparement non, pas moyen d'insérer un txt dans le message.
Donc si j'ai bien compris, dans ton fichier source, chaque ligne est constituée
de deux valeurs, separées par des espaces ?

Si tel est le cas on va pouvoir les récupérer de la sorte

Code : Tout sélectionner

for /f "tokens=1,2 delims= " %%a in (input.txt) do (

)
En ce qui concerne l'écriture, il faudrait regarder si les lignes où insérer les valeurs reviennent à la même fréquence.
Le cas échéant, dans la première boucle, on pourrait faire une autre boucle FOR sur le fichier output et identifier les lignes où insérer les valeurs à l'aide de deux modulos sur un compteur.
Si possible, une capture d'écran des deux fichiers pourrait m'être utile.
MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,

Voici les deux captures d’écrans pour les deux fichiers, j’espère que cela est suffisamment clair.
Pour être clair dans ma démarche, il faudrait:
Que je puisse créer une clé unique sur 16 caractères incrémentée de 1 à chaque ligne (colonne de 1 à 16),
Puis insérer la valeur1 du fichier Input en colonne 45 et la seconde valeur2 en colonne 91.
Je ne sais pas si cela est possible?

Merci beaucoup pour votre aide.
Fichiers joints
fic_output.JPG
fic_output.JPG (81.14 Kio) Vu 19418 fois
fic_input.JPG
fic_input.JPG (184.59 Kio) Vu 19418 fois
300317
Batcheur occasionnel
Messages : 8
Enregistré le : 30 mars 2017 13:24

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par 300317 »

Bonjour, c'est quelque chose comme ça qu'il te faudrait ?

Code : Tout sélectionner

@echo off
setlocal enabledelayedexpansion

set source=input.txt
set sortie=output.txt

set debut_cle=000000000000
set fin_cle=1000

set _28caracteres=xxxxxxxxxxxxxxxxxxxxxxxxxxxx
set _30caracteres=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
::--------------------------

for /f "skip=1 usebackq tokens=1,2 delims= " %%a in ("%source%") do (

set /a fin_cle+=1
set cle_unique=%debut_cle%!fin_cle!

set valeur1=%%a
set valeur2=%%b

(
echo !cle_unique!%_28caracteres%!valeur1!%_30caracteres%!valeur2!
)>>"%sortie%"

)
endlocal
pause
exit
Fichiers joints
00_cap.jpg
00_cap.jpg (188.2 Kio) Vu 19415 fois
MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,

Merci beaucoup pour ce premier exemple.

je vais faire quelques tests et vous tiens au courant.

Encore merci
MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,

Après de longs mois de silence et je m'en excuse car j'ai été appelé à d'autres services et là je reviens à mon poste. Désolé.

j'ai fais quelques essais avec le script proposé.
J'ai deux problèmes:
le premier le script affiche des X sur plusieurs colonnes, il faudrait que ce soit des " " Blancs ou espaces.
Pour ce premier point, j'ai remplacé les XXXXXXX par des espaces.
Le second problème la valeur 2 n'est pas écrite en colonne 97 comme demandé mais plutôt en 65.

Enfin dans mon fichier INPUT, on peut trouver sur une ligne la VALEUR1 mais pas de Valeur2 et sur d'autres lignes les Valeurs 1 et 2.
Dernier point, je ne me souviens plus si l'on peut insérer des lignes de Textes dans le fichiers Output, genre un titre par exemple.

merci de votre compréhension et pour votre aide.
300317
Batcheur occasionnel
Messages : 8
Enregistré le : 30 mars 2017 13:24

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par 300317 »

Salut,
le premier"problème" n'en est plus un puisque tu l'as résolu.
Quant au second : à l'époque tu voulais valeur2 en colonne 91, pas 97
MAXLEGRAN a écrit : 13 déc. 2018 13:19
Pour être clair dans ma démarche, il faudrait:
Que je puisse créer une clé unique sur 16 caractères incrémentée de 1 à chaque ligne (colonne de 1 à 16),
Puis insérer la valeur1 du fichier Input en colonne 45 et la seconde valeur2 en colonne 91.
donc :

cle_unique.length = 16
16 + 28 espaces = 44

valeur1 commence donc à 45 et fini à 60 (valeur1.length = 16)

60 + 30 espaces = 90
valeur2 commence donc à 91

Code : Tout sélectionner

echo !cle_unique!%_28caracteres%!valeur1!%_30caracteres%!valeur2!
Si valeur2 se trouve en 65 c'est qu'il y a eu réduction de longueur quelque part.
Il faut alors rajouter des espaces derrière valeur1.

Pour différencier les deux types de lignes (non demandé à l'époque)

Code : Tout sélectionner

if not defined valeur2 (
echo valeur1 sans valeur2
) else (
echo valeur1 et valeur2
)
Quant au dernier point la réponse semble évidente…
MAXLEGRAN
Batcheur occasionnel
Messages : 8
Enregistré le : 26 janv. 2017 15:56

Re: besoin d'une aide pour "construire" un BAT MERCI

Message par MAXLEGRAN »

Bonjour,

merci pour ces réponses. J'ai fais quelques essais, et je suis toujours en colonne 65 pour Valeur2. J'ai modifié le SET en positionnant à différents nombre mais toujours rien de mieux.
J'ai ajouté les lignes proposées
if not defined valeur2 (
echo valeur1 sans valeur2
) else (
echo valeur1 et valeur2
)
Et là je n'ai plus les Valeur1 sans Valeurs2??
Je pense que j'ai "merdé" quelque part mais je ne vois pas où.
Voici le Script que j'ai modifié:
@echo off
setlocal enabledelayedexpansion

set source=input.txt
set sortie=output.txt

set debut_cle=000000000000
set fin_cle=1000

set _28caracteres=
set _36caracteres=
::--------------------------

for /f "skip=1 usebackq tokens=1,2 delims= " %%a in ("%source%") do (

set /a fin_cle+=1
set cle_unique=%debut_cle%!fin_cle!

set valeur1=%%a
set valeur2=%%b
if not defined valeur2 (
echo valeur1 sans valeur2
) else (
echo valeur1 et valeur2
)
(
echo !cle_unique!%_28caracteres%!valeur1!%_36caracteres%!valeur2!
)>>"%sortie%"

)
endlocal
pause
J’espère que vous pouvez m'aider et Merci par avance.
Répondre