我想创造一个新的世界。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
可以使用EasyMorp(它有一个免费版本)过滤各种条件的CSV。您可能需要使用EasyMorph中的参数将XX
代码传递到项目中。
@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
当所有的
-nn。csv。。csv
文件已被处理,:rennew
例程重命名所有的-nn。新的
到
不需要重命名周期就可以处理这个序列。这就是我使用的方法。
编辑:添加了一个目标文件夹
和一个源文件夹
的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文件,其中包含由其操作定义的数据。该文件不存在,它是动态创建的。我怎么能在烧瓶里做这个?