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.pswp.cn/news/542453.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/542453.shtml
英文地址,請注明出處:http://en.pswp.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;字典也是一個數組&#…