Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[R]Problème de traitement de texte avec for
Auteur Message
Répondre en citant
Message [R]Problème de traitement de texte avec for 
Bonjour,

j'ai un soucis avec un fichier texte où il y a des guillemets. J'isole certaines parties de ce fichier avec StringBetween.exe afin de créer d'autres fichiers texte et de trier mes informations.
Le problème avec stringbetween.exe c'est que il faut des guillemets pour séparer les paramètres =>
Code:
stringbetween.exe "param1" "param2"
Sauf que mes paramètres contiennent des guillemets aussi, ce qui perturbe la synthaxe.

Je cherche donc un moyen de supprimer tous les guillemets du fichier afin que je puisse utiliser stringbetween.exe correctement.
Le problème est que le fichier txt fait environ 21 500 caractères sur 1 seule ligne ce qui pose problème avec "for" vu les limites.

ou alors de diviser la ligne en plusieurs lignes afin de pouvoir traiter avec for

Quelqu'un a une idée ?

Merci d'avance,



Dernière édition par programme le Mer 27 Juin 2018 - 15:47; édité 1 fois

______________________________________________________

Programme
Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R]Problème de traitement de texte avec for 
Tu peux utiliser directement

stringbetween.exe param1 param2

et tu peux également utiliser le caret ^ pour échaper des caractères spéciaux.

sinon :


http://batch.xoo.it/t4364-BAT-PowerShell.htm

Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [R]Problème de traitement de texte avec for 
Merci de ta réponse Okay mais

sachadee a écrit:
Tu peux utiliser directement

stringbetween.exe param1 param2


mon problème est que j'ai des paramètres de style
Code:
stringbetween.exe ["hello","bonjour"],encore,du,texte  }

soit param1= ["hello","bonjour"], encore, du, texte
et param2=}

sachadee a écrit:

et tu peux également utiliser le caret ^ pour échaper des caractères spéciaux.


Je ne suis pas sur de comprendre… comme ceci ?
Code:
stringbetween.exe ^["hello","bonjour"], encore, du, texte^  ^}^
chez moi ca ne marche pas

sachadee a écrit:
sinon :


http://batch.xoo.it/t4364-BAT-PowerShell.htm

Okay


Le soucis avec cela c'est que mon caractère est un guillemet donc ca corrompt la commande

Merci d'avance !




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Problème de traitement de texte avec for 
On peut utiliser du jscript sinon :

Code:
@echo off
setlocal enabledelayedexpansion


(
  echo;["hello","bonjour"], encore, du, texteSALUT["Hello"]}
  echo;["NO"],ee, dsfksd"--
  echo;["hello","bonjour"], encore, du, texteNN["UYTRE"]}
)> test.txt


set param1=["hello","bonjour"], encore, du, texte
set param2=}

call :String.Between "test.txt" param1 param2 "%temp%\stringbetween.js"
for /f "delims=" %%a in ('cscript //nologo "%temp%\stringbetween.js"') do echo;%%a



pause>nul&exit
:String.Between
  (
   echo;var param1='!%~2!';
   echo;var param2='!%~3!';
   echo;var fso = new ActiveXObject^("Scripting.FileSystemObject"^);
   echo;var file = fso.OpenTextFile^("%~1", 1, true^);
   echo;var t = file.ReadAll^(^);
   echo;file.Close^(^);
   echo;//var results = [];
   echo;var a = true;
   echo;while ^(a^) {
   echo;   var b = t.indexOf^(param1^);
   echo;   var c = t.indexOf^(param2^);
   echo;   if ^(b == -1 ^|^| c == -1^) {
   echo;      a = false;
   echo;    } else {
   echo;      //results.push^(t.substring^(b+param1.length,c+param2.length-1^)^);
   echo;      WScript.Echo^(t.substring^(b+param1.length,c+param2.length-1^)^);
   echo;      t = t.substring^(c+param2.length^);
   echo;   }
   echo;}
   echo;//WScript.Echo^(results^);
  )> "%~4"
Exit /b





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R]Problème de traitement de texte avec for 
Flammrock a écrit:
On peut utiliser du jscript sinon :

Code:
@echo off
setlocal enabledelayedexpansion


(
  echo;["hello","bonjour"], encore, du, texteSALUT["Hello"]}
  echo;["NO"],ee, dsfksd"--
  echo;["hello","bonjour"], encore, du, texteNN["UYTRE"]}
)> test.txt


set param1=["hello","bonjour"], encore, du, texte
set param2=}

call :String.Between "test.txt" param1 param2 "%temp%\stringbetween.js"
for /f "delims=" %%a in ('cscript //nologo "%temp%\stringbetween.js"') do echo;%%a



pause>nul&exit
:String.Between
  (
   echo;var param1='!%~2!';
   echo;var param2='!%~3!';
   echo;var fso = new ActiveXObject^("Scripting.FileSystemObject"^);
   echo;var file = fso.OpenTextFile^("%~1", 1, true^);
   echo;var t = file.ReadAll^(^);
   echo;file.Close^(^);
   echo;//var results = [];
   echo;var a = true;
   echo;while ^(a^) {
   echo;   var b = t.indexOf^(param1^);
   echo;   var c = t.indexOf^(param2^);
   echo;   if ^(b == -1 ^|^| c == -1^) {
   echo;      a = false;
   echo;    } else {
   echo;      //results.push^(t.substring^(b+param1.length,c+param2.length-1^)^);
   echo;      WScript.Echo^(t.substring^(b+param1.length,c+param2.length-1^)^);
   echo;      t = t.substring^(c+param2.length^);
   echo;   }
   echo;}
   echo;//WScript.Echo^(results^);
  )> "%~4"
