首页 新闻 会员 周边 捐助

Csv文件合并

0
悬赏园豆:30 [已解决问题] 解决于 2018-03-14 08:24

如何将一个路径下的Csv文件合并成一个,每一个Csv文件都有几千列和几千行,数据量很大。

ifz的主页 ifz | 菜鸟二级 | 园豆:302
提问于:2018-03-13 08:14
< >
分享
最佳答案
0

Windows 中实现合并多个文件内容到一个文件中
copy *.sql MERGE.sql

Linux 或 类Unix 下实现合并多个文件内容到一个文件中
cat b1.sql b2.sql b3.sql > b_all.sql
或者
cat *.sql > merge.sql

收获园豆:29
2012 | 高人七级 |园豆:21645 | 2018-03-13 08:41

在程序中使用CMD合并Csv,在执行WaitForExit(等待程序执行完)方法时断点就没了,一直没有回应

ifz | 园豆:302 (菜鸟二级) | 2018-03-13 08:46

@BlueWhale`: 先写个bat 或者sh的批处理脚本,单独运行看行吗,之后再用WaitForExit这个程序中调用,如果出现问题,一般是执行的路径有问题【Process执行工作路径设置到bat的地方或者使用绝对路径】

2012 | 园豆:21645 (高人七级) | 2018-03-13 09:30

@2012: 在CMD中可以,在程序中接收CMD返回结果时无反应

ifz | 园豆:302 (菜鸟二级) | 2018-03-13 10:11

@2012: 贴上代码,您看下哪里有问题吗

 1   public static void MergeCsv(string path)
 2         {
 3             try
 4             {
 5                  //根据path,将path下Csv格式文件按名字分组合并
 6                  //比如名字包含X1,X2,合并结果为X1-AllData.csv,X2-AllData.csv
 7                  //但是数据量很大,有几千列几千行
 8                 System.Diagnostics.Process p = new System.Diagnostics.Process();
 9                 p.StartInfo.FileName = "cmd.exe";
10                 p.StartInfo.UseShellExecute = false;//是否使用操作系统shell启动
11                 p.StartInfo.RedirectStandardInput = true;//接受来自调用程序的输入信息
12                 p.StartInfo.RedirectStandardOutput = true;//由调用程序获取输出信息
13                 p.StartInfo.RedirectStandardError = true;//重定向标准错误输出
14                 p.StartInfo.CreateNoWindow = false;//不显示程序窗口
15                 p.Start();//启动程序
16                 p.StandardInput.WriteLine("E:");
17                 p.StandardInput.WriteLine("cd "+path);
18            
19 
20                 System.IO.DirectoryInfo dir = new DirectoryInfo(path);
21                 FileInfo[] fiList = dir.GetFiles();
22                 //获得给定路径下X1,X2,X3,X4.。。
23                 string[] PathArr = fiList.Select(x => x.Name.Split('_')[3]).Distinct().ToArray();
24                 string cmd = "E:&" + path + "&";
25                 string month = path.Split('\\')[3];
26                 string day = path.Split('\\')[4];
27                 foreach (var item in PathArr)
28                 {
29                     p.StandardInput.WriteLine("copy *" + item + "*.csv " + month + "-" + day + item + "-Data .csv");;
30                 }
31 
32                 p.StandardInput.AutoFlush = true;
33                 string str = p.StandardOutput.ReadToEnd();
34                 p.WaitForExit(); //等待程序执行完
35                 p.Close(); //退出进程
36             }
37             catch (Exception e)
38             {
39                 throw e;
40             }
41            
42           
43   
44 
45         } 
ifz | 园豆:302 (菜鸟二级) | 2018-03-13 10:15
其他回答(1)
0

CSV不就是文本吗?用FileStream对象处理一下就可以了

收获园豆:1
新的开始 | 园豆:679 (小虾三级) | 2018-03-13 22:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册