Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R] copier de parties d'un fichier texte
Auteur Message
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonjour,

Je désire transformer un document texte en le recopiant et en le réaménageant suivant le nombre de caractère.
Je m'explique :
j'ai un document txt fait ainsi

Citation:
Nom1 Nom2 Nom3
adresse1 Adresse2 Adresse3
Ville1 Ville2 Ville3

Nom4 Nom5 Nom6
adresse4 adresse5 adresse6
Ville4 Ville5 Ville6


et je désire le recopier dans un fichier csv en triant les données par colonne :
Citation:
Nom1;adresse1;Ville1
Nom2;adresse2;Ville2
Nom3;adresse3;Ville3
Nom4;adresse4;Ville4
Nom5;adresse5;Ville5
Nom6;adresse6;Ville6


Bien sur le il y a beaucoup plus de ligne.

Chaque partie de mon texte d'origine ont toujours la même taille (37 caratères) et il y a toujours 7 caractères entre 2 parties :
Nom1 fait 37 caractères et il y a 7 caractères entre nom1 et nom2.

Quelle commande peut me permettre de récupérer les 37 premiers caractères de la ligne 1 puis des 44eme au 81eme caractère ...
et en faire une concaténation

Merci d'avance pour vos idées

Bonne journée



Dernière édition par stpre le Mar 7 Avr 2015 - 09:43; édité 1 fois
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonjour,

Tout d'abord, penses à aller faire ta présentation dans la section appropriée.
Ensuite, tu peux jeter un coup d’œil sur les autres topiques semblables, car il y a déjà eu plusieurs demandes à ce sujet.

Sinon tu peux regarder la commande: FOR et le découpage de variable.

@+




______________________________________________________
Une question ? N'hésitez pas à me contacter par Message Privé ou via le topique concerné.
Visiter le site web du posteur
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Salut,

peux-tu mettre un exemple réel de ton fichier texte de base

Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonjour,

Merci pour vos réponses.

AlonsO7798, je me suis présenté dans la section adhoc.

sachadee, ci joint un exemple de fichier que je voudrais traiter
Ce n'est qu'un extrait, un fichier normal peut faire plus de 500 lignes.

http://www.sendspace.com/file/uo5hor

Bonne journée



Répondre en citant
Message [R] copier de parties d'un fichier texte 
Salut ton fichier n'est pas très clair et ne correspond apparemment pas a tes explications :





Il y a des espaces en début de la première lignes, tes noms sont separé par 12 caractères et il y parfois une 4ème ligne apparemment.

Comme-ça ça va être difficile de faire un code.

Essaye de faire qqe chose d'un peu plus clair.

Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [R] copier de parties d'un fichier texte 
_

oh quelle belle écriture sacha, je savais bien que tu cachais un talent bien caché Mr. Green



Répondre en citant
Message [R] copier de parties d'un fichier texte 
Tu l'as ouvert avec le mauvais programme je pense Mr. Green




______________________________________________________
~
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Non c'est juste qu'il a mit des Z pour pas qu'on voit les noms & adresses des gens Smile




______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonjour

Merci à tous pour vos interventions.

Effectivement, j'ai modifié mes données pour respecter la confidentialité de mes utilisateurs.

Pour Sachadee : Je veux découper mon fichier texte d'origine par bloc de caractère.
Je sais que sur chaque ligne, si je prends des blocs de 0 à 37 caractères séparés par des blancs de 7 caractères (espace), alors je suis sur de prendre toutes les lettres.
Après, s'il y a des blancs dans mes blocs de 37 caractères, ce n'est pas grave.

J'ai pas mal avancé sur mon script, je vous en donne un aperçu.
Il y a surement des choses qui pourraient être mieux faites, je suis preneur de tout commentaire.
Pour l'instant, il fonctionne sauf en fin de script, la commande pour arrêter le script.

Code:

Cls

echo on

if exist result.txt del result.txt

