마크작성기능 완료, fullmarc 해석기 1차완료

This commit is contained in:
2026-02-23 22:29:01 +09:00
parent 5271f9f1c3
commit 1b77fd02b0
6 changed files with 200 additions and 343 deletions

View File

@@ -1,3 +1,4 @@
using Org.BouncyCastle.Pkcs;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@@ -155,47 +156,75 @@ namespace UniMarc
} }
} }
} }
public (bool success, string message) ParseFullMarc(string data)
public void ParseFullMarc(string data)
{ {
System.Text.StringBuilder AlertMessage = new StringBuilder();
Fields.Clear(); Fields.Clear();
if (string.IsNullOrEmpty(data) || data.Length < 24) return; if (data.Length < 24) return (false, "마크데이터가 24보다 작습니다");
//리더부는 항상 24바이트이다. 0~23까지이다.
Leader = data.Substring(0, 24); Leader = data.Substring(0, 24);
if (!int.TryParse(Leader.Substring(12, 5), out int baseAddress)) return; if (!int.TryParse(Leader.Substring(12, 5), out int baseAddress)) return (false, string.Empty);
// Detection: Is the directory using Standard Byte Offsets (ANSI) or Scaled Byte Offsets (Unicode/UTF16)? //data Length
bool isScaled = false; if (int.TryParse(Leader.Substring(0, 5), out int dataLength) == false)
if (data.Length >= 31)
{ {
if (int.TryParse(data.Substring(27, 4), out int len008) && len008 > 75) return (false, "Leader 전체 데이터 길이를 확인할 수 없습니다");
isScaled = true;
} }
bool isScaled = false;
int directoryLength = baseAddress - 24; int directoryLength = baseAddress - 24;
int entryCount = directoryLength / 12; int entryCount = directoryLength / 12;
var directory = data.Substring(24, directoryLength);
for (int i = 0; i < entryCount; i++) var RealData = data.Substring(24 + directoryLength);
if (RealData.Contains((char)0x1D) == false)
{ {
int entryStart = 24 + (i * 12); AlertMessage.AppendLine($"레코드식별기호 0x1D 가 없습니다");
if (entryStart + 12 > data.Length) break; }
if (data[entryStart] == '\x1E' || data[entryStart] == '^' || data[entryStart] == FIELD_TERMINATOR) break; else RealData = RealData.Trim((char)0x1D);
string tag = data.Substring(entryStart, 3); //태그별식별기호로 분리한다.
if (!int.TryParse(data.Substring(entryStart + 3, 4), out int length)) continue; if (RealData[RealData.Length - 1] == (char)0x1E)
if (!int.TryParse(data.Substring(entryStart + 7, 5), out int offset)) continue; RealData = RealData.Substring(0, RealData.Length - 1);
// Scaling logic: directory values represent Unicode byte offsets (2x chars) var Tags = RealData.Split((char)0x1E);
// Integer division (offset / 2) maps the byte offset to the starting char index. if(Tags.Length != entryCount)
// Addition of 1 to length before division handles odd byte-lengths (markers). {
int actualOffset = isScaled ? (offset / 2) : offset; AlertMessage.AppendLine($"디렉토리 카운트({entryCount})와 태그수량({Tags.Length})이 일치하지 않습니다");
int actualLength = isScaled ? ((length + 1) / 2) : length; }
if (baseAddress + actualOffset >= data.Length) continue; for (int i = 0; i < Math.Min(entryCount,Tags.Length); i++)
if (baseAddress + actualOffset + actualLength > data.Length) {
actualLength = data.Length - (baseAddress + actualOffset); int entryStart = (i * 12);
string fieldData = data.Substring(baseAddress + actualOffset, actualLength); //TAG(3)+LENGTH(4)+OFFSET(5)=12
if (entryStart + 12 > directory.Length) break;
if (directory[entryStart] == '\x1E' || directory[entryStart] == '^' || directory[entryStart] == FIELD_TERMINATOR) break;
string tag = directory.Substring(entryStart, 3);
var tag_len = directory.Substring(entryStart + 3, 4);
var tag_off = directory.Substring(entryStart + 7, 5);
if (!int.TryParse(tag_len, out int length))
{
AlertMessage.AppendLine($"태그({tag}) 길이를 확인할 수 없습니다 값:{tag_len}");
}
if (!int.TryParse(tag_off, out int offset))
{
AlertMessage.AppendLine($"태그({tag}) 오프셋을 확인할 수 없습니다 값:{offset}");
}
string fieldData = Tags[i];
fieldData = fieldData.TrimEnd('\x1E', '\x1D', FIELD_TERMINATOR, '^', ' '); fieldData = fieldData.TrimEnd('\x1E', '\x1D', FIELD_TERMINATOR, '^', ' ');
MarcField field = new MarcField(tag); MarcField field = new MarcField(tag);
@@ -203,16 +232,42 @@ namespace UniMarc
field.ControlValue = fieldData; field.ControlValue = fieldData;
else else
{ {
if (fieldData.Length >= 2) var subfieldIndex = fieldData.IndexOf((char)0x1f);
string fielddata = "";
if (subfieldIndex < 0)
{
//1f가 없는 것은 오류 처리한다.
continue;
}
else if (subfieldIndex < 1)
{
//지시기호없이 데이터가 시작되는경우이다.
field.Indicators = " ";
ParseSubfields(field, fieldData);
}
else if (subfieldIndex < 2)
{
//지시기호가1개이다 뒤에 공백을 넣자
field.Indicators = fieldData.Substring(0, subfieldIndex) + " ";
ParseSubfields(field, fieldData.Substring(1));
}
else if (subfieldIndex > 2)
{
//지시기호가 2자리보다 길다? 이건 오류처리하자.
field.Indicators = " ";
ParseSubfields(field, fieldData.Substring(subfieldIndex));
}
else
{ {
field.Indicators = fieldData.Substring(0, 2); field.Indicators = fieldData.Substring(0, 2);
ParseSubfields(field, fieldData.Substring(2)); ParseSubfields(field, fieldData.Substring(2));
} }
else if (fieldData.Length > 0)
ParseSubfields(field, fieldData);
} }
Fields.Add(field); Fields.Add(field);
} }
return (true, AlertMessage.ToString());
} }
public List<T> GetTag<T>(string path) public List<T> GetTag<T>(string path)

