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,一经查实,立即删除!

相关文章

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

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

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

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

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…

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主要添…

linux系统怎样写单片机程序,单片机知识是Linux驱动开发的基础之一以及如何学单片机...

这是arm裸机1期加强版第1课第2、3节课程的wiki文字版。为什么没前途也要学习单片机&#xff1f;因为它是个很好的入口。学习单片机可以让我们抛开复杂的软件结构&#xff0c;先掌握硬件操作&#xff0c;如&#xff1a;看原理图、芯片手册、写程序操作寄存器等。在上一节视频里&…

bat 批处理 常用命令和乱码问题

为什么80%的码农都做不了架构师&#xff1f;>>> rem echo off ECHO OFF XCOPY E:\test.bat D:\ IF ERRORLEVEL 1 ECHO 文件拷贝Failure IF ERRORLEVEL 0 ECHO 文件拷贝Success :start set /p first"1记事本,2远程:" if %first% LEQ 2 (IF %first% …

SuperMap iServer发布的ArcGIS REST 地图服务如何通过ArcGIS API加载

作者&#xff1a;yx 文章目录 一、发布服务二、代码加载三、结果展示 一、发布服务 SuperMap iServer支持将地图发布为ArcGIS REST地图服务&#xff0c;您可以在发布服务时直接勾选ArcGIS REST地图服务&#xff0c;如下图所示&#xff1a; 也可以在已发布的地图服务中&#x…

new file会创建文件吗_Rust 文件系统处理之文件读写 Rust 实践指南

Rust 中&#xff0c;文件读写处理简单而高效。代码也很紧凑&#xff0c;容易阅读。我们从读取文件的字符串行、避免读取写入同一文件、使用内存映射随机访问文件这三个文件处理中的典型案例来了解一下。文件处理场景大家都很熟悉&#xff0c;因此闲言少叙&#xff0c;直接看代码…

【Maven学习笔记(二)】Maven的安装与配置

为什么80%的码农都做不了架构师&#xff1f;>>> 1、默认本地仓库路径 C:\Users\97449\.m2\repository 2、修改本地仓库路径 打开D:\apache-maven\conf\settings.xml <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apa…

npm 全局安装vuecli报错_cnn explainer本地使用--被npm坑惨

最近在知乎上面看到&#xff0c;看到一个cnn解释器&#xff0c;把每个步揍都很清楚的展示了出来&#xff0c;我想自己搞来玩玩。第一次使用npm&#xff0c;很多地方不会&#xff0c;第一步&#xff1a;先在网页上下载下来cnn_explainer&#xff0c;然后解压在没有中文路径的文件…

Python程序从给定的N个数字中找到最大倍数

Here, we will be framing code for finding the maximum multiple of a number x from a given set of a number (set of 5 numbers in this program). 在这里&#xff0c;我们将使用成帧代码&#xff0c; 从给定的一组数字(此程序中的5个数字组成的集合)中找到x的最大倍数 。…

openmpi安装_Intel Parallel Studio XE 2019安装设置

1.Intel Parallel Studio XE 2019简介Intel Parallel Studio XE 是Intel在单独一款软件开发套件中整合了英特尔公司业界领先的 C/C 和 Fortran 编译器、性能和MPI并行库、错误检查、代码健壮和性能分析的工具&#xff0c;有助于大幅提升应用程序性能&#xff0c;同时提高代码质…

[Android] 开源View组件(一)

Material Design系列&#xff0c;自定义Behavior实现Android知乎首页 仿今日头条最强顶部导航指示器&#xff0c;支持6种模式 MagicIndicator系列之一 —— 使用MagicIndicator打造千变万化的ViewPager指示器 Android 优雅的为RecyclerView添加HeaderView和FooterView Android …

sql server修改字段编码格式_关于MySQL如何修改character_set_client的编码问题

问题引入&#xff1a;我们经常会遇到一些向MySQL数据库中插入中文&#xff0c;但是select出来的时候&#xff0c;却发现是乱码的情况。如我们向表a出入这样一段记录&#xff1a;iinsert into a values(‘你好helloworld你好’,’helloworld’);可能当你访问它的时候&#xff0c…

通用apdu指令_8086微处理器中的通用指令格式

通用apdu指令Introduction: 介绍&#xff1a; In this article, we are going to discuss about the 6 general formats of instructions. 在本文中&#xff0c;我们将讨论6种通用指令格式。 One byte instruction: 一字节指令 &#xff1a; This is only one byte long an…

Win10系统怎样让打开图片方式为照片查看器

打开注册表编辑器之后&#xff0c;我们双击左侧的目录&#xff0c;依次打开HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft目录&#xff0c;如下图所示。 在Microsoft目录下&#xff0c;我们需要找到Windows Photo Viewer\Capabilities\FileAssociations目录项&#xff0c;直到看到该子…

c语言插入排序算法_插入排序算法,流程图和C,C ++代码

c语言插入排序算法In the last article, we discussed about the bubble sort with algorithm, flowchart and code. In this article, we are going to discuss about another basic sorting technique i.e. insertion sort. 在上一篇文章中&#xff0c;我们讨论了用算法&…

EF使用CodeFirst方式生成数据库技巧经验

前言 EF已经发布很久了&#xff0c;也有越来越多的人在使用EF。如果你已经能够非常熟练的使用EF的功能&#xff0c;那么就不需要看了。本文意在将自己使用EF的方式记录下来备忘&#xff0c;也是为了给刚刚入门的同学一些指导。看完此文&#xff0c;你应该就学会以CodeFirst的方…

对象过滤某个属性 循环 php_37道PHP面试题(附答案)

1、什么事面向对象&#xff1f;主要特征是什么&#xff1f;面向对象是程序的一种设计方式&#xff0c;它利于提高程序的重用性&#xff0c;使程序结构更加清晰。主要特征&#xff1a;封装、继承、多态。2、SESSION 与 COOKIE的区别是什么&#xff0c;请从协议&#xff0c;产生的…