mysql多行合并成一行_数据文件合并与拆分

在数据处理业务中,经常要把文件结构相同或近似相同的数据文件合并成一个文件,或者将一个比较大的数据文件拆分成小的数据文件。本文将介绍文本文件和 Excel 文件合并及拆分会遇到的几种情况,并提供用 esProc SPL 编写的代码示例。esProc 是专业的数据计算引擎,SPL 中有完善的文件导入、导出及目录操作函数,非常适合做数据文件的合并及拆分工作。

一、 文件合并

1. 同构文本文件合并

在某个文件目录下有多个文本文件,这些文件表头和列结构完全相同,只是数据行数和数据内容不同,需要将这些文件的数据全部合并到一个文本文件中,共用同一个表头。

示例:在e:/orders目录下有每日的订单文本文件,每个文件的结构相同,第一行是列名,第二行开始是数据,如下图所示,请将它们合并成一个订单表文件orders.txt。

c0122dbd44c766f71b2e98d09c3375c6.png

esProc SPL脚本如下:

A注释

如果e:/orders还有子目录,子目录中的txt文件也需要一起合并,那么把A1格改成=directory@ps("e:/orders/*.txt"),选项@s表示递归查找所有子目录下的文件。

上面这段脚本是假设内存能够装下合并以后的全部数据,如果装不下,那么应该用下面这段脚本:

ABC

A1 列出目录中的所有txt文件的完整路径名称,如果要查找子目录,则加上@s选项

A2 对列出的文件进行循环

B2 用游标读取每一个文件,@t表示第一行是列名

B3-C4 将B2游标中数据导出,第一次要导出列名,其后用@a进行追加

2. 结构近似的文本文件合并

如果文件结构并不是完全相同,比如列的顺序不一样、列数不一样,但各文件都含有共同的几列,想要把这些共同列的数据都合并到一个文件中。合并这些文件时,需要按指定顺序读出每个文件中的这些共同列数据。

示例:还是上面这个例子,已知所有订单文件都有ID、Company、Area、OrderDate、Amount这5列,但各文件中列的顺序并不相同,有的文件还有其它一些列,请将各文件中的这5列数据合并到orders.txt文件中。

esProc SPL脚本如下:

A注释

同样地,如果内存装不下合并后的所有数据,则使用下面这段脚本:

ABC

3. 文件名转成列数据

在合并数据的同时,需要为合并后的数据增加一列,并用合并前的文件名给此列赋值,以便标记数据类别或来源。

示例:在e:/orders目录下有各种零件的订单Excel文件,文件名就是零件的名字,比如tyre.xlsx、engine.xlsx……等,每个文件的结构相同,第一行是列名,第二行开始是数据,如下图所示,请将它们合并成一个订单表文件orders.xlsx,并增加一列PartName用来记录零件的名字。

esProc SPL脚本如下:

A注释

同样地,如果内存装不下合并后的所有数据,则使用下面这段脚本:

ABC

合并后的orders.xlsx文件部分数据如下图所示:

c9f48141a824b092a5f35f556386da10.png

二、 文件拆分

1. 分组拆分

对文件中数据进行分组,把每组数据单独存为一个文件,用组名为文件命名。

示例:在订单表Excel文件中有各种零件的订单,请把同种零件的订单各存为一个Excel文件,以便发送给零件生产部门。

esProc SPL脚本如下:

AB

A1 读入所有原始数据

B1 按partName分组

A2 循环每个零件组的订单信息

B2 以零件名称作为文件名,导出零件信息

如果原文件很大,不能全部装入内存,那么应该使用游标方式读数,脚本如下:

ABCD

A1 创建游标读取原始数据

A2 循环游标读数,每次读50000行(读多少行根据内存大小决定)

B2 对每次读取的数据按partName分组

B3 循环每组零件

C3 以零件名称作为文件名创建文件对象

C4-D5 如果文件已存在,则用@a追加写入零件订单信息,不存在则用@t先写入列名再导入数据

2. 记录占据多行的拆分

在文本文件中,一条数据记录是由多行数据组成的,在拆分成小文件时,要识别哪几行是同一条数据记录,保证同一条数据记录不会被拆分到两个文件中。

示例1:有网站运行日志文件log.txt,每条日志由5行组成,现在需要把这个日志文件拆分成一些小文件,每个文件由1000条日志组成。

