我們?cè)S多國(guó)內(nèi)用戶曾經(jīng)大量使用的數(shù)據(jù)庫(kù)管理系統(tǒng)是XBASE系列(如dBASE、FoxBASE和 F
oxPRO等)數(shù)據(jù)庫(kù)管理系統(tǒng)。也有許多銀行曾采用UNIFY數(shù)據(jù)庫(kù)。隨著數(shù)據(jù)庫(kù)技術(shù)的發(fā)展和U N
IX/XENIX的普及,許多用戶重新采用一些先進(jìn)的大型關(guān)系數(shù)據(jù)庫(kù)如(ORACLE、INFORMIX和SY
BASE)建立新的業(yè)務(wù)系統(tǒng),這樣就產(chǎn)生了一個(gè)數(shù)據(jù)移植的問題,如果重新用手工將數(shù)據(jù)錄入新系統(tǒng),顯然太浪費(fèi)人力。那么如何使用計(jì)算機(jī)自動(dòng)轉(zhuǎn)換數(shù)據(jù)呢?
任何兩種不同類型的數(shù)據(jù)庫(kù)都可以通過一種中介文件來進(jìn)行數(shù)據(jù)轉(zhuǎn)換,這個(gè)中介文件就是文本文件。任何一種數(shù)據(jù)庫(kù)都可以通過相應(yīng)命令,將數(shù)據(jù)庫(kù)中數(shù)據(jù)生成ASCII文本文件,也可以將文本文件中 數(shù)據(jù)轉(zhuǎn)入數(shù)據(jù)庫(kù)中。但在轉(zhuǎn)換過程中必須注意一些問題。下面分別舉例說明。
一、dos操作系統(tǒng)中數(shù)據(jù)向unix/xenix系統(tǒng)中傳送。
如果要將dos系統(tǒng)下的Foxplus數(shù)據(jù)庫(kù)中數(shù)據(jù),轉(zhuǎn)換到unix中的INFORMIX數(shù)據(jù)庫(kù)中。那么首先要將Foxplus數(shù)據(jù)庫(kù)中數(shù)據(jù)轉(zhuǎn)換成文本文件txt,然后將形成的文本文件拷入dos盤中。再將此dos盤中文件通過unix的shell命令doscp拷入unix系統(tǒng)中,再用load命令將此文本文件裝入INFORMIX的數(shù)據(jù)表中。在轉(zhuǎn)換過程中還必須注意數(shù)據(jù)類型的問題,Foxplus數(shù)據(jù)庫(kù)的日期型數(shù)據(jù)是yy/mm/dd形式(也可以設(shè)成其他形式),但拷入txt文本文件后就成了帶世紀(jì)的19yy
mmdd形式,而INFORMIX所需的形式為mmddyy式,故轉(zhuǎn)換時(shí)需重新組合。
二、漢字使用中西文兩字節(jié)的數(shù)據(jù)庫(kù)與使用引薦符三字節(jié)漢字的數(shù)據(jù)庫(kù)之間的數(shù)據(jù)轉(zhuǎn)換。
有許多銀行的應(yīng)用軟件原來是采用UNIFY數(shù)據(jù)庫(kù)開發(fā)的,如今一些單位又基于INFORMIX ,SY
BASE,COBOL等數(shù)據(jù)庫(kù)重新開發(fā)了系統(tǒng)。在移植數(shù)據(jù)時(shí)出現(xiàn)了漢字模式不一致的問題。比如
,我行原來使用的儲(chǔ)蓄系統(tǒng)是基于UNIFY數(shù)據(jù)庫(kù)開發(fā)的,后來要將其中大量數(shù)據(jù)移入總行開發(fā)的COBOL系統(tǒng)中,可是UNIFY數(shù)據(jù)庫(kù)中漢字使用引薦符三字節(jié),而COBOL系統(tǒng)中使用的漢字是中西文兩字節(jié),所以,從UNIFY中轉(zhuǎn)出的包含漢字的文本文件中的數(shù)據(jù),必須經(jīng)過漢字模式轉(zhuǎn)換才能移入COBOL系統(tǒng)中。為此,筆者用C語言做了一個(gè)轉(zhuǎn)換程序,將txt文件中的引薦符三字節(jié)漢字轉(zhuǎn)換成中西文兩字節(jié)的漢字。具體程序如下:
chang3-2.c
#include
main()
{
FILE *fp1,*fp2;
int c;
/*three.txt為包含引薦符三字節(jié)漢字的文本文件*/
if ((fp1=fopen("three.txt","r"))=NULL)
{
printf("three.txt文件打開失敗!\n");
exit(0);
}
/*two.txt為轉(zhuǎn)換出的漢字模式為中西文兩字節(jié)的文本文件*/
fp2=fopen("two.txt","w");
c=getc(fp1);
while(c!=EOF)
{
if(c=='\') /*引薦符為"\"*/
{
putc(getc(fp1)|0x80,fp2); /*將高位置"1"*/
c=getc(fp1);
putc(c|0x80,fp2);
}
else
putc(c,fp2);
c=getc(fp1);
}
fclose(fp1);
fclose(fp2);
return;
}
經(jīng)過以上程序轉(zhuǎn)換的文本文件中的數(shù)據(jù),就可以直接轉(zhuǎn)入COBOL系統(tǒng)數(shù)據(jù)庫(kù)或其他可使用中西文兩字節(jié)漢字的數(shù)據(jù)庫(kù)中了。
總之,用計(jì)算機(jī)自動(dòng)轉(zhuǎn)換數(shù)據(jù)會(huì)很快捷,也有很多辦法,但轉(zhuǎn)換時(shí)一定要注意兩種數(shù)據(jù)結(jié)構(gòu)數(shù)據(jù)類型的一致,否則就會(huì)產(chǎn)生錯(cuò)誤。