在DOS中打开一个csv文件

时间:2010-11-05 16:00:19

标签: csv dos batch-file

是否可以打开csv文件,例如:

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

让DOS读取(在批处理文件中),检查数据,然后在一定条件下将其从文件中删除?

伪代码:

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

编辑:

如果我将数据源从csv更改为:

a
b
c
d
e
f
g
h

然后我可以这样称呼:

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)

虽然这会在新的更改之后打印出原始数据,如下所示:

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

4 个答案:

答案 0 :(得分:1)

使用FOR /F,您可以浏览文本文件并处理每列的内容(称为标记),您可以在其中选择将列分隔的字符。

为了将其从文件中删除,我猜你必须重新创建一个新文件,在那里你决定写什么和不写什么。

答案 1 :(得分:0)

您可以使用for / f迭代标记并使用 设置str =%str:e =% 删除你不想要的令牌,然后使用“>”把它间接到另一个文件。

答案 2 :(得分:0)

这是我的修复:

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

如果你不删除bak文件,它会将txt和bak打印到新文件中!怪异!

答案 3 :(得分:0)

以下是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"

这将适用于基本情况(单行)。它存在多行CSV问题;或许有更多PS-fu的人比我能解决它。

我没有用边界条件测试它(空文件,空行,由单个字母组成的行,相邻的逗号,所有e的行等)。

对于带有列标题的CSV文件,PowerShell提供Import-Csv cmdlet(以及Export-Csv)。