文本導(dǎo)出的方方面面—工資好助手

TXT文本文件是我們常用的在應(yīng)用之間傳遞數(shù)據(jù)的途徑之一,因?yàn)樗哂型ㄓ?、靈活、易維護(hù)等諸多優(yōu)點(diǎn)。不過并不是所有應(yīng)用都提供了生成txt文件的功能,往往需要額外的程序設(shè)計(jì)和開發(fā)工作才能獲得。這時(shí)如果能夠有一個(gè)通用的工具軟件,靈活地根據(jù)需要生成目標(biāo)格式的文本,將能夠極大地助力我們的業(yè)務(wù)工作。本文介紹的集算器就正是這樣一款高效、靈活的通用工具軟件,能夠從不同數(shù)據(jù)源讀取、計(jì)算并導(dǎo)出txt文件。

成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為山東等服務(wù)建站,山東等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為山東企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

本文將著重介紹集算器的數(shù)據(jù)導(dǎo)出能力,而集算器本身強(qiáng)大的計(jì)算能力不是本文重點(diǎn),因此文中沒有刻意介紹數(shù)據(jù)源訪問和計(jì)算過程。文中用到的函數(shù)請(qǐng)參看集算器在線文檔《函數(shù)參考》。

1.        簡(jiǎn)單導(dǎo)出數(shù)據(jù)

我們首先從簡(jiǎn)單的數(shù)據(jù)導(dǎo)出開始介紹:

1.1   導(dǎo)出新文件

下面這個(gè)例子中,通過兩行簡(jiǎn)單讀入和輸出,完成了從數(shù)據(jù)源到TXT文件的導(dǎo)出。

A1單元格讀入excel文件中的5年1班學(xué)生成績(jī),用來模擬可能通過計(jì)算得到的數(shù)據(jù)。

A2中的表達(dá)式將A1的數(shù)據(jù)導(dǎo)出到一個(gè)新的 “學(xué)生成績(jī)表.txt”文件中。例子中使用了導(dǎo)出函數(shù)export。不過在這個(gè)最簡(jiǎn)單的例子中,我們沒有指定額外的參數(shù)。由于沒有指定x和F,因此將導(dǎo)出A1中的所有字段,同時(shí)保持字段名不變。由于沒有指定列分隔符參數(shù)s,所以會(huì)用默認(rèn)的tab分隔。不過函數(shù)使用了選項(xiàng)@t,因此會(huì)將字段名(excel文件的標(biāo)題行)導(dǎo)出到第一行。


A

1

=file("51.xlsx").xlsimport@t()

2

=file( "學(xué)生成績(jī)表.txt"   ).export@t(A1)

下圖中就是導(dǎo)出的txt文件:

文本導(dǎo)出的方方面面—工資好助手

 

 

 

 

1.2   追加數(shù)據(jù)

假如“學(xué)生成績(jī)表.txt”文件已經(jīng)存在,我們需要在文件中再增加另一個(gè)班的成績(jī),那么應(yīng)該怎么做呢?

與上例類似,在A1中讀入要追加的5年2班的學(xué)生成績(jī),數(shù)據(jù)結(jié)構(gòu)保持相同

A2中把數(shù)據(jù)導(dǎo)出到已有的“學(xué)生成績(jī)表.txt”文件中,不過這時(shí)因?yàn)槲募幸延袠?biāo)題,只需導(dǎo)出數(shù)據(jù),因此不要加函數(shù)選項(xiàng)@t。同時(shí),通過選項(xiàng)@a指明追加數(shù)據(jù)。


A

1

=file("52.xlsx").xlsimport@t()

2

=file( "學(xué)生成績(jī)表.txt"   ).export@a(A1)

 

1.3   導(dǎo)出 csv

csv文件也是常見的純文本文件,其中存儲(chǔ)的表格數(shù)據(jù)以逗號(hào)分隔。如果要導(dǎo)出csv文件,有兩種方式:

l   在導(dǎo)出時(shí)象下圖那樣加選項(xiàng)@c,或者

l   增加分隔參數(shù),寫成export@t(A1;",")

兩種方式結(jié)果都是一樣的。


A

1

=file("51.xlsx").xlsimport@t()

2

=file( "學(xué)生成績(jī)表.txt"   ).export@tc(A1)

導(dǎo)出結(jié)果如下:

學(xué)號(hào),姓名,班級(jí),性別,語(yǔ)文,數(shù)學(xué),英語(yǔ)

110210,徐趙亞,5(1),男,80,60,86

110211,王莼禮,5(1),男,81,72,67

110212,沈花容,5(1),女,97,91,87

110213,李曉梅,5(1),女,86,69,73

 