:: Initialisation des variables
set VTexte=test.txt
set VResult=result.txt
set VNumPaq=4
set VNumligne=%VNumPaq%
set VNumChamp=0

:recupligne


set /a VNumChamp+=1

:: Recuperation de la ligne n° VNumLigne dans la variable VAffLigne
for /F "delims=" %%a in ('findstr /n "^" %VTexte% ^| findstr "^%VNumligne%:"') do set VAffLigne=%%a

:: Recuperation des blocs de données dans la ligne récupéré au dessus
:: le point avant l'echo permet de gerer les blocs vides
:: je dois décalé mes blocs de 2 caratères car la commande findstr ajoute le n° de ligne au début
for /F "delims=" %%b in ('echo.%VAffLigne:~3,39%') do set VL%VNumChamp%1=%%b
for /F "delims=" %%c in ('echo.%VAffLigne:~46,83%') do set VL%VNumChamp%2=%%c
for /F "delims=" %%d in ('echo.%VAffLigne:~90,127%') do set VL%VNumChamp%3=%%d

:: Je vérifie si j'arrive au bout d'un bloc de 7 lignes
:: si c'est le cas, je lance la copie des donnees dans mon fichier result, sinon, je continue à récuperer les blocs de données
set /a VNumligne+=1
set /a VComp=%VNumPaq%+6
If %VNumligne% LEQ %VComp% goto :recupligne

:: Copie des blocs de données remis dans l'ordre dans le fichier résultat
echo %VL11%;%VL21%;%VL31%;%VL41%;%VL51%;%VL61%;%VL71% >>%VResult%
echo %VL12%;%VL22%;%VL32%;%VL42%;%VL52%;%VL62%;%VL72% >>%VResult%
echo %VL13%;%VL23%;%VL33%;%VL43%;%VL53%;%VL63%;%VL73% >>%VResult%

:: Mise à jour des variables
set /a VNumPaq+=9
set /a VNumligne=%VNumPaq%
set /a VNumChamp=0

:: Controle de la fin du texte. Si la ligne a traité est vide alors arret de la commande - pour l'instant cette partie ne fonctionne pas  - en cours de verification
for /F "delims=" %%z in ('findstr /n "^" %VTexte% ^| findstr "^%VNumligne%:"') do set VAffLigne2=%%z
echo %VAffLigne2%
for /F "delims=" %%y in ('echo.%VAffLigne2:~3,39%') do set VLvide=%%y
If "%VLvide%" EQU "" goto :fin

goto :recupligne

:fin
echo c est fini
pause




Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonsoir,

J'ai terminé mon script.
Tout fonctionne comme je veux.
Par contre, à un moment, je suis obligé d'effacé les valeurs d'une 20ene de variables à la fois.
je n'ai pas trouvé d'autre moyen que de faire un
set var=
pour ca mais je le repete 20 fois à la suite.
Ca fonctionne mais je me demandai s'il y avait moyen plus propre.

Mon script finalisé
Code:

Cls

echo off

if exist result.txt del result.txt

:: Initialisation des variables
set VTexte=test.txt
set VResult=result.txt
set VNumPaq=4
set VNumligne=%VNumPaq%
set VNumChamp=0

:recupligne


set /a VNumChamp+=1

set VAffLigne=

:: Recuperation de la ligne n° VNumLigne dans la variable VAffLigne
for /F "delims=" %%a in ('findstr /n "^" %VTexte% ^| findstr "^%VNumligne%:"') do set VAffLigne=%%a


:: Recuperation des blocs de données dans la ligne récupéré au dessus
:: le point avant l'echo permet de gerer les blocs vides
:: je dois décalé mes blocs de 2, 3 ou 4 caratères car la commande findstr ajoute le n° de ligne au début

