Question Appliquer la fonction au contenu d'un fichier CSV


Je travaille actuellement sur un fichier batch qui me donne du fil à retordre. J'ai un fichier .CSV généré qui contient un en-tête et deux colonnes. Le fichier se trouve également être encodé en ASCII (en découvrant que c'était une véritable révélation!) La deuxième colonne contient une liste de fichiers texte que je dois lire et appliquer une fonction à chacune des entrées qui y sont contenues.

J'ai pensé utiliser la copie ou le type >> pour fusionner les fichiers en un seul, plus facile à analyser, mais j'ai du mal à lire le contenu du csv et à utiliser le contenu ...

Jusqu'à présent, j'utilise

for /f "skip=1 usebackq tokens=1-2 delims=," %%a in ("%temp%\list.txt") do echo %%b>>"%temp%\newfile.txt"

mais cela ne fonctionne pas ... (tout ce que je reçois est un fichier vide) et je n'arrive pas à comprendre quoi faire pour appliquer une fonction à tous les fichiers listés afin de pouvoir ensuite traiter leur contenu combiné. Cela fait deux jours que je me débat avec cela et je commence à être contrarié par ce qui semble simple mais je n'arrive pas à le comprendre.

Voici le contenu de mon fichier CSV

Numéro de client, nom du client
  44456, James Bond
  33356, docteur mal

Et j'ai un dossier contenant des fichiers nommés James Bond.txt, Mister Rogers.txt, Chief Bob, txt et Doctor Evil.txt qui contiennent les informations sur le client. Donc, je veux seulement rassembler les noms requis par le fichier CSV, puis imprimer la liste complète de tous les éléments en une seule fois.

En espérant que cela clarifie les choses (je sais, c'est difficile à expliquer)

MODIFIER J'ai essayé le morceau de code proposé et ça ne marche toujours pas ... Tout ce que je reçois est un fichier vide ... mais pour une raison quelconque, je pense que cela semble prometteur.


2
2018-05-25 19:39


origine


Vous devriez montrer un exemple de votre fichier csv, si nécessaire neutralisé. Sinon, il est difficile de donner de l'aide. Peut-être devriez-vous utiliser tokens=1*pour obtenir le reste de la ligne dans %%b - LotPings
"mais ça ne marche pas." est une information sans valeur - Si vous voulez de l’aide, vous devez décrire son échec. Quel résultat obtenez-vous? - dbenham


Réponses:


Fourni le Client name Les colonnes ont également nommé des fichiers dans le dossier avec .txt extension, le lot suivant devrait faire.

:: Q:\TEST\2017-05\25\DEMO\SU_1212933.cmd
@Echo off
For %%A in (".\folder") Do Set "folder=%%~fA"
( for /f "skip=1 usebackq tokens=1* delims=," %%a in (
   ".\list.csv"
  ) do If Exist "%folder%\%%b.txt" Type "%folder%\%%b.txt"  
) >".\Report.txt"

Pour démontrer que c'est mon environnement de test

> tree . /F
Q:\TEST\2017-05\25\DEMO
│   SU_1212933.cmd
│   list.csv
│   Report.txt
│
└───folder
        James Bond.txt
        Doctor Evil.txt

le contenu des deux fichiers txt dans folder

> type folder\*.txt

folder\James Bond.txt

#################################################
## this is file "James Bond.txt" in folder     ##
#################################################

folder\Doctor Evil.txt

#################################################
## this is file "Doctor Evil.txt" in folder    ##
#################################################

Après avoir exécuté le lot, le fichier report.txt contient:

> type Report.txt
#################################################
## this is file "James Bond.txt" in folder     ##
#################################################
#################################################
## this is file "Doctor Evil.txt" in folder    ##
#################################################

1
2018-05-25 21:54



J'ai essayé cette solution mais cela ne fonctionne pas. Après beaucoup de travail, j'ai découvert qu'il échouait dans la partie IF EXIST de la séquence. Mais la première partie fonctionne bien, donc je pourrais finir par faire les choses en deux étapes. Pas élégant comme je le voudrais mais si ça marche ... - Flaver-D
Modification de ma réponse pour mieux démontrer ce que fait le lot. Peut-être que vous n'avez pas adapté le dossier de variables correctement. - LotPings
On dirait bien qu'il ne peut pas trouver les fichiers sur le mien ... Je vais configurer quelques dossiers comme sur votre machine et voir ce qui doit être réparé pour mon application. Je vous remercie. - Flaver-D
Eh bien, comme cela fonctionne dans l'environnement de test, il doit y avoir des différences dans votre environnement réel. Pour déboguer, exécutez le lot dans une fenêtre cmd ouverte et définissez temporairement echo sur pour voir les erreurs - LotPings
@ McDonald's Bien que je doute que le chemin soit la raison pour laquelle j'ai changé la commande Set pour un qui résout le chemin relatif vers un absolut. - LotPings