esProc SPL脚本如下:

AB

A1 用游标读取日志文件数据,@s表示将整行读成一个字符串

A2 循环游标,每次取5000行,刚好是1000条日志

B2 按循环序号生成日志文件名,如log_1.txt、log_2.txt……,然后将当前取出的所有行写入

示例2:有程序运行日志文件log.txt如下图所示,每条日志由不确定的几行组成,每条日志由中括号开头,其后只要不是中括号开头的行,都与它属于同一条日志。现在需要把这个日志文件拆分成一些小文件,每个文件由1000条日志组成。

c11e3da8bdb2dc1196af0b8c1672d53c.png

esProc SPL脚本如下:

AB

A1 打开日志文件读取数据,@n表示将每一行读成一个字符串,所有串组成一个序列返回

B1 筛选出非空的行

A2 按行是否用中括号开头作为分组条件,中括号开头的作为一个新组,不是则并到当前组。最后把所有组序列转换成游标

A3 循环游标,每次取1000个组,即1000条日志

B3 按循环序号生成日志文件名,如log_1.txt、log_2.txt……

B4 两层循环,外层是循环1000个组,内层循环每组的成员(即数据行),将每行追加写入文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/542453.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

日期setMinutes()方法以及JavaScript中的示例

JavaScript日期setMinutes()方法 (JavaScript Date setMinutes() method) setMinutes() method is a Date class method, it is used to set the minutes to the Date object with a valid minutes value (between 00 to 59). setMinutes()方法是Date类的方法,用于将…

suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区

引言:我们常常在使用系统的时候突然发现,哎呦~~~我们的磁盘空间不够用啦!我遇到常见的就是数据库数据暴增,预留的空间没有啦,只好新添加磁盘,在VB虚拟机上就可以实现,往往苦于没有图文并茂的好资…

Java SecurityManager checkMemberAccess()方法与示例

SecurityManager类的checkMemberAccess()方法 (SecurityManager Class checkMemberAccess() method) checkMemberAccess() method is available in java.lang package. checkMemberAccess()方法在java.lang包中可用。 In checkMemberAccess() method we access public members …

arcgis字段计算器无法赋值_Arcgis空间连接工具的妙用

​Arcgis功能真的无比强大,读书时一般只会用到一些常见的,工作后挖掘了很多新功能,数据处理效率大幅提升,个人觉得arcgis是最强大最好用的gis软件!本节给大家分享下空间连接功能的两个妙用。空间连接功能很多giser应该…

linux重装hal服务安装,linux ubuntu 安装微信客户端

下载(我的系统是32 位的)rootmarhal:/opt# wget https://github.com/geeeeeeeeek/electronic-wechat/releases/download/V2.0/linux-ia32.tar.gz解压rootmarhal:/opt# tar xvf linux-ia32.tar.gz下载微信图标移动到解压目录rootmarhal:/home/marhal/下载# mv wechat.ico /opt/e…

currency abap_Java Currency getDefaultFractionDigits()方法及示例

currency abap货币类getDefaultFractionDigits()方法 (Currency Class getDefaultFractionDigits() method) getDefaultFractionDigits() method is available in java.util package. getDefaultFractionDigits()方法在java.util包中可用。 getDefaultFractionDigits() method …

python爬虫自动更换ip_Python 爬虫使用动态切换ip防止封杀

对于爬虫被封禁 ! 爬虫一般来说只要你的ip够多,是不容易被封的。 一些中小网站要封杀你,他的技术成本也是很高的,因为大多数网站没有vps,他们用的是虚拟空间或者是sae,bae这样的paas云。 其实就算他们不考虑…

linux nohup不生成日志,linux重定向及nohup不输出的方法

FreeBSD可以同时运行多个进程,在shell下直接输入命令后,shell将进程放到前台执行。如果要将进程放到后台执行,需要在命令行的结尾加上一个 “&” 符号。下面的命令从后台执行,从ftp.isc.org下载文件。$ fetch ftp://ftp.isc.o…

Java BigInteger类| 带实例的splitAndRemainder()方法

BigInteger类divideAndRemainder()方法 (BigInteger Class divideAndRemainder() method) divideAndRemainder() method is available in java.math package. splitAndRemainder()方法在java.math包中可用。 divideAndRemainder() method returns BigInteger array of 2 elemen…