if %VNumLigne% LEQ 9 (for /F "delims=" %%b in ('echo.%VAffLigne:~2,41%') do set VL%VNumChamp%1=%%b
goto :suite)
if %VNumLigne% LEQ 99 (for /F "delims=" %%b in ('echo.%VAffLigne:~3,41%') do set VL%VNumChamp%1=%%b
goto :suite)
if %VNumLigne% LEQ 999 (for /F "delims=" %%b in ('echo.%VAffLigne:~4,41%') do set VL%VNumChamp%1=%%b
goto :suite)
if %VNumLigne% GEQ 1000 (for /F "delims=" %%b in ('echo.%VAffLigne:~5,41%') do set VL%VNumChamp%1=%%b)

:suite
for /F "delims=" %%c in ('echo.%VAffLigne:~46,41%') do set VL%VNumChamp%2=%%c
for /F "delims=" %%d in ('echo.%VAffLigne:~90,41%') do set VL%VNumChamp%3=%%d


:: Je vérifie si j'arrive au bout d'un bloc de 7 lignes
:: si c'est le cas, je lance la copie des donnees dans mon fichier result, sinon, je continue à récuperer les blocs de données
set /a VNumligne+=1
set /a VComp=%VNumPaq%+6
If %VNumligne% LEQ %VComp% goto :recupligne

:: Copie des blocs de données remis dans l'ordre dans le fichier résultat
echo %VL11%;%VL21%;%VL31%;%VL41%;%VL51%;%VL61%;%VL71% >>%VResult%
echo %VL12%;%VL22%;%VL32%;%VL42%;%VL52%;%VL62%;%VL72% >>%VResult%
echo %VL13%;%VL23%;%VL33%;%VL43%;%VL53%;%VL63%;%VL73% >>%VResult%

:: Vidage des variables
set VL11=
set VL12=
set VL13=
set VL21=
set VL22=
set VL23=
set VL31=
set VL32=
set VL33=
set VL41=
set VL42=
set VL43=
set VL51=
set VL52=
set VL53=
set VL61=
set VL62=
set VL63=
set VL71=
set VL72=
set VL73=

:: Mise à jour des variables
set /a VNumPaq+=9
set /a VNumligne=%VNumPaq%
set /a VNumChamp=0
set VAffLigne2=
set VLvide=

:: Controle de la fin du texte. Si la ligne a traité est vide alors arret de la commande - pour l'instant cette partie ne fonctionne pas  - en cours de verification
for /F "delims=" %%z in ('findstr /n "^" %VTexte% ^| findstr "^%VNumligne%:"') do set VAffLigne2=%%z
::echo.%VAffLigne2%
for /F "delims=" %%y in ('echo.%VAffLigne2:~5,36%') do set VLvide=%%y
If "%VLvide%" EQU "" goto :fin

goto :recupligne

:fin
echo c est fini
pause




Répondre en citant
Message [R] copier de parties d'un fichier texte 
_


c'est pas ça qui permettra à ton script d'être plus rapide mais voilà une réponse
pour réinitialiser tes nombreuses variables :

Code:
for /f "delims==" %%i in ('set VL') do "set %%i="


et euh, ton script ne correspond en rien à ce que tu demandes au début, si tu en
es satisfait, tant mieux. Mais demande quand même une analyse, enfin, s'il y a encore
quelqu'un de vivant dans la section concernée.



Répondre en citant
Message [R] copier de parties d'un fichier texte 
Salut,
Autre solution, avec "début,pas,fin":
Code:

for /L %%N in (11,1,73) do set VL%%N=





______________________________________________________
Cordialement,
Hugo, qui adore programmer, jouer à Minecraft, ZT2 et FSX.
Boutons-liens :
Visiter le site web du posteur Skype
Répondre en citant
Message [R] copier de parties d'un fichier texte 
Bonjour,

Pour temp :
Merci pour ta proposition pour reinitialiser les variables. Finalement, j'ai pris celle de Hugo7
Concernant ma demande initiale, peut être était elle sans doute formulée mais au final, le script réalise bien le travail demandé.

Pour Hugo7 : Merci pour ta commande de réinitialisation de variable.

Merci à tous pour votre aide

Bonne journée



Message [R] copier de parties d'un fichier texte 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch