社区
C#
帖子详情
c# 转换marc 数据
longjxchina
2008-05-29 05:44:29
用c# 转换marc数据,再将转换后的数据保存到数据库里面。
...全文
443
3
打赏
收藏
c# 转换marc 数据
用c# 转换marc数据,再将转换后的数据保存到数据库里面。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
XIAOCONGCN
2009-01-05
打赏
举报
回复
研究,试试
longjxchina
2008-05-30
打赏
举报
回复
非常感谢。
yangshun2008
2008-05-29
打赏
举报
回复
自己研究一下吧:
public class exeMarc
{
private static StreamReader FileReadStream;
private static System.IO.FileStream CheckStream;
private static string FilePath;
public exeMarc()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public DataTable MarcTodt(string Path)
{
DataTable dt = new DataTable();
DataColumn ISBN=new DataColumn("ISBN",System.Type.GetType("System.String"));
dt.Columns.Add(ISBN);
dt.Columns.Add("ID",System.Type.GetType("System.String"));
DataColumn ID=new DataColumn("ID",System.Type.GetType("System.String"));
dt.Columns.Add("书名",System.Type.GetType("System.String"));
dt.Columns.Add("Author",System.Type.GetType("System.String"));
dt.Columns.Add("Price",System.Type.GetType("System.String"));
dt.Columns.Add("Press",System.Type.GetType("System.String"));
dt.Columns.Add("PressYear",System.Type.GetType("System.String"));
dt.Columns.Add("Abstract",System.Type.GetType("System.String"));
//dt.Columns.Add("Number",
DataColumn[] pris=new DataColumn[1];
CheckStream=new FileStream(Path,FileMode.Open,FileAccess.Read,FileShare.Read);
FileReadStream=new StreamReader(Path,System.Text.Encoding.Default);
FilePath =Path;
string BuffStr;
int CurrLine = 1;
while ((int)(FileReadStream.Peek()) >= 0)
{
try
{
BuffStr = FileReadStream.ReadLine();//读取FileReadStream中一行字符,并赋值给BuffStr
if(BuffStr.Length > 0)
{
dt.Rows.Add(GetData(BuffStr)); //加入到dt中
CurrLine++;
}
}
catch
{
CurrLine--;
}
}
FileReadStream.Close();
dt.TableName =Path;
return dt;
}
private string[] GetData(string Buff)
{
if (Buff.Length == 0)
{
return new string[8];
}
string ID = "无"; //识别码
string BookName = "无"; //书名
string Author = "无"; //作者
string ISBN = "无"; //ISBN
string Price = "无"; //价格
string Press = "无"; //出版社
string PressYear = "无"; //出版年
string Abstract = "无"; //摘要
int IndexLen = int.Parse(Buff.Substring(12, 5)) - 25;
string IndexRecord = Buff.Substring(24, IndexLen); //目次区内容
int Data_Address = int.Parse(Buff.Substring(12, 5)); //数据区地址
//ISBN
ISBN = GetRecord(Buff, "010", "a", IndexRecord, Data_Address).Trim();
//识别码
ID = GetRecord(Buff, "001", "", IndexRecord, Data_Address).Trim();
//书名
BookName = GetRecord(Buff, "200", "a", IndexRecord, Data_Address).Trim();
//作者
Author = GetRecord(Buff, "200", "f", IndexRecord, Data_Address).Trim();
//价格
Price = GetRecord(Buff, "010", "d", IndexRecord, Data_Address).Trim();
//出版社
Press = GetRecord(Buff, "210", "c", IndexRecord, Data_Address).Trim();
//出版年
PressYear = GetRecord(Buff, "210", "d", IndexRecord, Data_Address).Trim();
//摘要
Abstract = GetRecord(Buff, "330", "a", IndexRecord, Data_Address).Trim();
string[] ret = {ISBN,ID, BookName, Author, Price, Press, PressYear, Abstract};
return ret;
}
/// <summary>
/// 返回Buff中的字段号为 Member, 子字段号为 ZiMember 的数据
/// </summary>
/// <param name="Buff"></param>
/// <param name="Member">字段号</param>
/// <param name="SubMember">子字段号</param>
/// <param name="Data_Addr">地址区基地址</param>
/// <returns></returns>
public string GetRecord(string Buff, string Member, string SubMember, string IndexRecord, int Data_Addr)
{
string temp1 = ((char)30).ToString(); //子记录分隔符
string temp2 = ((char)31).ToString(); //子字段分隔符
if (SubMember != "")
{
SubMember = temp2 + SubMember;
}
string SubMbrData = "";
int Address;
int Len;
string Sub;
int SubMbrIndex;
int SubMbrLen;
for (int i = 0; i < IndexRecord.Length / 12; i++)
{
if (Member == IndexRecord.Substring(i * 12, 3))
{
//子记录相对于数据区偏移地址
Address = int.Parse(IndexRecord.Substring(i * 12 + 7, 5));
//子记录长度
Len = int.Parse(IndexRecord.Substring(i * 12 + 3, 4));
//子记录数据
int test = GetOffSet(Buff, 0, Address + Data_Addr);
Len -= GetOffSet(Buff, Data_Addr + Address - test, Data_Addr + Address - test + Len);
Sub = Buff.Substring(Data_Addr + Address - test, Len);
int a=Sub.Length;
test = Sub.IndexOf(temp2);
if (Sub.IndexOf(temp2) == Sub.Length - 1)
{
//如果该子记录无子字段
return Sub.Substring(0, Sub.Length - 1);
}
//子字段开始位置0
SubMbrIndex = Sub.IndexOf(SubMember) + SubMember.Length;
//子字段长度
int test11 = Sub.IndexOf(temp2, SubMbrIndex + 2);
bool IsEnd = (Sub.IndexOf(temp2, SubMbrIndex) == -1);
if (! IsEnd)
{
SubMbrLen = Sub.IndexOf(temp2, SubMbrIndex) - SubMbrIndex;
}
else
{
SubMbrLen = Sub.IndexOf(temp1, SubMbrIndex) - SubMbrIndex;
}
//子字段数据
int NextIndex = Sub.IndexOf(temp2, SubMbrIndex + 1); //下一个子字段分隔符的位置
if (NextIndex == -1)
{
SubMbrData = Sub.Substring(SubMbrIndex, SubMbrLen);
}
else
{
SubMbrData = Sub.Substring(SubMbrIndex, SubMbrLen);
}
break;
}
}
char [] test22 = SubMbrData.ToCharArray();
return SubMbrData;
}
/// <summary>
/// 计算由汉字引起的偏移地址误差,返回汉字个数
/// </summary>
///<param name="Buff">待统计的字符串</param>
///<param name="StartIndex">开始位置</param>
///<param name="EndIndex">截至位置</param>
/// <returns></returns>
public int GetOffSet(string Buff, int StartIndex, int EndIndex)
{
char[] temp = Buff.ToCharArray();
int LetterCount = 0, HanZiCount = 0;
for (int i = StartIndex; i < EndIndex; i++)
{
int test = (int)temp[i];
if (test < 128)
{
LetterCount++;
}
else
{
HanZiCount++;
}
if (HanZiCount * 2 + LetterCount == EndIndex - StartIndex)
{
return HanZiCount;
}
}
return HanZiCount;
}
}
M
arc
格式
转换
4. **
数据
处理和
转换
**:在将M
arc
数据
填充到DataTabel之前,可能需要进行
数据
清洗、格式
转换
等预处理工作,确保
数据
的准确性和一致性。 5. **异常处理**:在处理文件I/O和
数据
转换
过程中,可能出现各种错误,如文件...
ssah.lib.nbmm.m
arc
.zip_m
arc
dll_ssah.lib.nbmm.m
arc
_机读目录
总结,这个压缩包中的内容是针对M
ARC
数据
处理的一个.NET库,通过使用
C#
语言和Visual Studio 2008开发,提供了对M
ARC
记录的读取、写入、解析和操作的能力,并且可能支持XML
转换
和
数据
过滤等功能,为图书馆自动化系统...
ssah.lib.nbmm.m
arc
.rar_m
arc
_机读目录
这个压缩包包含了一系列
C#
类文件,是使用Visual Studio 2008开发的,目的是为开发者提供方便的工具来操作M
ARC
数据
。 1. **M
arc
Device.cs**: 这个文件可能定义了一个类,用于处理与M
ARC
数据
源的交互,比如从磁盘、...
ssah.lib.nbmm.m
arc
.rar_机读目录
通过这些文件,开发者构建了一个完整的框架,可以读取、解析、操作和可能
转换
M
ARC
数据
,这对于图书馆自动化系统来说是至关重要的,因为它使得图书馆能够有效地管理和共享他们的资源信息。这样的工具使得图书馆员能够...
z3950客户端检索后自动解析为M
ARC
ISO2709格式文件.rar
标题中的“z3950客户端检索后自动解析为M
ARC
ISO2709格式文件”涉及了两个关键概念:Z39.50协议和M
ARC
...通过分析和理解这个应用,开发者可以学习如何实现Z39.50协议,处理M
ARC
数据
,以及如何用
C#
来构建这类实用工具。
C#
110,893
社区成员
642,618
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章