中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

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

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

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

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

1.1   導(dǎo)出新文件

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

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

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


A

1

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

2

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

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

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

 

 

 

 

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

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

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

A2中把數(shù)據(jù)導(dǎo)出到已有的“學(xué)生成績表.txt”文件中,不過這時因為文件中已有標(biāo)題,只需導(dǎo)出數(shù)據(jù),因此不要加函數(shù)選項@t。同時,通過選項@a指明追加數(shù)據(jù)。


A

1

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

2

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

 

1.3   導(dǎo)出 csv

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

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

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

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


A

1

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

2

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

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

學(xué)號,姓名,班級,性別,語文,數(shù)學(xué),英語

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é)果文件中增加一個序號列

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

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

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


A

1

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

2

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

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

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

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

 

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

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

為此,可以利用集算器提供的游標(biāo)功能來處理大數(shù)據(jù)量的情況,游標(biāo)在讀取數(shù)據(jù)時從前向后遍歷一次,逐條從數(shù)據(jù)源讀取數(shù)據(jù),而不是一次將所有數(shù)據(jù)讀入內(nèi)存,因此不會受到內(nèi)存不足的限制。而且,集算器游標(biāo)不僅可以應(yīng)用于數(shù)據(jù)庫,還可以應(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:序號, 訂單 ID, 公司名稱, 貨主地區(qū), 訂購日期,string(訂單金額,"#.00"): 訂單金額 )

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

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

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

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

A3定義序號變量n,賦初值為0

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

 

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

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

4.        工資助手

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

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

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

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

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

ATNU:0019999

MICN:

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

MIAC:0110014180030254

EYMD:1

TOAM:80576.39

COUT:5

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

6226220101871111|19944.65|趙愛潤 ||

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

6226220101873333|15955.72|王老集 ||

6226220101874444|14360.15|張小算 ||

6226220101875555|11966.79|李大器 ||

 

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

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

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

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

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

 

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


A

B

1

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

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

2

=A1.join(姓名,B1: 姓名, 銀行實發(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(銀行實發(fā) ),"#.00"))

7

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

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

8

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

A1中讀入編寫的員工表

B1中讀入編寫的工資表

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

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

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

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

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

 

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

 

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

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


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

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

廣告

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

成都定制網(wǎng)站網(wǎng)頁設(shè)計
轮台县| 宁晋县| 新疆| 邵武市| 珠海市| 枝江市| 新干县| 滦南县| 明星| 东乡县| 临海市| 西充县| 木兰县| 格尔木市| 元江| 莱阳市| 灌云县| 安庆市| 锡林郭勒盟| 娄烦县| 南昌市| 睢宁县| 临澧县| 镇康县| 玛沁县| 罗江县| 陵川县| 贵溪市| 新和县| 新乡县| 阜平县| 公安县| 方城县| 茌平县| 土默特右旗| 岑溪市| 崇明县| 子洲县| 呼和浩特市| 肥乡县| 太仓市|