2.        復(fù)雜導(dǎo)出數(shù)據(jù)

現(xiàn)在,我們看一下略為復(fù)雜的導(dǎo)出操作:

在上面的例子中我們引入一些新的需求:

l   在結(jié)果文件中增加一個(gè)序號(hào)列

l   在最后增加一個(gè)平均成績(jī)列,并對(duì)平均成績(jī)進(jìn)行格式化保留一位小數(shù)

l   不導(dǎo)出學(xué)號(hào)

l   列間分隔符采用“\t| ”。


A

1

=file("51.xlsx").xlsimport@t()

2

=file( "學(xué)生成績(jī)表.txt"  ).export@t(A1,#: 序號(hào), 姓名, 班級(jí), 性別, 語(yǔ)文, 數(shù)學(xué), 英語(yǔ),string(( 語(yǔ)文 + 數(shù)學(xué) + 英語(yǔ))/3,"#.0"): 平均;"\t| ")

導(dǎo)出結(jié)果如下圖所示:

文本導(dǎo)出的方方面面—工資好助手

還是兩行搞定!A1不用再說了,我們來看看A2的變化:#號(hào)在序表中表示記錄編號(hào),將它導(dǎo)出為結(jié)果中的序號(hào)列;指明導(dǎo)出姓名、班級(jí)、性別、語(yǔ)文、數(shù)學(xué)、英語(yǔ)列;表達(dá)式“string((語(yǔ)文 + 數(shù)學(xué) + 英語(yǔ) )/3,"#.0"): 平均”中,求出語(yǔ)文、數(shù)學(xué)、英語(yǔ)的平均數(shù)并格式化成只保留一位小數(shù),命名導(dǎo)出的新列名為“平均”;最后一個(gè)參數(shù)指定列間分隔符為“\t| ”。

 

3.        導(dǎo)出大量數(shù)據(jù)

數(shù)據(jù)導(dǎo)出時(shí)還常常要面臨另一個(gè)重要問題:如果數(shù)據(jù)量很大時(shí)又該怎么辦?

為此,可以利用集算器提供的游標(biāo)功能來處理大數(shù)據(jù)量的情況,游標(biāo)在讀取數(shù)據(jù)時(shí)從前向后遍歷一次,逐條從數(shù)據(jù)源讀取數(shù)據(jù),而不是一次將所有數(shù)據(jù)讀入內(nèi)存,因此不會(huì)受到內(nèi)存不足的限制。而且,集算器游標(biāo)不僅可以應(yīng)用于數(shù)據(jù)庫(kù),還可以應(yīng)用于數(shù)據(jù)文件或者內(nèi)存排列。

腳本如下圖所示:


A

1

=connect("demo")

2

=A1.cursor("select * from 訂單表")

3

>n=0

4

=file("big.txt").export@t(A2,n=n+1:序號(hào), 訂單 ID, 公司名稱, 貨主地區(qū), 訂購(gòu)日期,string(訂單金額,"#.00"): 訂單金額 )

導(dǎo)出結(jié)果如下:

文本導(dǎo)出的方方面面—工資好助手

A1連接demo數(shù)據(jù)庫(kù)

A2打開訂單表作為游標(biāo)

A3定義序號(hào)變量n,賦初值為0

A4是具體的導(dǎo)出過程,將游標(biāo)所指的大數(shù)據(jù)導(dǎo)出到big.txt文件中。

 

對(duì)于大數(shù)據(jù)量的情況我們把游標(biāo)作為導(dǎo)出數(shù)據(jù)源,而在前面的普通導(dǎo)出情況下則是把序表作為導(dǎo)出數(shù)據(jù)源。除了游標(biāo)中不能以#代表記錄號(hào)自動(dòng)產(chǎn)生序號(hào)以外,兩者用法完全相同。

為了產(chǎn)生序號(hào),導(dǎo)出時(shí)利用A3中定義的變量n,在每導(dǎo)出一條數(shù)據(jù)時(shí)加1后導(dǎo)出為序號(hào)列即可。

4.        工資助手

最后,我們來看一個(gè)真正實(shí)戰(zhàn)的例子:

當(dāng)今企業(yè)給員工發(fā)工資一般都通過銀行代發(fā)的方式。銀行都提供了網(wǎng)上服務(wù),企業(yè)可以通過這個(gè)途徑來完成自助工資發(fā)放,具體的做法是:

銀行提供了一個(gè)代發(fā)工資的文本文件格式,企業(yè)用戶只要按格式編寫此文件,再通過網(wǎng)上銀行上載此文件,就可以完成工資發(fā)放。

下面我們就來看看如何利用集算器方便地完成代發(fā)工資文本文件的生成。

我們以民生銀行為例,其文件格式如下:

ATNU:0019999

MICN:

CUNM:北京 XXXX 技術(shù)有限公司

MIAC:0110014180030254

EYMD:1

TOAM:80576.39

COUT:5

---------------------------------------

6226220101871111|19944.65|趙愛潤(rùn) ||

6226220101872222|18349.08|孫學(xué)乾 ||

6226220101873333|15955.72|王老集 ||

6226220101874444|14360.15|張小算 ||

6226220101875555|11966.79|李大器 ||

 

此文件前 8 行是文件頭,第 1、2、5、8 行內(nèi)容固定不變,第 3 行是企業(yè)名稱,第 4 行是企業(yè)在民生銀行的賬號(hào),第 6 行是本次發(fā)工資的總金額,第 7 行是發(fā)工資的總筆數(shù)。從第 9 行開始是具體的工資信息,第一項(xiàng)是員工工資賬號(hào),第二項(xiàng)是工資金額,第三項(xiàng)是員工姓名,第四、五項(xiàng)空著不填就行。各項(xiàng)之間用豎線分隔。

此文本文件的格式要求非常嚴(yán)格,不能出錯(cuò),因此不適合財(cái)務(wù)人員直接編輯,需要通過程序生成。

企業(yè)與工資相關(guān)的有兩個(gè) excel 表,一個(gè)是員工表,另一個(gè)是工資表,如下兩圖所示。

文本導(dǎo)出的方方面面—工資好助手

文本導(dǎo)出的方方面面—工資好助手

 

賬務(wù)人員負(fù)責(zé)填好員工工資表后,就可以打開集算器 ide,運(yùn)行預(yù)先編寫好的 dfx 程序了:


A

B

1

=file("員工表.xlsx").xlsimport@t()

=file("工資表.xlsx").xlsimport@t()

2

=A1.join(姓名,B1: 姓名, 銀行實(shí)發(fā), 備注 )

3

=file("發(fā)工資.txt")


4

=A3.write("ATNU:0019999")

=A3.write@a("MICN:")

5

=A3.write@a("CUNM:北京 XXXX 技術(shù)有限公司 ")

=A3.write@a("MIAC:0110014180030254")

6

=A3.write@a("EYMD:1")

=A3.write@a("TOAM:"+string(A2.sum(銀行實(shí)發(fā) ),"#.00"))

7

=A3.write@a("COUT:"+string(A2.count()))

=A3.write@a("---------------------------------------")

8

=A3.export@a(A2,工資卡號(hào),string(銀行實(shí)發(fā),"#.00"), 姓名, 備注, 備注;"|")

A1中讀入編寫的員工表

B1中讀入編寫的工資表

A2中按姓名將兩張表合并成一張表

A3打開要保存的代發(fā)工資文件

從 A4 到 B7 中逐行寫入文件頭:其中:B6 是工資總額,從 A2 中算出銀行實(shí)發(fā)總額填入;A7 是本次代發(fā)的總筆數(shù)。

在 A8 中導(dǎo)出生成代發(fā)工資文件,分別是工資卡號(hào)、工資金額、姓名、空列、空列 (最后兩列是不需要填的,所以用備注列代表)。

腳本中除了 A4 格是用替換寫入以外,其它格都用了 @a 選項(xiàng),表示是追加寫入。

 

至于其它銀行,過程大致與此類似。只要根據(jù)銀行對(duì)文本文件格式的說明,編寫好集算器 dfx 程序就可以了。

 

    簡(jiǎn)單總結(jié)一下,在數(shù)據(jù)導(dǎo)出過程中,集算器提供了 write()和 export() 兩個(gè)函數(shù),前者是逐行寫入,后者是批量寫入。函數(shù)提供了參數(shù)和函數(shù)選項(xiàng)兩種控制方法,使用不同的參數(shù)或函數(shù)選項(xiàng),我們可以指定是否導(dǎo)出字段名 / 標(biāo)題、是否導(dǎo)出所有字段、是否使用新的字段名、追加還是替換文件、使用哪個(gè)字符做分隔參數(shù)等等選擇。

    在見證了數(shù)據(jù)導(dǎo)出過程中集算器強(qiáng)大而靈活的能力后,是不是也有了莫名的沖動(dòng)呢?趕快下載集算器,加入共同探索、一起變強(qiáng)的行列吧!


分享標(biāo)題:文本導(dǎo)出的方方面面—工資好助手
本文網(wǎng)址:http://muchs.cn/article46/jcjphg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站App設(shè)計(jì)、網(wǎng)站設(shè)計(jì)、商城網(wǎng)站、小程序開發(fā)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)