哦 帮你顶
我都不知道marc是什么?
我都不知道marc是什么?
解决方案 »
- 我是菜鸟 问个关于接口弱智的问题
- Class.forName("")方法的用处
- 求一个给定数组中,和为某一定值的子数组
- java rmi ssl安全问题
- JNI调用的C++异常怎么办
- http://www.andykhan.com/jexcelapi/无法上,谁能发一个最新的jxl.jar给我,我的email是:[email protected],谢谢
- abstract同interface在用发上有什么不同?
- 怎样在java里四舍五入?
- 我是一个 JAVA 的初学者,不知那里有 JAVA 的编译文件下载
- 快被oracle玩死了,谁能告诉我为啥插入条数不同结果差别这么大!?
- 初学者问题,求助
- 求助?
看来要学的真是多阿
marc是一种国际通用的书目的存储格式
我也是刚接触啊,做个图书管理的系统
郁闷啊。。
有人知道自动标引吗,那也可以
此外,对中文还有特殊的约定
中国国家标准和国际标准还有不同的地方
总的来说
用JAVA来做很累,建议C
后边的字段我都实现了就是在前边的记录头标区和记录标识号这部分,都是数字串,我不知道是怎么算出来的。。资料上说是什么系统自动生成,可我自己做系统啊,怎么自动啊。
djkhym(hym),你做过vb的吗,帮帮忙,找一下实现的原理吧。我分析了好久现成的marc数据,也没明白他的记录头标区怎么产生的。谢谢各位大哥的回答了。
Public Sub DBToMarc(Filename As String, Rs As Recordset, GDM As String, CRLF As Boolean)
Dim i As Long
Dim tmpstr As String
Dim F1 As Long
Dim RecCtl As String '形如nam0
Dim n As Integer
Dim C_1D As String * 1
Dim CrLf_char As String * 2Dim comdata As CommonData
Dim Head As Control_head
Dim DIR_Block(11, 3) As String '1为标识,2列为宽度,3列位置
Dim CTl_Block(11) As String '定义11个目次区
Dim Total_len As Long
Dim Cur_len As Long
Dim Last_Pos As Long
Dim Stop_char As String * 1
Dim Begin_char As String * 1
C_1D = Chr(29)
CrLf_char = Chr(13) & Chr(10)
Begin_char = Chr(31)
Stop_char = Chr(30)
F1 = FreeFile
If Len(Dir(Filename)) > 0 Then
i = MsgBox("文件已经存在,要删除吗?", vbOKCancel + vbInformation, "通知")
If i = 1 Then
Kill Filename
Else
MsgBox "由于你不想删除文件,本次转换失败!", vbInformation, "通知"
Exit Sub
End If
End If
Open Filename For Binary Access Write As F1
'依次扫描记录集,对于记录集中每个成份进行编码
For i = 1 To 11
Select Case i
Case 1
DIR_Block(i, 1) = "001"
Case 2
DIR_Block(i, 1) = "010"
Case 3
DIR_Block(i, 1) = "100"
Case 4
DIR_Block(i, 1) = "101"
Case 5
DIR_Block(i, 1) = "200"
Case 6
DIR_Block(i, 1) = "210"
Case 7
DIR_Block(i, 1) = "215"
Case 8
DIR_Block(i, 1) = "690"
Case 9
DIR_Block(i, 1) = "801"
Case 10
DIR_Block(i, 1) = "905"
Case 11
DIR_Block(i, 1) = "970"
End Select
Next i
Do While Not Rs.EOF
For i = 1 To 11
Select Case i
Case 2, 3, 6, 7, 8, 10, 11
CTl_Block(i) = " "
Case 4
CTl_Block(i) = "0 "
Case 5
CTl_Block(i) = "1 "
Case 9
CTl_Block(i) = " 1"
End Select
Next i
CTl_Block(1) = ""
Call Init(comdata, Head) For i = 0 To Rs.Fields.Count - 1
Select Case UCase(Trim(Rs.Fields(i).Name))
'相应的字段写入相应的区域
Case "JLKZB", "记录控制号"
If Not IsNull(Rs(i)) Then
CTl_Block(1) = Format(Trim(Rs(i)), "0000000000")
End If
Case "ISBN", "ISBN号"
If Not IsNull(Rs(i)) Then CTl_Block(2) = CTl_Block(2) + Chr(31) & "a" & Trim(Rs(i))
Case "ZZ", "装帧"
If Not IsNull(Rs(i)) Then CTl_Block(2) = CTl_Block(2) + Chr(31) & "b" & Trim(Rs(i))
Case "DJ", "单价", "定价", "价格"
If Not IsNull(Rs(i)) Then CTl_Block(2) = CTl_Block(2) + Chr(31) & "d" & Trim(Rs(i))
Case "cbrq", "出版日期"
If Not IsNull(Rs(i)) Then
If IsDate(Rs(i)) Then
comdata.Create_time = Format(Trim(Rs(i)), "yyyymmdd")
Else
comdata.Create_time = Mid(Trim(Rs(i)) + Space(8), 1, 8)
End If
End If
Case "NF", "YEAR", "年份"
If Not IsNull(Rs(i)) Then
comdata.create_year1 = Format(Rs(i), "0000")
End If
Case "YZ", "CBZYZ", "语种"
If Not IsNull(Rs(i)) Then
CTl_Block(4) = CTl_Block(4) & Chr(31) & "a" & Trim(Rs(i))
End If
Case "ZTM", "主题名", "正题名"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "a" & Trim(Rs(i))
End If
Case "ZRZ01", "ZRZ", "责任者", "第一责任者"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "f" & Trim(Rs(i))
End If
Case "BTM", "BNTM", "并列题名"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "d" & Trim(Rs(i))
End If
Case "ZRZ02", "QTZRZ", "其他责任者", "第二责任者", "其它责任者"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "g" & Trim(Rs(i))
End If
Case "FCH", "分册号", "分册辑号", "分辑号"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "h" & Trim(Rs(i))
End If
Case "JCH", "卷册号"
If Not IsNull(Rs(i)) Then
CTl_Block(5) = CTl_Block(5) & Chr(31) & "v" & Trim(Rs(i))
End If
Case "CBD", "出版地", "出版发行地"
If Not IsNull(Rs(i)) Then
CTl_Block(6) = CTl_Block(6) & Chr(31) & "a" & Trim(Rs(i))
End If
Case "CBZ", "出版者", "出版发行者"
If Not IsNull(Rs(i)) Then
CTl_Block(6) = CTl_Block(6) & Chr(31) & "c" & Trim(Rs(i))
End If
Case "CBRQ", "出版日期", "出版发行日期"
If Not IsNull(Rs(i)) Then
CTl_Block(6) = CTl_Block(6) & Chr(31) & "d" & Trim(Rs(i))
End If
Case "YS", "页数"
If Not IsNull(Rs(i)) Then
CTl_Block(7) = CTl_Block(7) & Chr(31) & "a" & Trim(Rs(i))
End If
Case "KB", "开本"
If Not IsNull(Rs(i)) Then
CTl_Block(7) = CTl_Block(7) & Chr(31) & "d" & Trim(Rs(i))
End If
Case "FLH", "分类号"
If Not IsNull(Rs(i)) Then
CTl_Block(8) = CTl_Block(8) & Chr(31) & "a" & Trim(Rs(i))
End If
Case "BC", "版次"
If Not IsNull(Rs(i)) Then
CTl_Block(8) = CTl_Block(8) & Chr(31) & "v" & Trim(Rs(i))
End If
' Case "GJ", "国家"
' If Not IsNull(rs(i)) Then
' CTl_Block(9) = CTl_Block(9) & Chr(31) & "a" & Trim(rs(i))
' End If
' End Select Next i
CTl_Block(9) = CTl_Block(9) & Chr(31) & "a" & "CN"
CTl_Block(10) = CTl_Block(10) & Chr(31) & "a" & Trim(GDM)
CTl_Block(11) = CTl_Block(11) & Chr(31) & "a" & "科技"
tmpstr = Trim(CTl_Block(3))
CTl_Block(3) = Chr(32) & Chr(32) & Chr(31) & "a" & comdata.Create_time & comdata.Create_type
CTl_Block(3) = CTl_Block(3) & comdata.create_year1 & comdata.create_year2
CTl_Block(3) = CTl_Block(3) & comdata.Depart_code & comdata.Alter_rec
CTl_Block(3) = CTl_Block(3) & comdata.yz_code & comdata.yw_code & comdata.char_set
CTl_Block(3) = CTl_Block(3) & comdata.char_set_app & comdata.tmwz_code
CTl_Block(3) = CTl_Block(3) & tmpstr
For i = 1 To 11
CTl_Block(i) = CTl_Block(i) & Chr(30) '加入休止符
Next i
'写入文件:据数组中的信息收集写入文件
Total_len = 0
For i = 1 To 11
Cur_len = TestStrLen(CTl_Block(i))
Total_len = Total_len + Cur_len
DIR_Block(i, 2) = Format(Cur_len, "0000")
Next i
Last_Pos = 0
For i = 1 To 11
'置于位置数组
DIR_Block(i, 3) = Format(Last_Pos, "00000")
Last_Pos = Val(DIR_Block(i, 2)) + Val(DIR_Block(i, 3))
Next i
'设定前24字节中的数据
Head.Dir_len = Format(24 + 1 + 11 * 12, "00000")
Head.Head = Format(Total_len + 1 + Val(Head.Dir_len), "00000")
' Head.Head = Format(Total_len + Val(Head.Dir_len), "00000")
Put F1, , Head
For i = 1 To 11
For k = 1 To 3
Put F1, , DIR_Block(i, k)
Next k
Next i
Put F1, , Stop_char '结束符
For i = 1 To 11
Put F1, , CTl_Block(i)
Next i
Put F1, , C_1D
If CRLF Then Put F1, , CrLf_char
Rs.MoveNext
Loop
Rs.Close
Close F1
MsgBox "数据已经转换完毕!", vbInformation, "通知"
End Sub
Type CommonData
Create_time As String * 8
Create_type As String * 1
create_year1 As String * 4
create_year2 As String * 4
reader As String * 3
Depart_code As String * 1
Alter_rec As String * 1
yz_code As String * 3
yw_code As String * 1
char_set As String * 4
char_set_app As String * 4
tmwz_code As String * 2
End Type
这是一列(一条记录)中的前面部分,后边就是ISBN号那些了。。
我就是这前边200多位不知道是怎么来的。
看你的程序Dim RecCtl As String '形如nam0,但没看到调用的地方啊??
还有你的“JLKZB”,是数据库里的字段吧,可我现在的数据库里没有非常感谢你的帮助