在DOS中打开csv文件

在DOS中打开csv文件,csv,dos,batch-file,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

是否可以打开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

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


为了将其从文件中删除,我想您必须重新创建一个新文件,在该文件中您可以决定写什么和不写什么。

对于/F,您可以浏览文本文件并处理每列的内容(称为标记),从中可以选择分隔列的字符


为了将其从文件中删除,我想您必须重新创建一个新文件,在该文件中您可以决定写什么和不写什么。

您可以使用for/f和use遍历令牌 set str=%str:e=%
删除不需要的令牌,然后使用“>”将其间接传递到另一个文件。

您可以使用for/f和use遍历令牌 set str=%str:e=% 要删除您不需要的令牌,然后使用“>”将其间接发送到另一个文件。

以下是我的修复方法:

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打印到新文件中!奇怪

以下是我的解决方案:

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打印到新文件中!奇怪

以下是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提供(以及导出CSV)。

以下是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提供了(以及导出CSV)。

批处理文件不适合这样做。考虑更丰富的语言(或电子表格-基于DOS的确实存在)。另外,它真的是DOS,还是Windows中的命令行?我正计划通过批处理文件运行它。我曾考虑使用VBScript,但在获得数据(在上面的示例中,字母“e”)后,我需要调用一个dos命令,并将该数据作为参数。@Seva:在这个网站上,我看到了一个或两个实际的dos问题。所有数据都表明,大多数人说DOS只是指“你在Windows上从来没有使用过的奇怪的灰色加黑色的东西”——即Windows命令处理器cmd。到目前为止,我已经放弃了对人们进行差异教育。这太令人伤心了;-)。也就是说,简单的CSV文件可以用
for/f
轻松解析,几乎没有问题。如果它确实是Windows命令行,那么Windows脚本主机(JS/VBS)和文件系统/TextStream对象就是答案。所有解析都是通过ReadLine()和String.split()完成的。批处理文件不适合这样做。考虑更丰富的语言(或电子表格-基于DOS的确实存在)。另外,它真的是DOS,还是Windows中的命令行?我正计划通过批处理文件运行它。我曾考虑使用VBScript,但在获得数据(在上面的示例中,字母“e”)后,我需要调用一个dos命令,并将该数据作为参数。@Seva:在这个网站上,我看到了一个或两个实际的dos问题。所有数据都表明,大多数人说DOS只是指“你在Windows上从来没有使用过的奇怪的灰色加黑色的东西”——即Windows命令处理器cmd。到目前为止,我已经放弃了对人们进行差异教育。这太令人伤心了;-)。也就是说,简单的CSV文件可以用
for/f
轻松解析,几乎没有问题。如果它确实是Windows命令行,那么Windows脚本主机(JS/VBS)和文件系统/TextStream对象就是答案。所有的解析都是通过ReadLine()和String.split()完成的。我已经看到了一些
FOR/F
的示例,我将做一些实验并报告!我已经看到了一些关于/F的
的例子,我将做一些实验并报告!