当前位置: 首页 > 知识库问答 >
问题:

过滤csv文件,并使用数据创建一组新的. csv文件

朱越
2023-03-14

我想创造一个新的世界。cmd文件,用于过滤所有。csv文件,然后创建一组。包含结果的csv文件。

下面是一个场景。

有很多。文件夹中的csv文件csv文件中的第一列数据包含一个代码HH-二十、 在哪里可以是任何一组数字,XX范围从01到48

我希望批处理文件在01开始XX,在那里找到HH?????-01,它取行并将结果放入名为-01.csv的输出文件中

开始时的代码HH可能不同,因此它还必须过滤HH

然后对文件夹中的每个csv文件重复此操作。

然后对HH????重复整个过程-02并将文件输出到名为-02的csv。csv等等,最多可达到-48。csv

我没有太多——我根本不是这个领域的专家,只是VBA方面的专家

我从网上获得了这个模板,我认为我可以改进,但我真的不明白如何适应这个。我不熟悉FOR循环

@echo off
del c:\Total.csv
Del c:\Final.csv

Type c:\BATTEST\*.CSV > c:\Total.csv

FOR /F "eol=- delims=~ tokens=1-5,6,7*" %%1 IN ( c:\Total.CSV ) DO IF %%4 EQ 456 ECHO  %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 >> c:\Final.csv

中的示例行。csv文件是:(记住,HH可能会有所不同)

HH777777-01,A,500,200,10,11,12,13,15.2,17.9,26,B
HH236748-02,C,300,100,11,14,17,19,21.2,18.9,14,B

每个文件都有一个相同的头,在最终输出文件中有这个头会很好。

标题是

Code,type,head,file,make,run,style,line,edge,model,letter,status

共有3个答案

须巴英
2023-03-14

可以使用EasyMorp(它有一个免费版本)过滤各种条件的CSV。您可能需要使用EasyMorph中的参数将XX代码传递到项目中。

傅乐湛
2023-03-14
@ECHO OFF
SETLOCAL
FOR /L %%a IN (101,1,148) DO CALL :header %%a

FOR %%f IN (q21956251*.csv) DO (
 FOR /f "usebackqskip=1delims=" %%a IN ("%%f") DO (
  FOR /f "tokens=2delims=-," %%d IN ("%%a") DO (
   FOR /L %%h IN (101,1,148) DO IF "1%%d"=="%%h" >>"-%%d.new" ECHO(%%a
  )
 ) 
)
FOR /L %%a IN (101,1,148) DO CALL :rennew %%a

GOTO :EOF

:header
SET "destfile=%1"
>"-%destfile:~-2%.new" ECHO(Code,type,head,file,make,run,style,line,edge,model,letter,status
DEL "-%destfile:~-2%.csv" 2>NUL
GOTO :eof
:rennew
SET "destfile=%1"
REN "-%destfile:~-2%.new" "-%destfile:~-2%.csv"
GOTO :eof

你没有解释你所说的的意思,开始时的代码HH可能不同,因此它还必须过滤HH——如果没有明确的规范,我们就开始猜测游戏。

此例程将首先为n=01到48创建一组名为-nn.new的新文件,将标题行写入每个文件,然后删除任何现有的-nn.csv

下一步是选择所有。csv文件-我选择了q21956251*。csv用于我的测试。每个文件名依次分配给%%f

然后%%a从文件%%f接收每一行。“usebackq是必需的,因为%%f被引用(如果文件名中有空格)。skip=1表示跳过第一行(因为它是一个标题),delims=表示分配整行”。

的下一个查看%%a中的行,并选择第二组(标记=2)字符,其中-都是分隔符。这应该从数据中选择01和'02'。然后将数字“101”到“148”与1与检索到%%d中的数字的串联进行比较。当存在匹配项时,从文件中读取的行%%a将附加到-%%d.new

当所有的。csv文件已被处理,:rennew例程重命名所有的-nn。新的-nn。csv。

不需要重命名周期就可以处理这个序列。这就是我使用的方法。

娄飞鸾
2023-03-14

编辑:添加了一个目标文件夹和一个源文件夹的cd命令。

这在这里起作用——在一些示例文件上进行测试。

@echo off
setlocal enabledelayedexpansion
set "target=d:\target\folder"
cd /d "c:\source\folder"
for /L %%a in (101,1,148) do (
    set num=%%a
    del "%target%\-!num:~-2!.csv" 2>nul
    >"%target%\-!num:~-2!.csv.txt" echo Code,type,head,file,make,run,style,line,edge,model,letter,status
)

for %%a in (*.csv) do (
    for /f "skip=1 usebackq delims=" %%b in ("%%a") do (
        for /f "tokens=1,2 delims=-," %%c in ("%%b") do (
           set "line=%%c"
           if /i "!line:~0,2!"=="HH" >> "%target%\-%%d.csv.txt" echo %%b
        )
    )
)
ren "%target%\*.csv.txt" *.
pause
 类似资料:
  • 问题内容: 我想创建一个csv文件,但是当我运行代码时,它返回一个空白页,没有csv文件。我使用PHP5。我使用以下代码: 谢谢! 问题答案: 其空白,因为您正在写信。您应该写到using 代替,还应该发送标头信息以表明它是csv。 例

  • 我正在寻找一个批处理文件合并所有CSV文件在一个特定的文件夹与行"LF"结束。 下面的脚本创建了一个带有“CRLF”EOL的输出文件,但是我的自动数据加载程序只接受“LF”EOL。 此外,我想在输出文件中有一个头。 帮助将不胜感激,因为我已经浪费了足够的时间寻找解决方案。 这就是我在下面尝试的。

  • 每次在“调用解析时间”列中有一个新的月份,我都希望用那个月份和年份创建一个新的csv文件。对于包含那个月份和年份的所有行,都要过滤到那个新的csv中。 这样地: 所有数据。csv 新文件于2015年5月发布。从所有数据创建csv。仅限2015年5月20日的csv数据 到目前为止,我有这个,但我必须为每年和每月手动创建一些东西: 编辑---------------------------------

  • 问题内容: 有人可以提供使用fgetcsv从CSV文件创建数组的代码吗? 我使用以下代码从一个简单的CSV文件创建一个数组,但是当我的一个字段包含多个逗号(例如地址)时,该方法将无法正常工作。 *此外,我的托管服务不支持str_getcsv。 上面的代码不适用于以下CSV文件示例。第一栏是姓名,第二栏是地址,第三栏是婚姻状况。 问题答案: 就像您在标题中所说的那样,fgetcsv是必经之路。它很容

  • 问题内容: 我正在研究Java ExtJS应用程序,需要在其中创建和下载CSV文件。 单击按钮后,我希望将CSV文件下载到客户端计算机上。 在按钮侦听器上,我正在使用AJAX调用servlet。在那里,我正在创建一个CSV文件。 我不希望将CSV文件保存在服务器中。我希望使用下载选项 动态 创建文件。我希望将文件的内容创建为字符串,然后将其作为 文件 提供,然后在浏览器中以下载模式打开该 文件 (

  • 我试图允许用户下载一个CSV文件,其中包含由其操作定义的数据。该文件不存在,它是动态创建的。我怎么能在烧瓶里做这个?