2017-06-28 5 views
0

J'ai un fichier (fichier.txt) contenant une seule ligne (j'ai concaténé toutes les lignes en une). J'ai donc la ligne suivante:Batch - Convertit une ligne dans un fichier texte d'entier en code ASCII

85;048;048;057;048;055; 045 ;84;048;048;057;055;055 

et je voudrais que file.txt contenant la conversion ASCII de chaque numéro délimité par

; 

Ainsi, le fichier.txt devrait contenir alors:

U00907 - T00977 

J'ai essayé avec une boucle, mais il ne fonctionne pas vraiment:

set content= 
for /f "delims=;" %%i in (file.txt) do (
    cmd /c exit %%i 
    Set "char=!=ExitCodeAscii!" 
    set content=%content% %char% 
) 

Des idées?

+0

Basé sur votre sortie de fichier txt prévu, 'U00907 - T00977', vous devrez peut-être ajouter une logique supplémentaire pour éviter un résultat' U00907-T00977'. La séquence a complètement ignoré vos espaces qui auraient dû être inclus dans votre ligne. Vos 0 préfixés ne font aucune différence, votre ligne de texte devrait donc être similaire à: 85; 048; 048; 057; 048; 055; 32; 045; 32; 84; 048; 048; 057; 055; 055; – Compo

+1

@ compo: Observation1: Il y a deux caractères d'espace de chaque côté de '045' dans les données d'exemple - peut-être sont-ils littéralement destinés (si cela est unique aux espaces - ma boule de cristal est un peu brumeuse ... Observation2: Il y a une donnée Je dois vous rappeler l'effet * octal * – Magoo

+0

@Magoo, dans les versions originale et éditée du corps de la question, il ne semble y avoir qu'un seul espace de chaque côté de '045'. t une tentative de réponse, juste une correction de données source – Compo

Répondre

1

quelques échecs logiques mineurs: avec delims=; vous prenez seulement le premier jeton 85 et ignorez le reste. Vous avez besoin d'une boucle pour obtenir chaque ligne de file.txt et une autre boucle pour traiter les jetons dans chaque ligne (un simple for sans /f). Et vous avez besoin de delayed expansion.

@echo off 
setlocal enabledelayedexpansion 
for /f "delims=" %%i in (file.txt) do (
    set content= 
    for %%a in (%%i) do (
    cmd /c exit %%a 
    Set "char=!=ExitCodeAscii!" 
    set content=!content!!char! 
) 
    echo !content:-= - ! 
) 

Si vous êtes sûr, file.txt ne contient qu'une seule ligne (ou vous ne se soucient pas du reste), vous pouvez remplacer la première boucle for /f avec <file.txt set /p string= et processus avec
for %%a in (%string%) do (

+0

S'il vous plaît voir mes remarques à Compo sur le texte initial de la question. Je peux modifier un peu votre approche. – Magoo

+0

Wow, je suis impressionné. Réponse très rapide en quelques heures (minutes). Semble être la bonne réponse Stephan. J'ai besoin de tester un peu. Merci beaucoup à Magoo et Compo aussi .. Vous me sauvez beaucoup de temps! – Mojomuseflo