首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据列值将CSV文件拆分为多个文件(不使用AWK)

如何根据列值将CSV文件拆分为多个文件(不使用AWK)
EN

Stack Overflow用户
提问于 2015-12-21 02:57:06
回答 2查看 2.3K关注 0票数 0

我有一份附有发票数据的CSV,例如:

  • 发票#
  • 蒲参
  • 客户代码
  • 客户名称
  • 文件日期
  • 产品代码
  • 产品名称

该CSV将有不同数量的每张发票,其中涉及发票产品线,这可能跨越多个发票号码。

我需要能够运行一个批处理文件来查看这个CSV,并根据Col A-In发金额#中的值拆分成多个CSV。

例:

  • 111222,PO123,C100000,测试商店,1/1/15,AB1000,测试软玩具
  • 111222,PO123,C100000,测试商店,1/1/15,AB1001,测试软Toy1
  • 111222,PO123,C100000,测试商店,1/1/15,AB1002,测试软Toy2
  • 222111,PO321,C111000,My Store,1/10/15,AB1000,测试软玩具
  • 222111,PO321,C111000,My Store,1/10/15,AB1001,测试软Toy1
  • 222111,PO321,C111000,My Store,1/10/15,AB1002,测试软Toy2

.bat应该运行并将CSV分成两个单独的CSV:

CSV1:

  • 111222,PO123,C100000,测试商店,1/1/15,AB1000,测试软玩具
  • 111222,PO123,C100000,测试商店,1/1/15,AB1001,测试软Toy1
  • 111222,PO123,C100000,测试商店,1/1/15,AB1002,测试软Toy2

CSV2:

  • 222111,PO321,C111000,My Store,1/10/15,AB1000,测试软玩具
  • 222111,PO321,C111000,My Store,1/10/15,AB1001,测试软Toy1
  • 222111,PO321,C111000,My Store,1/10/15,AB1002,测试软Toy2

让软件安装在我的服务器上将是一个麻烦-因此,如果有这样的话,这是可以做到的,而不必安装软件,这将使我非常高兴。

我很感谢之前也有类似的问题--但是,我还没能找出是否有另一个脚本可以不安装Awk而运行。

问候瑞克

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-21 09:05:40

代码语言:javascript
复制
@ECHO OFF
SETLOCAL
SET "destdir=u:\test"
MD "%destdir%" 2>nul
FOR /f "tokens=1*delims=" %%a IN (
 'dir /b /a-d /o-d "%destdir%\NewsxpressInvoices_*.csv" ' ) DO (
  set "sourcefile=%%a"
  goto havefile)

:havefile
FOR /f "delims=" %%a IN (%destdir%\%sourcefile%) DO (
 FOR /f "tokens=1delims=," %%x IN ("%%a") DO (
 >>"%destdir%\inv%%x.csv" ECHO(%%a
 )
)

GOTO :EOF

您需要更改destdir的设置以适应您的情况。

我在测试中使用了一个名为q34388332.txt的文件,其中包含了您的数据。

生产u:*invoicenumber*.csv

修改后,包含了查找-最新-新闻-新闻媒体的声音_*..csv文件作为sourcefile取代了q34388332.txt测试文件

[再次编辑以包含显式的目录名“

建议:对源和目标目录名称使用不同的变量,以防以后更改它们。]

票数 0
EN

Stack Overflow用户

发布于 2015-12-21 12:47:47

此解决方案假定输入文件按发票#排序:

代码语言:javascript
复制
@echo off
setlocal EnableDelayedExpansion

set /A n=0, invoice=0
for /F "tokens=1* delims=," %%a in (input.csv) do (

   rem Get the number of output file based on Invoice #
   set /A "n+=(invoice-%%a>>31)&1, invoice=%%a"

   rem Output this line to proper file
   >> output!n!.csv echo %%a,%%b

)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34388332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档