是否可以打开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
答案 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)。