專利名稱:產(chǎn)生優(yōu)化的計算機數(shù)據(jù)字段轉(zhuǎn)換例程的制作方法
技術(shù)領(lǐng)域:
本發(fā)明針對計算機數(shù)據(jù)。更具體地,本發(fā)明針對一種類型的計算機數(shù)據(jù)字段向另一種類型的轉(zhuǎn)換。
背景技術(shù):
在許多情況下,在計算機進行信息處理過程中,計算機數(shù)據(jù)必須從一種數(shù)據(jù)字段類型轉(zhuǎn)換成另一種。例如,當(dāng)數(shù)據(jù)從一個程序被傳送到另一個程序時,數(shù)據(jù)通常在此過程中要經(jīng)歷幾次轉(zhuǎn)換,比如從文本數(shù)字轉(zhuǎn)換為一個二進制數(shù)。
用于轉(zhuǎn)換數(shù)據(jù)的典型技術(shù)包括使用一個類屬數(shù)據(jù)轉(zhuǎn)換例程。當(dāng)必須轉(zhuǎn)換數(shù)據(jù)的整個記錄時,轉(zhuǎn)換例程必須確定記錄中的每個數(shù)據(jù)字段的特性或?qū)傩允鞘裁?。這可能要求轉(zhuǎn)換例程為每個記錄的每個字段執(zhí)行相同的決策樹,盡管每個字段具有在逐行的基礎(chǔ)上不變化的已知特性。因此,許多計算機周期被浪費在就每個數(shù)據(jù)字段再三問比如“本字段類型是字符、整數(shù)、等等?”問題上。
基于上述內(nèi)容,需要有一種提供數(shù)據(jù)字段的有效轉(zhuǎn)換的系統(tǒng)。
發(fā)明內(nèi)容
本發(fā)明的一個實施例是一個用于把數(shù)據(jù)從輸入字段類型轉(zhuǎn)換為輸出字段類型的系統(tǒng)。該系統(tǒng)從一個應(yīng)用程序中接收多個輸入屬性和輸出屬性,動態(tài)地為每組輸入屬性和輸出屬性產(chǎn)生多個數(shù)據(jù)字段轉(zhuǎn)換例程,并把多個數(shù)據(jù)字段轉(zhuǎn)換例程存儲在應(yīng)用程序可以訪問的存儲器中。
附圖簡介
圖1是表示根據(jù)本發(fā)明的一個實施例的一個優(yōu)化的轉(zhuǎn)換發(fā)生器系統(tǒng)的功能性的總攬方框圖。
圖2是由根據(jù)本發(fā)明的一個實施例的系統(tǒng)執(zhí)行用來產(chǎn)生優(yōu)化的轉(zhuǎn)換例程的步驟的流程圖。
圖3是當(dāng)使用例程把輸入字段轉(zhuǎn)換為輸出字段時由應(yīng)用程序執(zhí)行的步驟的流程圖。
圖4是當(dāng)應(yīng)用程序調(diào)用時,由轉(zhuǎn)換發(fā)生器系統(tǒng)執(zhí)行的代碼產(chǎn)生步驟的流程圖。
圖5a和5b表示在本發(fā)明的一個實施例中使用的動態(tài)代碼構(gòu)建的一般例子。
圖6a-6h表示執(zhí)行CHARACTER到CHARACTER轉(zhuǎn)換的一個動態(tài)代碼產(chǎn)生例程的特例。
詳細(xì)說明本發(fā)明的一個實施例是為一個應(yīng)用程序所要求的每種轉(zhuǎn)換類型產(chǎn)生優(yōu)化的數(shù)據(jù)字段向數(shù)據(jù)字段的轉(zhuǎn)換例程的系統(tǒng)。圖1是表示根據(jù)本發(fā)明的一個實施例的一個優(yōu)化的轉(zhuǎn)換發(fā)生器系統(tǒng)20的功能性的總攬方框圖。系統(tǒng)20可以在軟件中實施,并可以在一個包括中央處理單元和存儲器的通用計算機上執(zhí)行。在一個實施例中,用IBM/360機器指令實施系統(tǒng)20。
一個應(yīng)用程序10需要執(zhí)行一種或者更多種字段轉(zhuǎn)換類型。對于每一種轉(zhuǎn)換類型,應(yīng)用程序10為系統(tǒng)20提供輸入(或者“源”)和輸出(或者“目的”)字段屬性。對于每組輸入和輸出字段屬性,系統(tǒng)20動態(tài)地產(chǎn)生一個執(zhí)行轉(zhuǎn)換的優(yōu)化的轉(zhuǎn)換例程30。優(yōu)化的例程30被置于應(yīng)用程序10可用的存儲器中。
一個實施例中的例程30被作為獨立例程產(chǎn)生,該獨立例程能夠被連續(xù)地再用,并在當(dāng)需要一個轉(zhuǎn)換時,由應(yīng)用程序10使用,例如,一個應(yīng)用程序接口(“API”),來調(diào)用。在另一個實施例中,例程30被作為代碼程序塊(code chunk)來產(chǎn)生,這些代碼程序塊被插入應(yīng)用程序10中與其內(nèi)聯(lián),當(dāng)需要一個轉(zhuǎn)換時可以被直接訪問。
本發(fā)明的一個優(yōu)點是通過構(gòu)建專門適合于輸入和輸出字段屬性的優(yōu)化的轉(zhuǎn)換例程,例程的每次執(zhí)行省卻許多通常需要的在每次執(zhí)行轉(zhuǎn)換時識別字段屬性的指令。
圖2是根據(jù)本發(fā)明的一個實施例由系統(tǒng)20執(zhí)行用來產(chǎn)生優(yōu)化的轉(zhuǎn)換例程30的步驟的流程圖。應(yīng)用程序10在步驟100確定了輸入字段和輸出字段具有什么屬性之后,由系統(tǒng)20執(zhí)行步驟。
在步驟102,系統(tǒng)20設(shè)置產(chǎn)生的轉(zhuǎn)換例程30的缺省過程選項。這些選項可能包括產(chǎn)生的轉(zhuǎn)換例程30是否是可調(diào)用函數(shù)(即,能由應(yīng)用程序10調(diào)用),或者是否可以內(nèi)聯(lián)復(fù)制到應(yīng)用程序10中。步驟102構(gòu)建一個模板接口塊104,其為應(yīng)用程序10和轉(zhuǎn)換發(fā)生器系統(tǒng)20之間的一個接口。步驟102還產(chǎn)生一個獲得需要的存儲空間和進行錯誤檢查的啟動調(diào)用106。
在步驟108,啟動一個循環(huán),直到窮舉了所有必須被轉(zhuǎn)換的字段,循環(huán)才結(jié)束。
在循環(huán)過程中,在步驟110,從應(yīng)用程序10接收每組輸入和輸出屬性。通過一個API來接收屬性,而且步驟110還基于這些屬性,構(gòu)建一個公用字段轉(zhuǎn)換接口塊116。
在步驟112,使用公用接口塊116,調(diào)用系統(tǒng)20的代碼發(fā)生器。步驟112產(chǎn)生代碼118。
在步驟114,保存一個指向產(chǎn)生的字段轉(zhuǎn)換例程30的函數(shù)指針。
圖3是當(dāng)使用例程30把輸入字段轉(zhuǎn)換為輸出字段時由應(yīng)用程序10執(zhí)行的步驟的流程圖。
在步驟122中,應(yīng)用程序正在進行處理。在步驟124,應(yīng)用程序獲得待轉(zhuǎn)換的源或者輸入數(shù)據(jù)。典型地,步驟124涉及讀取一個或者多個記錄。
在步驟126,為每個讀取的記錄啟動一個循環(huán)。在步驟128,在一個實施例中調(diào)用用于轉(zhuǎn)換的適當(dāng)轉(zhuǎn)換例程30。
當(dāng)所有數(shù)據(jù)字段和記錄被轉(zhuǎn)換時,在步驟132,要求代碼發(fā)生器系統(tǒng)20終止。其結(jié)果是在步驟134釋放了存儲空間。
在步驟136,應(yīng)用程序10繼續(xù)處理。最后,在步驟138,應(yīng)用程序10結(jié)束。
圖4是當(dāng)應(yīng)用程序10調(diào)用時,由轉(zhuǎn)換發(fā)生器系統(tǒng)20執(zhí)行以產(chǎn)生代碼的代碼產(chǎn)生步驟的流程圖。
在步驟200,系統(tǒng)20通過,例如,建立需要的存儲空間,檢查無效選項和指定應(yīng)如何產(chǎn)生代碼來進行初始化。
在步驟202,系統(tǒng)20驗證特定的字段轉(zhuǎn)換選項,例如檢驗輸入和輸出長度是正確的。步驟202還確定當(dāng)代碼產(chǎn)生時代碼有多大。如果產(chǎn)生的代碼將被內(nèi)聯(lián)存儲,應(yīng)用程序10可以使用上述信息。
在步驟204,系統(tǒng)20使用字段轉(zhuǎn)換接口塊116來構(gòu)建轉(zhuǎn)換例程。
在步驟206,在步驟200獲得的存儲空間被釋放。
步驟202和204經(jīng)歷同樣的內(nèi)部過程。因此,在步驟208,確定了輸入字段類型。輸入字段類型的例子包括字符輸入210或者專用時間格式輸入212。但是,本發(fā)明支持任何輸入字段類型。
類似地,在步驟214,確定輸出字段類型。輸出字段類型的例子也包括字符輸入213或者專用時間格式輸入215,但是本發(fā)明支持任何輸出字段類型。
在步驟216,如果執(zhí)行步驟202,確定產(chǎn)生的代碼的大小。在步驟218,如果執(zhí)行步驟204,產(chǎn)生字段轉(zhuǎn)換例程30。
如所公開的,根據(jù)本發(fā)明的一個實施例的系統(tǒng)20為每組輸入和輸出字段屬性動態(tài)地產(chǎn)生優(yōu)化的轉(zhuǎn)換例程30。接著,由應(yīng)用程序10利用例程30處理轉(zhuǎn)換。輸入和輸出字段被系統(tǒng)20歸類為原型數(shù)據(jù)類型,每種數(shù)據(jù)類型都有可定義的屬性和轉(zhuǎn)換行為。例如·字符數(shù)據(jù)類型將是一個具有最大長度屬性和CCSID(或字符設(shè)置代碼頁)屬性的定長字段。
·日期數(shù)據(jù)類型將是一個具有最大長度屬性和確定日期中使用的分隔符的位置和類型的格式屬性(ISO,EUR,等)的定長字段。
在優(yōu)化的轉(zhuǎn)換發(fā)生器系統(tǒng)20的一個實施例中包括的一些以前說明的或者附加的特征包括·可選地獲得和釋放用于API控制塊和/或產(chǎn)生的代碼的存儲空間。
·API控制塊可以由API管理函數(shù)來鏈接和模板化。
·可以通過使用一個宏接口來構(gòu)建API控制塊。
·轉(zhuǎn)換例程可以利用寄存器來直接尋址輸入和輸出字段的位置。寄存器可以由應(yīng)用程序10通過API參數(shù)來選擇。
·基于API參數(shù),在轉(zhuǎn)換之后源字段地址寄存器可以可選地被遞增到輸入字段的末尾。
·基于API參數(shù),在轉(zhuǎn)換之后目的字段地址寄存器可以可選地被遞增到格式化字段的末尾。
·基于API參數(shù),一個附加寄存器可以被遞增所轉(zhuǎn)換字段的長度。
·基于API參數(shù),可以產(chǎn)生用于轉(zhuǎn)換例程的標(biāo)準(zhǔn)連接。
·基于API參數(shù),可以指定轉(zhuǎn)換錯誤退出(Conversion Errorexits)來處理枚舉的轉(zhuǎn)換錯誤條件。
·基于API參數(shù),可以產(chǎn)生字符代碼集翻譯轉(zhuǎn)換代碼(即,ASCII字符字段可以被翻譯成EBCDIC字符字段)。
·可以產(chǎn)生轉(zhuǎn)換例程來利用由正在為之產(chǎn)生代碼的操作系統(tǒng)級支持的最新指令。
在一個實施例中,系統(tǒng)20基于API控制塊中的各種設(shè)置,通過在調(diào)用應(yīng)用程序10可以訪問的存儲空間中構(gòu)建代碼程序塊,動態(tài)地產(chǎn)生代碼。如結(jié)合流程圖中的討論,產(chǎn)生代碼涉及以下步驟1.為代碼獲得存儲空間。
2.識別所需要的代碼模板。
3.移動代碼模板。
4.修改代碼模板。
5.向調(diào)用應(yīng)用程序返回可執(zhí)行代碼。
進一步,在一個實施例中,基于API規(guī)范,系統(tǒng)20可以為動態(tài)產(chǎn)生的代碼可選地產(chǎn)生程序調(diào)試方法。該方法可以包括一個可選動態(tài)分配的輸出文件,對于每個字段轉(zhuǎn)換,其包括API選項和通用處理選項的報告,API選項被用于每個動態(tài)產(chǎn)生的例程,可以用該例程來確保字段屬性的正確性;和動態(tài)產(chǎn)生的例程的一個分解的列表,分解的列表由系統(tǒng)20內(nèi)的一個內(nèi)部分解器提供,列表可以被用來識別轉(zhuǎn)換代碼的不精確性和進一步優(yōu)化的區(qū)域,并有助于解決產(chǎn)生的代碼故障。
圖5a和5b表示在本發(fā)明的一個實施例中使用的動態(tài)代碼構(gòu)建的一般例子。
圖6a-6h表示執(zhí)行CHARACTER到CHARACTER轉(zhuǎn)換的一個動態(tài)代碼產(chǎn)生例程的特例。
在此專門解釋和/或說明了本發(fā)明的幾個實施例。但是,應(yīng)當(dāng)理解本發(fā)明的修改和變動為上述教導(dǎo)所函蓋,并且置于所附權(quán)利要求的權(quán)限之內(nèi),而不背離本發(fā)明的精神和旨在范圍。
權(quán)利要求
1.一種由一個應(yīng)用程序把多個輸入字段類型轉(zhuǎn)換為多個輸出字段類型的方法,所述方法包括(a)接收一個第一輸入字段類型的一個第一屬性和一個第一輸出字段類型的一個第二屬性;(b)基于所述第一屬性和所述第二屬性,產(chǎn)生一個第一優(yōu)化的轉(zhuǎn)換例程;和(c)執(zhí)行來自所述應(yīng)用程序的所述第一優(yōu)化的轉(zhuǎn)換例程以把所述第一輸入字段類型轉(zhuǎn)換為所述第一輸出字段類型。
2.根據(jù)權(quán)利要求1的方法,其中步驟(c)包括調(diào)用來自所述應(yīng)用程序的所述第一優(yōu)化的轉(zhuǎn)換例程。
3.根據(jù)權(quán)利要求1的方法,其中步驟(c)包括同所述應(yīng)用程序內(nèi)聯(lián)地存儲所述第一優(yōu)化的轉(zhuǎn)換程序。
4.根據(jù)權(quán)利要求1的方法,其中在所述應(yīng)用程序正在執(zhí)行時動態(tài)地執(zhí)行步驟(b)。
5.根據(jù)權(quán)利要求1的方法,進一步包括(d)接收一個第二輸入字段類型的一個第三屬性和一個第二輸出字段類型的一個第四屬性;(e)基于所述第三屬性和所述第四屬性,產(chǎn)生一個第二優(yōu)化的轉(zhuǎn)換例程;和(f)執(zhí)行來自所述應(yīng)用程序的所述第二優(yōu)化的轉(zhuǎn)換例程來把所述第二輸入字段類型轉(zhuǎn)換為所述第二輸出字段類型。
6.根據(jù)權(quán)利要求1的方法,其中所述第一和第二屬性是字符類型。
7.根據(jù)權(quán)利要求1的方法,進一步包括為所述第一優(yōu)化的轉(zhuǎn)換例程產(chǎn)生程序調(diào)試方法。
8.一種把數(shù)據(jù)從輸入字段類型轉(zhuǎn)換成輸出字段類型的方法,所述方法包括(a)接收來自一個應(yīng)用程序的多個輸入屬性和輸出屬性;(b)為每組輸入屬性和輸出屬性動態(tài)地產(chǎn)生多個數(shù)據(jù)字段轉(zhuǎn)換例程。(c)把所述多個數(shù)據(jù)字段轉(zhuǎn)換例程存儲在所述應(yīng)用程序可以訪問的存儲器中。
9.根據(jù)權(quán)利要求8的方法,其中,所述數(shù)據(jù)字段轉(zhuǎn)換例程可以由所述應(yīng)用程序調(diào)用。
10.根據(jù)權(quán)利要求8的方法,其中所述數(shù)據(jù)字段轉(zhuǎn)換例程與所述應(yīng)用程序內(nèi)聯(lián)地存儲。
11.根據(jù)權(quán)利要求8的方法,其中在所述應(yīng)用程序正在執(zhí)行時,動態(tài)地執(zhí)行步驟(b)。
12.根據(jù)權(quán)利要求8的方法,其中所述輸入和輸出屬性是字符類型。
13.根據(jù)權(quán)利要求8的方法,其中所述輸入和輸出屬性是日期類型。
14.根據(jù)權(quán)利要求8的方法,進一步包括為所述多個數(shù)據(jù)字段轉(zhuǎn)換例程產(chǎn)生程序調(diào)試方法。
15.一種用于動態(tài)地產(chǎn)生計算機數(shù)據(jù)字段轉(zhuǎn)換例程的系統(tǒng),所述系統(tǒng)包括一處理器;和一耦合到所述處理器的存儲器設(shè)備;其中所述系統(tǒng)適于接收來自一個應(yīng)用程序的多個輸入屬性和輸出屬性;和其中所述存儲器設(shè)備存儲指令,當(dāng)由所述處理器執(zhí)行這些指令時,引起所述處理器執(zhí)行以下操作為每組輸入屬性和輸出屬性動態(tài)地產(chǎn)生多個數(shù)據(jù)字段轉(zhuǎn)換例程;和在可以被所述應(yīng)用程序訪問的一個第二存儲器設(shè)備中存儲所述多個數(shù)據(jù)字段轉(zhuǎn)換例程。
16.根據(jù)權(quán)利要求15的系統(tǒng),其中所述數(shù)據(jù)字段轉(zhuǎn)換例程可以由所述應(yīng)用程序調(diào)用。
17.根據(jù)權(quán)利要求15的系統(tǒng),其中所述數(shù)據(jù)字段轉(zhuǎn)換例程與所述應(yīng)用程序內(nèi)聯(lián)地存儲。
18.根據(jù)權(quán)利要求15的系統(tǒng),其中在所述應(yīng)用程序正在執(zhí)行時產(chǎn)生所述多個數(shù)據(jù)字段轉(zhuǎn)換例程。
19.根據(jù)權(quán)利要求15的系統(tǒng),其中所述輸入屬性是字符類型,所述輸出屬性是日期類型。
20.根據(jù)權(quán)利要求15的系統(tǒng),其中所述處理器為所述多個數(shù)據(jù)字段轉(zhuǎn)換例程進一步產(chǎn)生程序調(diào)試方法。
全文摘要
一個系統(tǒng)(20)把數(shù)據(jù)從輸入字段類型轉(zhuǎn)換為輸出字段類型。系統(tǒng)(20)接收來自一個應(yīng)用程序(10)的多個輸入屬性和輸出屬性,為每組輸入屬性和輸出屬性動態(tài)地產(chǎn)生多個數(shù)據(jù)字段轉(zhuǎn)換例程(30),并把多個數(shù)據(jù)字段轉(zhuǎn)換例程(30)存儲在可以被應(yīng)用程序(10)訪問的存儲器中。
文檔編號G06F17/24GK1359486SQ00805202
公開日2002年7月17日 申請日期2000年3月17日 優(yōu)先權(quán)日1999年3月19日
發(fā)明者凱文M·平塔, 唐納德L·博倫 申請人:聯(lián)合想象計算機公司