SpringMVC Mybatis Shiro RestTemplate的实现客户端无状态验证及访问控制【转】

2019独角兽企业重金招聘Python工程师标准>>> A.首先需要搭建SpringMVCShiro环境 a1.pom.xml配置 spring: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId><version>4.1.0.RELEAS…

sql服务器默认密码_搭建一个DNS服务器,轻松实现域名解析内容分发,访问速度提高N倍...

DNS服务器&#xff0c;Domain Name Server&#xff0c;域名解析服务器&#xff0c;互联网上相互通信使用的是IP&#xff0c;但是IP是又长又臭又难记&#xff0c;所以创造了域名来解决IP难写难记的问题&#xff0c;记一个g.cn比203.208.50.127强过不知多少倍了。有了域名&#x…

在C ++ STL中使用string :: to_string()将数字转换为字符串

to_string() is a library function of <string> header, it is used to convert numeric value (number) to string. to_string()是<string>标头的库函数&#xff0c;用于将数值(数字)转换为字符串。 Syntax: 句法&#xff1a; string to_string(numberic_value…

门级建模

学习目标 学习Verilog提供的门级原语 理解门的实例引用、门的符号以及and/or&#xff0c;buf/not类型的门的真值表 学习如何根据电路的罗技图来生成Verilog描述 讲述门级设计中的上升、下降和关断延迟 解释门级设计中的最小、最大和典型延迟 1.门的类型 1.1与门&#xff08;and…

linux .net 控制台应用程序,VisualStudioCode创建的asp.net core控制台程序部署到linux

1、asp.net core控制台程序static void Main(string[] args){int times10;while(times>0){Console.WriteLine("Hello World!");times--;Thread.Sleep(1000);}}2、发布发布前&#xff0c;修改test2.csproj文件(项目名称为test2)Exenetcoreapp2.1centos.7-x64主要添…

数组长度属性以及JavaScript中的示例

JavaScript长度属性 (JavaScript length property) length property is used to get and set the length of an array in JavaScript. length属性用于获取和设置JavaScript中数组的长度。 Syntax to get the length of an array: 获取数组长度的语法&#xff1a; array_name.…

怎么挖linux内核的漏洞,linux内核漏洞分析实战看看专家是怎么一步步...-卓优商学院问答...

推荐回答Linux内核调试方法kdb&#xff1a;只能在汇编代码级进行调试&#xff1b;优点是不需要两台机器进行调试。gdb&#xff1a;在调试模块时缺少一些至关重要的功能&#xff0c;它可用来查看内核的运行情况&#xff0c;包括反汇编内核函数。kgdb&#xff1a;能很方便的在源码…

COGS182 [USACO Jan07] 均衡队形[RMQ]

182. [USACO Jan07] 均衡队形 ★★ 输入文件&#xff1a;lineup.in 输出文件&#xff1a;lineup.out 简单对比时间限制&#xff1a;4 s 内存限制&#xff1a;128 MB 题目描述 农夫约翰的 N (1 ≤ N ≤ 50,000) 头奶牛&#xff0c;每天挤奶时总会按同样的顺序站好。一日…

string中concat_JavaScript中带示例的String concat()方法

string中concat字符串concat()方法 (String concat() Method) concat() is a string method in JavaScript, it is used to concatenate (join) two or more strings and returns a new joined string. concat()是JavaScript中的字符串方法&#xff0c;用于连接(联接)两个或多个…

linux全自动备份网站到百度云盘,Linux定时备份数据到百度云盘(示例代码)

导读&#xff1a;如今的百度云盘免费容量都是2T了&#xff0c;即使把电脑上所有的东东都放上去&#xff0c;也还有大把的剩余空间。对于站长来说&#xff0c;是完全可以充分利用这些硬盘空间的&#xff0c;现在我们就用百度云盘来备份Linux服务器上的数据。一直在想&#xff0c…

python dict底层实现_dict实现原理和哈希表

dict底层实现在Python中&#xff0c;字典是依靠散列表或说哈希表(Hash Table)进行实现的&#xff0c;使用开放地址法解决冲突。所以其查找的时间复杂度会是O(1)&#xff0c;下文会具体讲解哈希表的工作原理和解决冲突时的具体方法。也就是说&#xff0c;字典也是一个数组&#…