View File

@@ -16,6 +16,12 @@ namespace UniMarc
{ {
Application.EnableVisualStyles(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false); Application.SetCompatibleTextRenderingDefault(false);
//var parserF = new UniMarc.MarcParser();
//var fullMarc = System.IO.File.ReadAllText(".\\Helper\\sample_fullmarc.txt");
//var rlt = parserF.ParseFullMarc(fullMarc);
//if(rlt.success==false)
//AR.UTIL.MsgE("unitmarc"); //AR.UTIL.MsgE("unitmarc");
try try
{ {

View File

@@ -2047,8 +2047,12 @@
<None Include="Connected Services\BaroService_TI\UniMarc.BaroService_TI.UpdateUserPWDResponse.datasource"> <None Include="Connected Services\BaroService_TI\UniMarc.BaroService_TI.UpdateUserPWDResponse.datasource">
<DependentUpon>Reference.svcmap</DependentUpon> <DependentUpon>Reference.svcmap</DependentUpon>
</None> </None>
<None Include="Helper\sample_fullmarc" /> <Content Include="Helper\sample_fullmarc.txt">
<None Include="Helper\sample_richtext" /> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Helper\sample_richtext.txt">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<None Include="packages.config" /> <None Include="packages.config" />
<None Include="Properties\app.manifest" /> <None Include="Properties\app.manifest" />
<None Include="Properties\Settings.settings"> <None Include="Properties\Settings.settings">

View File

@@ -55,13 +55,6 @@ namespace UniMarc
this.marcEditorControl1.SetMarcString(marc); this.marcEditorControl1.SetMarcString(marc);
} }
private void MarcEditorControl1_BookSaved(object sender, EventArgs e)
{
// Removed - logic moved to btn_Save_Click
}
private void tb_ISBN_KeyDown(object sender, KeyEventArgs e) private void tb_ISBN_KeyDown(object sender, KeyEventArgs e)
{ {
if (e.KeyCode != Keys.Enter) if (e.KeyCode != Keys.Enter)
@@ -119,11 +112,6 @@ namespace UniMarc
} }
private void btn_close_Click(object sender, EventArgs e)
{
this.Close();
}
private void btn_Empty_Click(object sender, EventArgs e) private void btn_Empty_Click(object sender, EventArgs e)
{ {
TextReset(); TextReset();
@@ -197,91 +185,82 @@ namespace UniMarc
} }
#region SaveSub
/// <summary> /// <summary>
/// 마크DB에 UPDATE해주는 함수 /// 마크DB에 UPDATE해주는 함수
/// </summary> /// </summary>
/// <param name="Table">테이블 이름</param> /// <param name="Table">테이블 이름</param>
/// <param name="MarcIndex">마크 인덱스 번호</param> /// <param name="MarcIndex">마크 인덱스 번호</param>
/// <param name="oriMarc">한줄짜리 마크</param> /// <param name="FullMarc">한줄짜리 마크</param>
/// <param name="grade">마크 등급</param> /// <param name="grade">마크 등급</param>
/// <param name="tag056">분류기호</param> /// <param name="tag056">분류기호</param>
/// <param name="date">저장시각 yyyy-MM-dd HH:mm:ss</param> /// <param name="v_date">저장시각 yyyy-MM-dd HH:mm:ss</param>
void UpdateMarc(string MarcIndex, string oriMarc, string grade, string tag056, string tag008, string date) void UpdateMarc(string MarcIndex, string FullMarc, string grade)
{ {
var etc1 = rtEtc1.Text.Trim(); //도서정보추출
var etc2 = rtEtc2.Text.Trim(); var v_isbn = "";
var v_price = "";
var v_author = "";
var v_title = "";
var v_publisher = "";
var v_date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
if (grade.isEmpty()) grade = "2"; //파서를 사용해서 변경한다
string[] EditTable = var parser = new UniMarc.MarcParser();
parser.ParseFullMarc(FullMarc);
//ISBN와 가격 (처음나오는 020태그의 값을 적용)
var tag_020 = parser.GetTag<MarcField>("020").FirstOrDefault();
if (tag_020 != null)
{ {
"compidx", "marc", "marc_chk","marc1", "marc_chk1", "비고1", v_isbn = tag_020.GetSubfieldValue('a');
"비고2", "division", "008tag", "date", "user", v_price = tag_020.GetSubfieldValue('c');
"grade"
};
string[] EditColumn =
{
PUB.user.CompanyIdx, oriMarc, "1",mOldMarc, "0", etc1,
etc2, tag056, tag008, date, PUB.user.UserName,
grade.ToString()
};
string[] SearchTable = { "idx", "compidx" };
string[] SearchColumn = { MarcIndex, PUB.user.CompanyIdx };
//int marcChk = subMarcChk(Table, MarcIndex);
//if (IsCovertDate)
// marcChk--;
//switch (marcChk)
//{
// case 0:
// EditTable[1] = "marc1";
// EditTable[2] = "marc_chk1";
// EditTable[3] = "marc_chk";
// break;
// case 1:
// EditTable[1] = "marc2";
// EditTable[2] = "marc_chk2";
// EditTable[3] = "marc_chk1";
// break;
// case 2:
// EditTable[1] = "marc";
// EditTable[2] = "marc_chk";
// EditTable[3] = "marc_chk2";
// break;
// default:
// EditTable[1] = "marc";
// EditTable[2] = "marc_chk";
// EditTable[3] = "marc_chk2";
// break;
//}
string UpCMD = db.More_Update("Marc", EditTable, EditColumn, SearchTable, SearchColumn);
PUB.log.Add("ADDMarcUPDATE", string.Format("{0}({1}) : {2}", PUB.user.UserName, PUB.user.CompanyIdx, UpCMD.Replace("\r", " ").Replace("\n", " ")));
var rlt = Helper_DB.ExcuteNonQuery(UpCMD);
if (rlt.applyCount != 1)
UTIL.MsgE(rlt.errorMessage);
else
UTIL.MsgI("변경 완료");
} }
//저자(100 -> 110 -> 111 순으로 적용)
var tag_100 = parser.GetTag<MarcField>("100").FirstOrDefault();
var tag_110 = parser.GetTag<MarcField>("110").FirstOrDefault();
var tag_111 = parser.GetTag<MarcField>("111").FirstOrDefault();
if (tag_111 != null)
v_author = tag_111.GetSubfieldValue('a');
else if (tag_110 != null)
v_author = tag_110.GetSubfieldValue('a');
else if (tag_100 != null)
v_author = tag_100.GetSubfieldValue('a');
//서명
var tag_245 = parser.GetTag<MarcSubfield>("245a").FirstOrDefault();
v_title = tag_245?.Value ?? string.Empty;
/// <summary> //출판사
/// 마크DB에 INSERT해주는 함수 var tag_300b = parser.GetTag<MarcSubfield>("300b").FirstOrDefault();
/// </summary> v_publisher = tag_300b?.Value ?? string.Empty;
/// <param name="Table">테이블 이름</param>
/// <param name="BookData">0:ISBN 1:서명 2:저자 3:출판사 4:정가</param> //056a
/// <param name="oriMarc">한줄짜리 마크</param> var v_056 = parser.GetTag("056a").FirstOrDefault() ?? string.Empty;
/// <param name="grade">마크 등급</param> var v_008 = parser.GetTag("008").FirstOrDefault() ?? string.Empty;
/// <param name="tag056">분류기호</param>
/// <param name="date">저장시각 yyyy-MM-dd HH:mm:ss</param> if (v_056.isEmpty() || v_008.isEmpty())
void InsertMarc(string[] BookData, string oriMarc, string grade, string tag056, string tag008, string date)
{ {
if (grade.isEmpty()) grade = "2"; UTIL.MsgE("056a | 008 태그의 값을 확인할 수 없습니다\n1.마크데이터를 확인 해주세요\n2.개발자에 해당 내용을 문의하세요");
return;
}
if (v_isbn.isEmpty() || v_title.isEmpty())
{
UTIL.MsgE("ISBN과 서명을 추출하지 못했습니다\n1.마크데이터를 확인 해주세요\n2.개발자에 해당 내용을 문의하세요");
return;
}
var etc1 = rtEtc1.Text.Trim(); var etc1 = rtEtc1.Text.Trim();
var etc2 = rtEtc2.Text.Trim(); var etc2 = rtEtc2.Text.Trim();
if (grade.isEmpty()) grade = "2";
if (MarcIndex.isEmpty())
{
//insert
string[] InsertTable = string[] InsertTable =
{ {
"ISBN", "서명", "저자", "출판사", "가격", "ISBN", "서명", "저자", "출판사", "가격",
@@ -291,7 +270,7 @@ namespace UniMarc
//데이터중복검사필요 //데이터중복검사필요
//동일 isbnd있다면 그래도 저장할건지 한번 더 물어봐야 함 //동일 isbnd있다면 그래도 저장할건지 한번 더 물어봐야 함
if (DB_Utils.ExistISBN(BookData[0])) if (DB_Utils.ExistISBN(v_isbn))
{ {
if (UTIL.MsgQ("동일한 ISBN이 이미 존재합니다. 그래도 저장하시겠습니까?") == DialogResult.No) if (UTIL.MsgQ("동일한 ISBN이 이미 존재합니다. 그래도 저장하시겠습니까?") == DialogResult.No)
return; return;
@@ -299,9 +278,9 @@ namespace UniMarc
string[] InsertColumn = string[] InsertColumn =
{ {
BookData[0], BookData[1], BookData[2], BookData[3], BookData[4], v_isbn, v_title, v_author, v_publisher, v_price,
oriMarc, etc1, etc2, grade.ToString(), "1", FullMarc, etc1, etc2, grade.ToString(), "1",
PUB.user.UserName, tag056, tag008, date, PUB.user.CompanyIdx PUB.user.UserName, v_056, v_008, v_date, PUB.user.CompanyIdx
}; };
string InCMD = db.DB_INSERT("Marc", InsertTable, InsertColumn); string InCMD = db.DB_INSERT("Marc", InsertTable, InsertColumn);
@@ -316,197 +295,37 @@ namespace UniMarc
UTIL.MsgI($"저장 완료\n\nIDX:{rlt.value}"); UTIL.MsgI($"저장 완료\n\nIDX:{rlt.value}");
} }
} }
/// <summary>
/// 마크 저장시 사용하며, 마지막 수정일과 수정자를 가져와 덮어씌울지 백업데이터를 만들지 구분
/// </summary>
/// <param name="TimeSpanDaysValue">저장할 마크의 마지막 수정일</param>
/// <param name="user">저장할 마크의 마지막 수정자</param>
/// <returns>마지막 수정일로부터 2일이 지나지 않고, 마지막 수정자와 해당 유저가 동일 할 경우 True 반환</returns>
private bool IsCoverData(int TimeSpanDaysValue, string user)
{
if (TimeSpanDaysValue < -1)
return false;
if (user != PUB.user.UserName)
return false;
return true;
}
private TimeSpan CheckDate(string LastDate, string SaveDate)
{
DateTime Last = Convert.ToDateTime(LastDate);
DateTime Save = Convert.ToDateTime(SaveDate);
return Last - Save;
}
/// <summary>
/// 관련 도서 정보를 가져옴
/// </summary>
/// <param name="ViewMarc">뷰형태의 마크</param>
/// <returns>0:ISBN 1:서명 2:저자 3:출판사 4:정가</returns>
string[] GetBookData(string ViewMarc)
{
// ISBN, BookName, Author, BookComp, Price
string[] result = { "", "", "", "", "" };
bool IsISBN = false;
string[] TargetArr = ViewMarc.Split('\n');
foreach (string Target in TargetArr)
{
string[] tmp = Target.Replace("▲", "").Split('\t');
// 0:ISBN 4:Price
if (tmp[0] == "020" && !IsISBN)
{
IsISBN = true;
result[0] = GetMiddelString(tmp[2], "▼a", "▼");
result[4] = GetMiddelString(tmp[2], "▼c", "▼");
}
// 2:Author
if (tmp[0] == "100")
result[2] = GetMiddelString(tmp[2], "▼a", "▼");
else if (tmp[0] == "110")
result[2] = GetMiddelString(tmp[2], "▼a", "▼");
else if (tmp[0] == "111")
result[2] = GetMiddelString(tmp[2], "▼a", "▼");
// 1:BookName
if (tmp[0] == "245")
result[1] = GetMiddelString(tmp[2], "▼a", "▼");
// 3:BookComp
if (tmp[0] == "300")
result[3] = GetMiddelString(tmp[2], "▼b", "▼");
}
//파서를 사용해서 변경한다
var parser = new UniMarc.MarcParser();
parser.ParseMnemonic(ViewMarc);
//ISBN와 가격 (처음나오는 020태그의 값을 적용)
var tag_020 = parser.GetTag<MarcField>("020").FirstOrDefault();
if (tag_020 != null)
{
result[0] = tag_020.GetSubfieldValue('a');
result[4] = tag_020.GetSubfieldValue('c');
}
//저자(100 -> 110 -> 111 순으로 적용)
var tag_100 = parser.GetTag<MarcField>("100").FirstOrDefault();
var tag_110 = parser.GetTag<MarcField>("110").FirstOrDefault();
var tag_111 = parser.GetTag<MarcField>("111").FirstOrDefault();
if (tag_111 != null)
result[2] = tag_111.GetSubfieldValue('a');
else if (tag_110 != null)
result[2] = tag_110.GetSubfieldValue('a');
else if (tag_100 != null)
result[2] = tag_100.GetSubfieldValue('a');
//서명
var tag_245 = parser.GetTag<MarcSubfield>("245a").FirstOrDefault();
result[1] = tag_245?.Value ?? string.Empty;
//출판사
var tag_300b = parser.GetTag<MarcSubfield>("300b").FirstOrDefault();
result[3] = tag_300b?.Value ?? string.Empty;
return result;
}
/// <summary>
/// 문자와 문자사이의 값 가져오기
/// </summary>
/// <param name="str">대상 문자열</param>
/// <param name="begin">시작 문자열</param>
/// <param name="end">마지막 문자열</param>
/// <param name="TagNum">불러올 태그 번호</param>
/// <returns>문자 사이값</returns>
public string GetMiddelString(string str, string begin, string end, string TagNum = "")
{
string result = "";
if (string.IsNullOrEmpty(str) || str == "")
return result;
int count = 0;
bool loop = false;
for (int a = count; a < str.Length; a++)
{
count = str.IndexOf(begin);
if (count > -1)
{
str = str.Substring(count + begin.Length);
if (loop)
// 여러 태그들 구분을 지어줌.
result += "▽";
if (str.IndexOf(end) > -1)
result += str.Substring(0, str.IndexOf(end));
else else
result += str; {
//update
result = TrimEndGubun(result, TagNum); string[] EditTable =
} {
"compidx", "marc", "marc_chk","marc1", "marc_chk1", "비고1",
"비고2", "division", "008tag", "date", "user",
"grade"
};
string[] EditColumn =
{
PUB.user.CompanyIdx, FullMarc, "1",mOldMarc, "0", etc1,
etc2, v_056, v_008, v_date, PUB.user.UserName,
grade.ToString()
};
string[] SearchTable = { "idx", "compidx" };
string[] SearchColumn = { MarcIndex, PUB.user.CompanyIdx };
string UpCMD = db.More_Update("Marc", EditTable, EditColumn, SearchTable, SearchColumn);
PUB.log.Add("ADDMarcUPDATE", string.Format("{0}({1}) : {2}", PUB.user.UserName, PUB.user.CompanyIdx, UpCMD.Replace("\r", " ").Replace("\n", " ")));
var rlt = Helper_DB.ExcuteNonQuery(UpCMD);
if (rlt.applyCount != 1)
UTIL.MsgE(rlt.errorMessage);
else else
break; UTIL.MsgI("변경 완료");
loop = true;
} }
return result;
} }
string TrimEndGubun(string str, string TagNum)
{
char[] gu = { '.', ',', ':', ';', '/', ' ' };
if (TagNum == "300" || TagNum == "300a")
{
str = str.Trim();
if (TagNum == "300a")
{
gu = new char[] { '.', ',', '=', ':', ';', '/', '+', ' ' };
for (int i = 0; i < gu.Length; i++)
{
str = str.TrimEnd(gu[i]);
}
}
if (str.Contains("ill."))
return str;
if (str.Contains("p."))
return str;
}
if (TagNum == "710" || TagNum == "910")
return str;
if (TagNum == "245") gu = new char[] { '.', ':', ';', '/', ' ' };
if (TagNum == "245a") gu = new char[] { '.', ',', '=', ':', ';', '/', ' ' };
for (int i = 0; i < gu.Length; i++)
{
str = str.TrimEnd(gu[i]);
}
//foreach (char gubun in gu)
//{
// if (str.Length < 1) continue;
// if (str[str.Length - 1] == gubun)
// {
// str = str.Remove(str.Length - 1);
// str = str.Trim();
// }
//}
return str;
}
#endregion
private void Btn_SearchKolis_Click(object sender, EventArgs e) private void Btn_SearchKolis_Click(object sender, EventArgs e)
{ {
AddMarc_FillBlank af = new AddMarc_FillBlank(this); AddMarc_FillBlank af = new AddMarc_FillBlank(this);
@@ -548,7 +367,7 @@ namespace UniMarc
var inputdate = tag008.Substring(0, 6); var inputdate = tag008.Substring(0, 6);
if (inputdate == "000000") if (inputdate == "000000")
inputdate = DateTime.Now.ToString("yyMMdd"); inputdate = DateTime.Now.ToString("yyMMdd");
else else if (inputdate != DateTime.Now.ToString("yyMMdd"))
{ {
if (UTIL.MsgQ($"입력일자({inputdate})를 오늘로 변경할까요?") == DialogResult.Yes) if (UTIL.MsgQ($"입력일자({inputdate})를 오늘로 변경할까요?") == DialogResult.Yes)
{ {
@@ -560,43 +379,18 @@ namespace UniMarc
if (marcEditorControl1.CheckValidation() == false) return; if (marcEditorControl1.CheckValidation() == false) return;
string tag056 = marcEditorControl1.Tag056(out string with008TagOutput);// Tag056(dbMarc, _param); string tag056 = marcEditorControl1.Tag056(out string with008TagOutput);// Tag056(dbMarc, _param);
//tag056을 호출해야 008이추가된다.그런후에 데이터를 처리해야함 //tag056을 호출해야 008이추가된다.그런후에 데이터를 처리해야함
string fullMarc = marcEditorControl1.MakeMarcString(); string fullMarc = marcEditorControl1.MakeMarcString();
var marcString = marcEditorControl1.richTextBox1.Text; var marcString = marcEditorControl1.richTextBox1.Text;
var parser = new UniMarc.MarcParser();
parser.ParseMnemonic(marcString);
//풀마크분석은 아직 오류가 있음.
var parserF = new UniMarc.MarcParser(); var parserF = new UniMarc.MarcParser();
parserF.ParseFullMarc(fullMarc); parserF.ParseFullMarc(fullMarc);
var v_056 = parser.GetTag("056a").FirstOrDefault() ?? string.Empty;
if (tag056.isEmpty())
{
UTIL.MsgE("056 태그값을 확인할 수 없습니다\n개발자 문의 하세요");
return;
}
string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
//string orimarc = st.made_Ori_marc(dbMarc).Replace(@"\", "₩");
//if (!isMustTag(orimarc))
//{
// return;
//}
//var MarcText = fullMarc;
string midx = this.lbl_Midx.Tag?.ToString() ?? string.Empty; string midx = this.lbl_Midx.Tag?.ToString() ?? string.Empty;
string[] BookData = GetBookData(marcString); if (isUpdate == false) midx = string.Empty;
if (string.Join("", BookData).isEmpty())
{
UTIL.MsgE("도서정보를 추출할 수 없습니다\n개발자 문의 하세요");
return;
}
var v_grade = ""; var v_grade = "";
if (radA.Checked) v_grade = "0"; if (radA.Checked) v_grade = "0";
@@ -604,10 +398,8 @@ namespace UniMarc
else if (radC.Checked) v_grade = "2"; else if (radC.Checked) v_grade = "2";
else if (radD.Checked) v_grade = "3"; else if (radD.Checked) v_grade = "3";
if (isUpdate) //midx 값이 emptry 라면 insert , 아니라면 update
UpdateMarc(midx, fullMarc, v_grade, tag056, tag008, date); UpdateMarc(midx, fullMarc, v_grade);
else
InsertMarc(BookData, fullMarc, v_grade, tag056, tag008, date);
} }