Exit /b


Niquel merci à vous 2 Okay

Encore une question comment je fais si j'ai une boucle for ainsi
Code:
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:%%11:%%13:>> ids.txt
)
? Car le %%11:%%13 est interpreté comme ca %%1:%%1


Merci pour tout Very Happy




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Problème de traitement de texte avec for 
programme a écrit:
Niquel merci à vous 2 Okay


Okay


programme a écrit:

Encore une question comment je fais si j'ai une boucle for ainsi
Code:
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:%%11:%%13:>> ids.txt
)
? Car le %%11:%%13 est interpreté comme ca %%1:%%1


On peut faire comme ça :

Code:
@echo off
setlocal enabledelayedexpansion


echo;1,2,3,4,5,6,7,8,"SALUT",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38> hello.txt

for /f "tokens=* delims=:," %%1 in (hello.txt) do (
  set a=%%1
  set a=!a:,=" "!
  set a=!a::=" "!
)
set nb=1
for %%a in ("!a!") do (
  set Array.!nb!=%%~a
  set /a nb+=1
)
set Array.Length=!nb!-1

echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:>>ids.txt
echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:

pause>nul





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R]Problème de traitement de texte avec for 
Flammrock a écrit:
programme a écrit:
Niquel merci à vous 2 Okay


Okay


programme a écrit:

Encore une question comment je fais si j'ai une boucle for ainsi
Code:
for /f "tokens=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:%%11:%%13:>> ids.txt
)
? Car le %%11:%%13 est interpreté comme ca %%1:%%1


On peut faire comme ça :

Code:
@echo off
setlocal enabledelayedexpansion


echo;1,2,3,4,5,6,7,8,"SALUT",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38> hello.txt

for /f "tokens=* delims=:," %%1 in (hello.txt) do (
  set a=%%1
  set a=!a:,=" "!
  set a=!a::=" "!
)
set nb=1
for %%a in ("!a!") do (
  set Array.!nb!=%%~a
  set /a nb+=1
)
set Array.Length=!nb!-1

echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:>>ids.txt
echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:

pause>nul


Merci, cela marche mais mon fichier hello contient plusieurs lignes et ton code me donne les infos de la derniere ligne. je pense que c'est à cause du 1er for qui prend la derniere ligne


Merci d'avance,




______________________________________________________

Programme
Skype
Répondre en citant
Message [R]Problème de traitement de texte avec for 
programme a écrit:
Merci, cela marche mais mon fichier hello contient plusieurs lignes et ton code me donne les infos de la derniere ligne. je pense que c'est à cause du 1er for qui prend la derniere ligne


il suffit d'arranger le code comme ceci :
Code:
@echo off
setlocal enabledelayedexpansion
 
 
echo;1,2,3,4,5,6,7,8,"SALUT",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38> hello.txt
echo;1,2,3,4,5,6,7,8,"HELLO",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38>> hello.txt
 
for /f "delims=" %%1 in (hello.txt) do (
  set a=%%1
  set a=!a:,=" "!
  set a=!a::=" "!

  set nb=1
  for %%a in ("!a!") do (
    set Array.!nb!=%%~a
    set /a nb+=1
  )
  set Array.Length=!nb!-1
  echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:>>ids.txt
  echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:
)

 

 
pause>nul



p.s : si jamais t'es amené à nouveau à faire des boucle for comme ça :
Code:
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:>> ids.txt
)

tu peux simplifier un tout petit peu en faisant :
Code:
for /f "tokens=1-9 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:>> ids.txt
)





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R]Problème de traitement de texte avec for 
Flammrock a écrit:
programme a écrit:
Merci, cela marche mais mon fichier hello contient plusieurs lignes et ton code me donne les infos de la derniere ligne. je pense que c'est à cause du 1er for qui prend la derniere ligne


il suffit d'arranger le code comme ceci :
Code:
@echo off
setlocal enabledelayedexpansion
 
 
echo;1,2,3,4,5,6,7,8,"SALUT",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38> hello.txt
echo;1,2,3,4,5,6,7,8,"HELLO",10,11,12,YOLO,14,15,16,OUI?,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38>> hello.txt
 
for /f "delims=" %%1 in (hello.txt) do (
  set a=%%1
  set a=!a:,=" "!
  set a=!a::=" "!

  set nb=1
  for %%a in ("!a!") do (
    set Array.!nb!=%%~a
    set /a nb+=1
  )
  set Array.Length=!nb!-1
  echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:>>ids.txt
  echo;!Array.1!:!Array.5!:!Array.7!:!Array.9!:!Array.11!:!Array.13!:
)

 

 
pause>nul



p.s : si jamais t'es amené à nouveau à faire des boucle for comme ça :
Code:
for /f "tokens=1,2,3,4,5,6,7,8,9 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:>> ids.txt
)

tu peux simplifier un tout petit peu en faisant :
Code:
for /f "tokens=1-9 delims=:," %%1 in (hello.txt) do (
echo %%1:%%5:%%7:%%9:>> ids.txt
)


Merci Okay

Pour les boucles je sais et en général je le fait mais là cela ne marchait pas




______________________________________________________

Programme
Skype
Message [R]Problème de traitement de texte avec for 


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