Auteur |
Message |
stpre
Batcheur Initié
Hors ligne
Inscrit le: 31 Mar 2015
Messages: 6
Niveau en programmation: Niveau en graphisme: Point(s): 22 Moyenne de points: 3,67 Systeme d exploitation: Windows7
|
[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
|
Mar 31 Mar 2015 - 10:59 |
|
|
AlonsO7798
Modérateur
Hors ligne
Inscrit le: 26 Juil 2014
Messages: 636
Localisation: Paris Logiciels: MS-DOS Niveau en programmation: Quelque chose a dire ?: Salut salut Point(s): 1 243 Moyenne de points: 1,95 Systeme d exploitation: Mac OS
|
[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é.
|
Mar 31 Mar 2015 - 15:21 |
|
|
sachadee
Modérateur
Hors ligne
Inscrit le: 07 Déc 2011
Messages: 1 251
Localisation: Brésil Logiciels: Notepad Niveau en programmation: Niveau en graphisme: Point(s): 3 018 Moyenne de points: 2,41 Systeme d exploitation: 7,linux,xp
|
[R] copier de parties d'un fichier texte
Salut, peux-tu mettre un exemple réel de ton fichier texte de base
______________________________________________________
|
Mer 1 Avr 2015 - 03:59 |
|
|
stpre
Batcheur Initié
Hors ligne
Inscrit le: 31 Mar 2015
Messages: 6
Niveau en programmation: Niveau en graphisme: Point(s): 22 Moyenne de points: 3,67 Systeme d exploitation: Windows7
|
[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/uo5horBonne journée
|
Jeu 2 Avr 2015 - 09:29 |
|
|
sachadee
Modérateur
Hors ligne
Inscrit le: 07 Déc 2011
Messages: 1 251
Localisation: Brésil Logiciels: Notepad Niveau en programmation: Niveau en graphisme: Point(s): 3 018 Moyenne de points: 2,41 Systeme d exploitation: 7,linux,xp
|
[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.
______________________________________________________
|
Jeu 2 Avr 2015 - 12:11 |
|
|
Publicité
|
Publicité
|
Jeu 2 Avr 2015 - 12:11 |
|
|
temp
Batcheur Super-Master
Hors ligne
Inscrit le: 10 Juil 2011
Messages: 266
Point(s): 652 Moyenne de points: 2,45 Systeme d exploitation: xt
|
[R] copier de parties d'un fichier texte
_ oh quelle belle écriture sacha, je savais bien que tu cachais un talent bien caché
|
Jeu 2 Avr 2015 - 14:04 |
|
|
YamiManu
Batcheur Super-Master
Hors ligne
Inscrit le: 17 Fév 2014
Messages: 349
Localisation: Devant mon PC Niveau en programmation: Niveau en graphisme: Quelque chose a dire ?: Vive le batch ! \o/ Point(s): 582 Moyenne de points: 1,67 Systeme d exploitation: Windows 8.1
|
[R] copier de parties d'un fichier texte
Tu l'as ouvert avec le mauvais programme je pense
______________________________________________________ ~
|
Jeu 2 Avr 2015 - 16:44 |
|
|
Hugo7
Chef de Projet
Hors ligne
Inscrit le: 15 Fév 2014
Messages: 1 693
Localisation: Lorraine :) Logiciels: Notepad++, cmd.exe Niveau en programmation: Niveau en graphisme: Quelque chose a dire ?: Non. Point(s): 2 893 Moyenne de points: 1,71 Systeme d exploitation: Windows 10
|
[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
______________________________________________________ Cordialement, Hugo, passionné de programmation, de géologie, de construction et d'aviation civile. .
|
Jeu 2 Avr 2015 - 17:51 |
|
|
stpre
Batcheur Initié
Hors ligne
Inscrit le: 31 Mar 2015
Messages: 6
Niveau en programmation: Niveau en graphisme: Point(s): 22 Moyenne de points: 3,67 Systeme d exploitation: Windows7
|
[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
|
Ven 3 Avr 2015 - 07:18 |
|
|
stpre
Batcheur Initié
Hors ligne
Inscrit le: 31 Mar 2015
Messages: 6
Niveau en programmation: Niveau en graphisme: Point(s): 22 Moyenne de points: 3,67 Systeme d exploitation: Windows7
|
[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
|
Ven 3 Avr 2015 - 15:04 |
|
|
temp
Batcheur Super-Master
Hors ligne
Inscrit le: 10 Juil 2011
Messages: 266
Point(s): 652 Moyenne de points: 2,45 Systeme d exploitation: xt
|
[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.
|
Ven 3 Avr 2015 - 16:05 |
|
|
Hugo7
Chef de Projet
Hors ligne
Inscrit le: 15 Fév 2014
Messages: 1 693
Localisation: Lorraine :) Logiciels: Notepad++, cmd.exe Niveau en programmation: Niveau en graphisme: Quelque chose a dire ?: Non. Point(s): 2 893 Moyenne de points: 1,71 Systeme d exploitation: Windows 10
|
[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, passionné de programmation, de géologie, de construction et d'aviation civile. .
|
Ven 3 Avr 2015 - 16:07 |
|
|
stpre
Batcheur Initié
Hors ligne
Inscrit le: 31 Mar 2015
Messages: 6
Niveau en programmation: Niveau en graphisme: Point(s): 22 Moyenne de points: 3,67 Systeme d exploitation: Windows7
|
[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
|
Mar 7 Avr 2015 - 09:42 |
|
|
|