2010-11-05 5 views
1

Est-il possible d'ouvrir un fichier csv tel que:Ouvrir un fichier csv dans DOS

a,b,c,d,e,f,g,h 

Et ont DOS il lu (dans un fichier batch), vérifier les données, puis retirez-le à partir du fichier dans une certaine condition?

Code Pseudo:

open csv file 
for each letter 
    if letter is e 
     remove e from csv file 
close and save csv file 

EDIT:

Si je change ma source de données d'un fichier CSV à ceci:

a 
b 
c 
d 
e 
f 
g 
h 

Alors je peux appeler ceci:

rename file.txt file.bak 
     for /f %%a in (file.bak) do (
      set hmm=%%a 
      if !hmm!==e set hmm=helloworld 
      echo !hmm! >> file.txt) 

Bien que cela va imprimer les données d'origine après les nouveaux changements comme ceci:

a 
b 
c 
d 
helloworld 
f 
g 
h 
a 
b 
c 
d 
e 
f 
g 
h 
+2

Les fichiers batch ne sont pas adaptés pour cela. Considérez un langage plus riche (ou un tableur - ceux qui sont basés sur DOS existent). Aussi, est-ce vraiment DOS, ou juste une ligne de commande dans Windows? –

+0

Je prévois de l'exécuter dans un fichier batch. Je pensais utiliser VBScript, mais après avoir mes données (dans l'exemple ci-dessus, la lettre 'e'), j'ai besoin d'appeler une commande dos avec les données en paramètre. –

+0

@Seva: Sur ce site, j'ai vu peut-être une ou deux questions DOS. Toutes les données indiquent que la plupart des gens qui disent DOS signifient simplement "les trucs bizarres gris sur noir que vous n'utilisez jamais sous Windows" - c'est-à-dire le Windows Command Processor, cmd. J'ai cessé d'éduquer les gens sur les différences maintenant. C'est juste trop triste ;-). Cela étant dit, les simples fichiers CSV peuvent facilement être analysés avec 'for/f' presque sans problèmes. – Joey

Répondre

0

Voici mon fix:

rename file.txt file.bak 
     for /f %%a in (file.bak) do (
      set hmm=%%a 
      if !hmm!==e set hmm=helloworld 
      echo !hmm! >> file.txt) 
del file.bak 

Si vous ne supprimez pas le fichier bak il sera imprimé à la fois le txt et bak dans le nouveau fichier! Bizarre!

1

Avec FOR /F, vous pouvez passer par un fichier texte et de traiter le contenu de chaque colonne (appelés jetons), où vous pouvez choisir ce caractère est la séparation des colonnes .

Afin de l'enlever du fichier, je suppose que vous auriez à recréer un nouveau fichier où vous décidez quoi écrire et quoi ne pas écrire.

+0

J'ai vu quelques exemples de 'FOR/F' que je vais faire un peu d'expérimentation et faire un rapport! –

0

Vous pouvez parcourir les jetons en utilisant pour/f et utiliser ensemble str =% str: e =% pour supprimer les jetons que vous ne voulez pas et utilisez « > » pour indirecte à un autre fichier.

0

Voici un exemple de base dans Windows PowerShell 2:

$split = Get-Content "C:\temp\test.csv" | ForEach-Object {$_.Split(",") | Where-Object {$_ -ne "e"} } 
[string]::join(",", $split) | Out-File -Encoding ASCII "C:\temp\testOUT.csv" 

Cela fonctionne sur le boîtier de base (une seule ligne). Il a des problèmes avec un fichier CSV multiligne; peut-être quelqu'un avec plus de PS-fu que je peux le réparer.

Je n'ai pas testé cela avec des conditions aux limites (fichier vide, ligne vide, ligne composée d'une seule lettre, virgules adjacentes, ligne de tous les e, etc.). Pour les fichiers CSV avec en-têtes de colonne, PowerShell fournit le Import-Csv cmdlet (ainsi que Export-Csv).