Aide à l'écriture d'un script batch pour analyser le fichier CSV et de sortie d'un fichier texte

J'ai du mal à écrire un script batch qui permet de lire un fichier CSV comme ci-dessous

Name:, City:, Country:
Mark, London, UK
Ben, Paris, France
Tom, Athens, Greece

Il y aura une ligne d'en-tête dans le fichier CSV. Il doit la sortie vers un fichier texte comme ci-dessous:

Name:Mark
City:London
Country:UK

Name:Ben
City:Paris
Country:France

Name:Tom
City:Athens
Country:Greece

Le séparateur de champ (:) dans le dessus de la production devrait être fournie dans la ligne d'en-tête lui-même. Donc, tout ce que je dois faire est de concaténer le champ titre et sa valeur.

Le nombre de colonnes dans ce fichier CSV n'est pas fixe, donc le script ne doit pas se limiter à 3 jetons. Aide gentiment!

langue agnostique (je peux vous fournir des conseils sur la façon de résoudre ce cas en perl)?
Merci de codage en perl n'est pas de me troubler.use strict; use Data::Dumper; my $filename = $ARGV[0]; open FILE, $filename or die; my $header = <FILE>; my @keys = split /,/, $header; my @data; for my $line (<FILE>){ chomp; my @values = split /,/, $line; my %data_rows; @data_rows{@keys} = @values; push @data, %data_rows; } print Dumper(\\@data); Mais j'ai besoin d'un Windows script batch solution. Je trouve qu'il est difficile d'exprimer pleinement avec le script de commandes.
1. Sont il y a toujours des espaces après les virgules? 2. Peut jetons (si les en-têtes ou des valeurs) contiennent des espaces? 3. Est-il un nombre maximal de jetons? 4. Peut contenir des jetons de virgules?
1.Il n'y aura pas d'espace après la virgule, même si il serait mieux de prendre cette affaire. 2. Les jetons peuvent contenir des espaces. 3. Le pas de. de jetons n'est pas fixe. Cependant, si vous faites référence maximale admissible jetons ouais, ça peut être fixée à une valeur raisonnable (10 ou quelque chose). 4. Jetons strictement ne peut pas contenir de virgule.
Le perl solution que j'ai trouvé qui peut être fait avec un one-liner. perl -F, -lane "if ($.==1) {@keys = @F} else{print @keys[$_].$F[$_] foreach(0..$#F)} " Pourquoi j'ai besoin de script batch est parce qu'il est plus facile de partager avec mes collègues qui n'ont pas les privilèges pour installer perl sur leurs machines.

OriginalL'auteur Benny | 2011-06-24