社区
C#
帖子详情
c# 转换marc 数据
longjxchina
2008-05-29 05:44:29
用c# 转换marc数据,再将转换后的数据保存到数据库里面。
...全文
397
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;
}
}
iso文件读取
读取iso文件 ,以行的形式读取 再根据 行中 间隔空值 以数组读取
转换
表 更具数组
转换
表 ,
马克
数据
1.马克
数据
百科 http://baike.baidu.com/view/671158.htm#4 2.用
c#
读取马克
数据
。 http://www.nmgkjyjj.com/Article_Print.asp?ArticleID=2275 3. 用
C#
读写M
ARC
的原理与方法 http://www.doc88.com/p-82522808037.html
程序员内功修炼 -
数据
结构(
C#
)
你有没有面试的时候,被问到
数据
结构的问题,你有没有在面对需求的时候一头雾水?五斗米老师又出新课程了,
数据
结构一直是程序员的软实力,是算法课题的基础,游戏行业对其更为看重。学习
C#
语言之后的能力进阶,写出高效的代码,培养专业的程序设计思维,训练使用程序语言描述解决方案的能力,你如果刚好也是一枚Unity程序员,千万不要错过,绝对能帮得到你。
笛卡尔乘积c语言代码,
c#
– 高效笛卡尔乘积算法
有人可以向我证明比目前使用的笛卡儿乘积算法更有效(假设有一个)。我已经看了周围的SO和谷歌,但看不到任何明显的东西,所以我可能会缺少一些东西。foreach (int i in is) {foreach (int j in js) {//Pair i and j}}这是我在代码中做的非常简化的版本。两个整数是用于检索一个/多个对象的查找键,并且来自两个查找的所有对象都被配对在一起成为新对象。这个小...
详解
C#
中的Delegate
如果你想拿
C#
与其它“C家族”的语言做比较,
C#
正有个不同寻常的特性,其在 C++ 或者 Java 里没有真正意义上的对应之物。
C#
是一个颇具争议的新兴语言,由 Microsoft 开发创造,以作为其 Visual Studio.NET 的基石,目前正处于第一个 Beta 版的发布阶段。
C#
结合了源自 C++ 和 Java 的许多特性。Java 社群对
C#
主要的批评在于,其声称
C#
只是一个蹩脚的 Java 克隆版本 ——与其说它是语言创新的成果,倒不如说
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章